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

时间:2010-01-21 22:44:27

标签: winapi visual-c++ windows-7

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

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

我认为它看起来类似于:

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

但这似乎没有抓住它。就好像某个地方,当它被最大化时,我已禁用移动窗口。

是否有办法阻止WM_RESIZE?如何处理拖动事件以启用自动调整大小?

2 个答案:

答案 0 :(得分:1)

当鼠标悬停在自定义标题栏上时,您是否尝试过处理返回HTCAPTION(标题栏)的WM_NCHITTEST消息,从而允许正常的窗口处理而无需进一步自定义?

答案 1 :(得分:0)

我发现由于应用程序没有标题栏,因此win7不处理窗口拖动,因此根本不发送WM_SYSCOMMAND。换句话说,应用程序阻止了Titlebar拖动,因为有 no 标题栏要拖动。

解决方案部分是为了检测我们模拟标题栏上的拖动。之后,窗口必须仅在SIZE中恢复,而不是在适当的位置。该位置需要对光标是动态的,就像Win7一样。想法,人们?