【问题标题】:Not receiving WM_NCHitTest on title bar在标题栏上没有收到 WM_NCHitTest
【发布时间】:2010-09-02 22:40:50
【问题描述】:

我注意到当光标在标题栏内(不在边框上)时,消息 WM_NCHitTest 没有发送到表单。

我尝试使用任一方法拦截它

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

procedure WndProc(var Message: TMessage); override;

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

我是否遗漏了什么或者这是预期的行为?

我在 Windows 7 上使用 Delphi 2010,并开启 Aero。

【问题讨论】:

  • 是的,应该可以。发布真实的复制代码。

标签: delphi winapi


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    【解决方案3】:

    您始终可以使用 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多