在c#中,我有一個窗口句柄(一個IntPtr),我想改變該窗口的背景顏色。我怎樣才能做到這一點?改變一個窗口的背景色,給定一個IntPtr句柄
我能得到GDI圖形對象對於處理像這樣:
圖形顯卡= Graphics.FromHwnd(theHandle);
所以我應該以某種方式能夠從這改變背景顏色?
我也希望確保即使在移動窗口後的背景顏色保持,調整大小,重畫等
在c#中,我有一個窗口句柄(一個IntPtr),我想改變該窗口的背景顏色。我怎樣才能做到這一點?改變一個窗口的背景色,給定一個IntPtr句柄
我能得到GDI圖形對象對於處理像這樣:
圖形顯卡= Graphics.FromHwnd(theHandle);
所以我應該以某種方式能夠從這改變背景顏色?
我也希望確保即使在移動窗口後的背景顏色保持,調整大小,重畫等
與Control.FromHandle方法創建一個控制類,然後設置屬性。
喜歡的東西...
Control someControl = Control.FromHandle(myHandle); someControl.BackColor = SystemColors.Black;
我不認爲有一種方式直接與原生(C/C++)窗口,要做到這一點(即不存在原生GDI模擬到Control.BackColor) 。
從查看Reflector看來,Control使用BackColor屬性來響應各種WM_CTLCOLOR *消息(例如WM_CTLCOLOREDIT)。所以,如果你想改變一個本地控件的背景顏色,你可能需要對該窗口進行子類化並響應同一個消息。如果本機窗口不是控件,則仍然需要繼承該窗口的子類,但是您必須改爲處理WM_PAINT或WM_ERASEBKGND。
嘗試this thread on programmersheaven.com獲取關於如何從C#中繼承本機窗口的建議。
這不起作用 - 可能是因爲我擁有的句柄不是在.Net創建的窗口中(所以someControl返回null) – zadam 2008-10-13 02:53:43