Не получаю WM_NCHitTest в строке заголовка - PullRequest
1 голос
/ 03 сентября 2010

Я заметил, что сообщение WM_NCHitTest не отправляется в форму, когда курсор находится внутри строки заголовка (не на границе).

Я пытался перехватить его, используя

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

или

procedure WndProc(var Message: TMessage); override;

Согласно MSDN, я ожидал получить его за любую точку, без слепых зон.

Я что-то упустил или это намеченное поведение?

Я использую Delphi 2010 в Windows 7 с включенным Aero.

Ответы [ 3 ]

4 голосов
/ 03 сентября 2010

Да - это ожидаемо. Если вы не отключите DWM, вы не получите сообщений WM_NCHITTEST, когда курсор находится в строке заголовка. По сути, когда DWM включен, строка заголовка «принадлежит» DWM, а не вашему приложению.

Если вам действительно нужны эти сообщения, вы можете отключить DWM - но имейте в виду, что когда / если вы делаете это, он не просто отключает его для вашего приложения. Если вы отключите его, он будет отключен для всей системы (конечно, до повторного включения).

0 голосов
/ 07 сентября 2010

Вы всегда можете использовать сообщение 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;
0 голосов
/ 05 сентября 2010

Возможно, вы прослушали альтернативное сообщение ... см. http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/9a8a63c8-79b5-43a8-82eb-f659be947add

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...