2010-01-21 102 views
1

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

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

我会想象它看起来类似于:

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

但是,这似乎并没有抓住它。就好像某个地方我已经禁止在窗户最大化时移动窗户。

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

回答

0

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

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

1

当鼠标位于自定义标题栏上时,您是否尝试过处理返回HTCAPTION(titlebar)的WM_NCHITTEST消息,从而允许在没有任何进一步定制的情况下进行正常的窗口处理?

+0

我会试试!谢谢! – 2010-01-22 15:00:34

+0

这不起作用,因为我们的虚假标题栏实际上是一个功能区(来自CWnd)。当我捕获命中测试并返回它是一个HTCaption时,然后将功能区拖到主框架周围并剪切到窗口边缘。 :( – 2010-01-22 20:16:06

+0

那么这是不幸的,我唯一的想法是改变用户界面以允许从主窗口显示“拖拽区域” - 然后WM_NCHITTEST就可以工作 - 类似于Chrome的工作方式 – Ruddy 2010-01-22 20:39:25