2011-05-23 56 views
1

我想讓自己成爲一個GUI庫使用純WinAPI。但是我發現處理窗口消息確實令人沮喪。令人沮喪的處理窗口消息(WM_XX)

例如,我可以看到,當我將鼠標移到我的窗口上時,WM_NCHITTEST將在WM_MOUSEMOVE之前發送給我。 但是,如果我按下左按鈕,左右移動,然後釋放左按鈕。之後我只收到WM_MOUSEMOVE。可能是因爲我在接收WM_LBUTTONDOWN和釋放捕獲(HWND)時調用SetFocus(HWND),SetCapture(HWND),當接收WM_LBUTTONUP時,這些不同的行爲對我來說看起來像是一團霧。我不知道是否有任何文檔/文章解釋這些窗口消息的細節。至少,告訴我我應該注意什麼。 (查爾斯的「Programming Windows」對我來說不起作用,因爲它只介紹了這些消息的基礎,但並不告訴我像我提到WM_NCHITTEST/WM_MOUSEMOVE的陷阱)

+0

對不起,出錯了。我忘記調用ReleaseCapture()。不知道如何解決這個問題。 – MorrisLiang 2011-05-23 09:13:56

回答

2

通過說SetCapture(HWND)您要求系統重定​​向所有鼠標消息到您的窗口,直到您致電ReleaseCapture(HWND)。當通過某個窗口捕獲鼠標輸入(所有消息重定向到那裏)時,不需要發送WM_NCHITTEST

如果需要,您可以自己將WM_NCHITTEST發送到鼠標下的窗口。