2013-12-19 142 views
4

我有我自己的自定義彩色標題欄的窗口。我也在這個欄上畫了一個位圖,我想知道當有人用鼠標光標懸停在它上面時。我已經處理了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消息。

+0

你確定你的層次沒有窗口捕獲那些WM_NCMOUSEMOVE消息?你有沒有在窗口上試過Spy ++(從Visual Studio Tools)? – Liviu

+0

是的,我使用我自己的Window Proc來處理窗口的所有消息,除非我在邊界上盤旋,否則它不會得到任何消息。 – Jon49

+8

您應該處理WM_NCHITTEST消息並使其返回HTCAPTION在適當的時候 – manuell

回答

0

我不太肯定的你的意思,但我認爲你的意思是你要檢查標題欄的某個片段被鼠標滑過。如果是這樣,那麼也許嘗試跟蹤窗口的大小和位置,然後檢查相對於窗口位置和大小,是否會將該部分的條橫掃(以像素爲單位)。這是我能想到的唯一方法,它不使用特定於操作系統的功能,我儘量避免使用這些功能。