我有我自己的自定義彩色標題欄的窗口。我也在這個欄上畫了一個位圖,我想知道當有人用鼠標光標懸停在它上面時。我已經處理了WM_NCMOUSEMOVE
消息,但是這似乎只是通過邊界觸發的,而不是我的標題區域本身。如何在C++ Win32中捕獲鼠標移動過標題欄?
如何檢測,當鼠標懸停在標題欄的某個區域?
這是用Visual C++ 2010
更新:
我已經摸索出了問題的程度。我(特意)沒有在窗口上WS_CAPTION
樣式集,而是我處理WM_NCCALCSIZE
並手動調整非客戶區的大小 - 在這種情況下,移下來了20個像素。這意味着,我「逼」作爲非客戶區的面積沒有得到WM_NCMOUSEMOVE
消息,但它也沒有得到WM_MOUSEMOVE
的消息無論是。一種方法是強制WM_CAPTION
風格,擺脫我的自定義代碼WM_NCCALCSIZE
,但這並不理想。有沒有辦法繞過它?
UPDATE2:
它與WM_NCHITTEST
的消息同樣的問題。除非我有我不想要的WS_CAPTION
樣式集,否則該區域不會觸發這些區域。此外,它不知何故影響客戶區域,因爲它不再獲得WM_LBUTTONDOWN
消息。
你確定你的層次沒有窗口捕獲那些WM_NCMOUSEMOVE消息?你有沒有在窗口上試過Spy ++(從Visual Studio Tools)? – Liviu
是的,我使用我自己的Window Proc來處理窗口的所有消息,除非我在邊界上盤旋,否則它不會得到任何消息。 – Jon49
您應該處理WM_NCHITTEST消息並使其返回HTCAPTION在適當的時候 – manuell