2010-07-14 63 views
3

我想弄清楚如何在Vista或Win7中使用Aero主題時在窗口的標題欄上繪製自定義按鈕。我需要將它應用於許多不同的應用程序而無需更改原始代碼,因此這將在鉤子程序中進行。由於我無法更改原始代碼,因此我無法使用DwmExtendFrameIntoClientArea。如何在Aero主題標題欄上繪製自定義按鈕而不擴展非客戶區域?

我很確定這可以完成,或者至少是假的,因爲我見過一個可以做到這一點的應用程序。當這個其他應用程序正在運行時,我已經仔細查看了各種窗口,並且我不相信他們正在改變窗口樣式或將框架延伸到客戶區域。

作爲測試,我嘗試使用WM_NCPAINT消息在標題欄上繪製某些東西。當Aero主題處於活動狀態時,我的任何內容都不會出現。如果我爲整個屏幕而不是僅僅是窗口獲得DC,那麼我可以「畫」到標題欄上,但是當然,它正在被繪製到屏幕上。這種方法存在各種各樣的問題,所以這是行不通的。如果任何人有什麼好的想法,或者甚至是很好的提示,我會非常感謝幫助!

回答

0

由於您無法擴展客戶區,因此一種技術是創建一個浮動子窗口,其所有者設置爲頂層窗口,以便它保持在該窗口之上。

您可以將目標窗口的WndProc掛鉤爲WM_MOVEWM_SIZE消息。