2008-10-13 54 views
2

在c#中,我有一個窗口句柄(一個IntPtr),我想改變該窗口的背景顏色。我怎樣才能做到這一點?改變一個窗口的背景色,給定一個IntPtr句柄

我能得到GDI圖形對象對於處理像這樣:

圖形顯卡= Graphics.FromHwnd(theHandle);

所以我應該以某種方式能夠從這改變背景顏色?

我也希望確保即使在移動窗口後的背景顏色保持,調整大小,重畫等

回答

0

與Control.FromHandle方法創建一個控制類,然後設置屬性。

喜歡的東西...

 
    Control someControl = Control.FromHandle(myHandle); 
    someControl.BackColor = SystemColors.Black; 
+0

這不起作用 - 可能是因爲我擁有的句柄不是在.Net創建的窗口中(所以someControl返回null) – zadam 2008-10-13 02:53:43

2

我不認爲有一種方式直接與原生(C/C++)窗口,要做到這一點(即不存在原生GDI模擬到Control.BackColor) 。

從查看Reflector看來,Control使用BackColor屬性來響應各種WM_CTLCOLOR *消息(例如WM_CTLCOLOREDIT)。所以,如果你想改變一個本地控件的背景顏色,你可能需要對該窗口進行子類化並響應同一個消息。如果本機窗口不是控件,則仍然需要繼承該窗口的子類,但是您必須改爲處理WM_PAINTWM_ERASEBKGND

嘗試this thread on programmersheaven.com獲取關於如何從C#中繼承本機窗口的建議。

相關問題