没有在标题栏上收到WM_NCHitTest

时间:2010-09-02 22:40:50

标签: delphi winapi

我注意到当光标位于标题栏内(而不是边框​​上)时,消息WM_NCHitTest不会发送到表单。

我试图用

拦截它
procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;

procedure WndProc(var Message: TMessage); override;

根据MSDN,我希望能在任何时候收到它,没有盲点。

我是否遗漏了某些内容或这是预期的行为?

我在Windows 7上使用Delphi 2010,Aero on。

3 个答案:

答案 0 :(得分:4)

是的 - 这是预期的。除非您禁用DWM,否则当光标位于标题栏中时,您将不会收到WM_NCHITTEST消息。基本上,当DWM打开时,标题栏“属于”DWM,而不是您的应用程序。

如果您真的需要这些消息,可以禁用DWM - 但请记住,当/如果您这样做,它只是为您的应用程序禁用它。如果你禁用它,它将被禁用整个系统(当然,它会再次重新启用)。

答案 1 :(得分:0)

答案 2 :(得分: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;