2010-09-02 63 views
1

我注意到,當光標位於標題欄(不在邊框)內時,WM_NCHitTest消息不會發送到窗體。在標題欄上未收到WM_NCHitTest

我試圖使用攔截,要麼

procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; 

procedure WndProc(var Message: TMessage); override; 

根據MSDN我期待收到它的任何一點,沒有盲點。

我錯過了什麼,或者這是預期的行爲?

我在使用Aero的Windows 7上使用Delphi 2010。

+0

是的,這應該是工作。發佈真正的repro代碼。 – 2010-09-02 22:54:11

回答

4

是的 - 這是預期的。除非您禁用DWM,否則當光標位於標題欄時,您將不會收到WM_NCHITTEST消息。基本上,DWM打開時,標題欄「屬於」DWM,而不是您的應用程序。

如果您確實需要這些消息,則可以禁用DWM - 但請記住,當/如果您這樣做時,它不會而不是只是爲您的應用程序禁用它。如果您禁用了它,則整個系統都會禁用它(直到它再次重新啓用時)。

0

您可以隨時使用WM_NCMOUSEMOVE消息,並測試其HitTest屬性:

procedure WMNCMouseMove(var Message: TWMNCMouseMove); message WM_NCMOUSEMOVE; 

[。 ..]

procedure TForm11.WMNCMouseMove(var Message: TWMNCMouseMove); 
begin 
    with Message do 
    if HitTest = HTCAPTION then 
     Caption := Format('%d:%d',[XCursor,YCursor]); 
end;