2009-12-29 158 views

回答

6

這些圖標,標題和窗口邊框都是在處理WM_NCPAINT消息時繪製的。所以,你接管繪圖的方式是處理這個消息。

但是,您無權訪問關於圖標的狀態信息(即您應該在中按下哪個按鈕,因爲用戶當前正在點擊該按鈕而按下了狀態)。你甚至不知道鼠標處理代碼認爲這些圖標在哪裏。

所以接管非客戶端的油漆,你還需要接管非客戶端鼠標操作,整個問題只是雪球,直到你寫的代碼行數十萬,您的窗口仍然不當用戶試圖拖動它時表現得非常正確等等。

而且這是在託管代碼(C#/ .Net)中的非託管代碼中,這更加困難,因爲您還必須執行interop才能獲得某些API你需要使用。

所以答案是:是可能的,但它在WinForms和WPF中比在C++中困難得多,而那些嘗試過它的現在都是光頭。

0

如果你想控制這些按鈕的外觀,你必須創建自己的。這是使用Windows功能編寫Windows應用程序的一個值(它們具有標準的外觀和感覺)。

5

真正的答案是你不應該這樣做。用戶期望所有應用程序都能正常工作並且看起來相同讓他們試圖弄清楚你使用的新圖標是否意味着最小化可能會使他們不高興。

+5

對,微軟和Adobe只能這樣做。 – 2009-12-29 20:20:06

+0

我只是好奇... – 2009-12-29 20:26:53

0

是的,你必須創建自己的窗口風格。例如,參考FluidKit,GlassWindows。

2

在wpf中,您可以爲您的窗口設置WindowStyle="None",然後使用最小化,最大化和關閉按鈕爲其設置自定義標題欄。我早些時候做過這個。你需要做一些事件處理,以執行最小化,最大化,關閉,拖動等。

4

這樣做並不困難,但它是很多工作 - 你必須基本上替換窗框並自己處理所有事情是必須重寫的默認窗口框架中的許多功能 - 您還必須爲啓用Aero的Vista/7編寫不同的代碼。

在WPF中使用的各種技術在http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx

在的WinForms您使用相同的基本技術,但我不知道,總結了所有的細節,如上面的鏈接頁面。

相關問題