代码之家  ›  专栏  ›  技术社区  ›  Mike Caron

如何在最大化窗口上处理拖动事件

  •  1
  • Mike Caron  · 技术社区  · 15 年前

    我有一个在Win7中运行的MFC应用程序,没有标题栏(即,我的标题栏是自制的,带有用于恢复、最大化和关闭的自定义按钮)。在Win7中,当用户将窗口拖到屏幕顶部时,它响应Win7API生成的最大化事件。但是,一旦它最大化了,我就无法捕获当用户将窗口拖离顶部时发生的恢复事件。

    我在双击时处理恢复,在单击恢复按钮时处理恢复,但无法检测到拖动。

    我可以想象它看起来类似于:

    if (message == WM_WINDOWPOSCHANGING)
    {
        // DETECT RESTORE MSG HERE.
    }
    

    但这似乎无法理解。就好像我在某个地方禁用了在窗口最大化时移动它。

    有没有一种方法可以阻止wm_调整大小?如何处理拖动事件以启用自动调整大小?

    2 回复  |  直到 9 年前
        1
  •  1
  •   Ruddy    15 年前

    你试过处理 WM_NCHITTEST 当鼠标悬停在自定义标题栏上时,是否返回消息htcaption(标题栏),从而允许在不进行任何进一步自定义的情况下进行正常的Windows处理?

        2
  •  0
  •   Mike Caron    15 年前

    我发现,由于应用程序没有标题栏,Win7无法处理窗口拖动,因此根本不发送wm_SysCommand。换句话说,应用程序阻塞了标题栏拖动,因为 要拖动的标题栏。

    解决方案在一定程度上是检测到我们的模拟标题栏上的拖动。之后,只能恢复窗口的大小,而不能恢复到原来的位置。位置需要对光标是动态的,就像Win7那样。思想,人们?