簡單的問題。如何更改關閉圖標,最小化和最大化按鈕。我可以在Winforms和WPF中執行此操作嗎?更改窗口圖標的最小化,關閉並最大化
回答
這些圖標,標題和窗口邊框都是在處理WM_NCPAINT消息時繪製的。所以,你接管繪圖的方式是處理這個消息。
但是,您無權訪問關於圖標的狀態信息(即您應該在中按下哪個按鈕,因爲用戶當前正在點擊該按鈕而按下了狀態)。你甚至不知道鼠標處理代碼認爲這些圖標在哪裏。
所以接管非客戶端的油漆,你還需要接管非客戶端鼠標操作,整個問題只是雪球,直到你寫的代碼行數十萬,您的窗口仍然不當用戶試圖拖動它時表現得非常正確等等。
而且這是在託管代碼(C#/ .Net)中的非託管代碼中,這更加困難,因爲您還必須執行interop才能獲得某些API你需要使用。
所以答案是:是可能的,但它在WinForms和WPF中比在C++中困難得多,而那些嘗試過它的現在都是光頭。
如果你想控制這些按鈕的外觀,你必須創建自己的。這是使用Windows功能編寫Windows應用程序的一個值(它們具有標準的外觀和感覺)。
真正的答案是你不應該這樣做。用戶期望所有應用程序都能正常工作並且看起來相同讓他們試圖弄清楚你使用的新圖標是否意味着最小化可能會使他們不高興。
是的,你必須創建自己的窗口風格。例如,參考FluidKit,GlassWindows。
在wpf中,您可以爲您的窗口設置WindowStyle="None"
,然後使用最小化,最大化和關閉按鈕爲其設置自定義標題欄。我早些時候做過這個。你需要做一些事件處理,以執行最小化,最大化,關閉,拖動等。
這樣做並不困難,但它是很多工作 - 你必須基本上替換窗框並自己處理所有事情是必須重寫的默認窗口框架中的許多功能 - 您還必須爲啓用Aero的Vista/7編寫不同的代碼。
在WPF中使用的各種技術在http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx
在的WinForms您使用相同的基本技術,但我不知道,總結了所有的細節,如上面的鏈接頁面。
- 1. 如何檢索窗口最小化,最大化和關閉按鈕的大小?
- 2. 隱藏最大化/最小化和關閉按鈕的Matlab圖形窗口
- 3. 窗口最小化和最大化
- 4. 禁用窗口最大化/最小化
- 5. 隱藏最小化,最大化,關閉窗口中的按鈕並顯示圖標
- 6. c#最大化,最小化和關閉窗體上的按鈕
- 7. 窗體在關閉,最小化或最大化時掛起
- 8. 獲取最大化最小化窗口的窗口位置
- 9. 如何調整,最小化,最大化或關閉MVVM WPF中的窗口?
- 10. 如何渲染窗口關閉/最大化/最小化wpf中的按鈕?
- 11. 彈出窗口最大化和關閉,調整大小選項
- 12. SetWindowsHookEx並單擊窗體凍結時的最小化/最大化/關閉按鈕
- 13. 如何在最小化窗口後最大化窗口
- 14. CSS最小化窗口更改外觀
- 15. 窗口最大化最大化
- 16. 如何更改窗口的大小或最小化?
- 17. 當窗口最大化時獲得非最大化的窗口位置/大小
- 18. 獲取默認的Windows系統圖標的最小化,最大化和關閉
- 19. Win7標題欄頂部的黑色圖層(最小化/最大化/關閉)
- 20. Gtkmm - 更改窗口的最小大小
- 21. 我如何刪除最大化,最小化和關閉圖標在MDI Menustrip
- 22. WPF:自定義窗口,標準最小/最大/關閉按鈕
- 23. 如何使用Nimbus Laf更改內部框架的「最小化,最大化和關閉」圖標?
- 24. 的Windows 10關閉,最小化和最大化按鍵
- 25. 頂部菜單(關閉,最小化,最大化)的Java
- 26. WPF窗口沒有最小化/最大化
- 27. 從另一個線程最大化/最小化窗口
- 28. 如何使用Addon SDK跟蹤窗口最小化/最大化?
- 29. 如何檢測JFrame窗口最小化和最大化事件?
- 30. 使用Javascript最大化/最小化檢測瀏覽器窗口
對,微軟和Adobe只能這樣做。 – 2009-12-29 20:20:06
我只是好奇... – 2009-12-29 20:26:53