2013-01-07 58 views
1

我正在使用MFC C++应用程序。我正在研究一个SystemMenu属性设置为FALSE的对话框,因此它无法最大化。我想处理标题栏上的双击消息。我怎样才能做到这一点?获取标题栏双击

编辑:

我希望这一次,这将是明确的每个人。我有一个没有系统菜单(和系统按钮或图标)的对话框。当用户双击该对话框的标题栏时,我希望程序调用功能x();

+0

你试过了什么?你有没有试过[拦截邮件](http://stackoverflow.com/questions/843711/how-do-i-intercept-messages-being-sent-to-a-window)发送到你的应用程序的根窗口? – 2013-01-07 20:07:00

+0

我试图通过Windows消息搜索......我不是那么“老”在VC++ – Victor

+0

不要重复用户已知的快捷键(如标题栏dblclick)另一个功能。这对你来说可能看起来很酷,但它只是让用户糊涂而已。 –

回答

5

从技术上讲,您必须处理WM_NCLBUTTONDBLCLK并检查窗口的标题区域是否出现双击,可能是通过发送WM_NCHITTEST并测试返回值为HTCAPTION

(更新:由于JohnCz理所当然地指出,发送WM_NCHITTEST实际上不是必要的,因为WM_NCLBUTTONDBLCLK已经带有其wParam结果。)

那么你就只需要与SC_MAXIMIZEwParam发送WM_SYSCOMMAND到窗口最大化它。

然而在实践中,它不会,如果你的对话框还没有准备好处理大小的变化,并相应布局其控制实现了。这个功能在我上次查看时并没有出现在MFC的框中。

+0

我diolog没有做出调整大小或最大化 – Victor

+1

@Victor,使一个可调整大小的对话框中看到http://stackoverflow.com/a/5739620/5987 –

+0

感谢。但我让对话不要自己调整大小,这就是我想要的。 :) – Victor

1

我觉得有某种混乱这里:

弗雷德里克·哈米迪

你是正确的,处理WM_NCLBUTTONDBLCLK消息是正确的道路要走,但它是没有必要调用的HitTest,因为WM_NCLBUTTONDBLCLK消息传递WM_NCLBUTTONDBLCLK处理程序中MFC框架转换的命中信息。

维克多,

究竟是什么,你正在试图通过处理WM_NCLBUTTONDBLCLK消息来实现呢?

也许有满足您的要求,一旦你清楚地告诉我们一些其他的方式。 您没有系统菜单的事实不会阻止您的应用接收非客户区域消息。