2012-07-16 82 views
4

在WinForms和C#中,似乎我無法創建比65535更寬的控件。如果將其設置爲70.000,則該值會重置爲65535. 通過使用ILSpy挖掘Control.Size的源代碼,我無法立即找到負責夾緊尺寸的代碼。WinForms:控件的最大大小是65535 - 解決方法?

那麼這是Win32 API還是Windows窗體的限制?有沒有解決方法,例如與非託管互操作?

我需要這麼大的控制的原因是我把很長的音頻文件的音樂波形繪製到它上面。 (是的,我可以直接繪製波形,沒有包含控件;但這需要大量的重構)。我不是在說這裏的繪圖代碼。顯然只需要繪製可見部分,但事實是我想要一個寬達200,000像素的控件。

+0

看起來很像我的無符號16位int的最大值... – fvu 2012-07-16 06:53:05

+0

我很困惑,你說的是最大值。可以在控件內滾動的內容大小,或控件本身。 – 2012-07-16 06:55:13

+0

曾經有過同樣的問題。只有工作區才能在顯示區域內繪製。它需要一些重構,但它值得。 – Artiom 2012-07-16 06:55:28

回答

10

這是一個winapi限制。一個非常困難的,鼠標位置報告與說,WM_MOUSEMOVE消息與鼠標位置打包到LPARAM參數。 X位有16位,Y位有16位。

你必須處理它。它不是對面板的AutoScrollMinSize屬性的限制。無論如何,在這種情況下你總是使用哪一個,在AutoScrollPosition開始繪畫。

2

我認爲它的Windows窗體的限制,事情是,爲了您的需要,WPF窗體會更適合,因爲它允許更大的負載。只是我的觀點。