代码之家  ›  专栏  ›  技术社区  ›  Ayrosa

拖动windows标题栏时进行监视

  •  1
  • Ayrosa  · 技术社区  · 14 年前

    从Spy获得的消息摘要:

    WM\ U SYSCOMMAND(SC\ U MOVE)系统命令

    WM\U捕获已更改

    . . .

    WM\ U退出SizeMove

    WM\U SYSCOMMAND(返回)

    我正在试图理解带有(*)的消息。它们对我来说毫无意义,因为:

    2) 如果我在窗口过程中的那些消息(WM\u MOUSEMOVE和WM\u LBUTTONUP)上放一个中断符,我不会在拖动窗口标题栏时截获这些消息!!!

    1 回复  |  直到 14 年前
        1
  •  0
  •   Thomas    14 年前

    1) 鼠标移动和按钮释放不在窗口客户端区域。因此,我应该使用WM\u NCMOUSEMOVE和WM\u nclubuttonup,而不是WM\u MOUSEMOVE和WM\u LBUTTONUP。

    我不确定这个,但我可以猜到:也许系统总是发送 WM_MOUSEMOVE WM_NCMOUSEMOVE 沿途某处(取决于 WM_NCHITTEST

    在拖动操作期间,应用程序无论如何都看不到这些消息(正如您所注意到的),因此没有必要进行转换。

    2) 如果我在窗口过程中的那些消息(WM\u MOUSEMOVE和WM\u LBUTTONUP)上放一个中断符,我不会在拖动窗口标题栏时截获这些消息!!!

    记得吗 朋友是发帖的,不是发过来的。这意味着它们通常会流经您自己的消息循环,并通过 DispatchMessage

    当您开始拖动窗口时,应用程序将进入一个所谓的 消息循环。在拖动完成之前,此循环不会返回,因此在此之前,您自己的消息循环不会运行!这个 WM_ENTERSIZEMOVE WM_EXITSIZEMOVE

    现在,可能是模态循环也向窗口过程发送消息;但是(至少对 如此)它没有。它不应该这样做,因为模态循环本身正在处理这些消息——将它们传递给winproc可能会导致混乱。