我正在开发一个 MFC C++ 应用程序。我正在处理一个SystemMenu
属性设置为的对话框FALSE
,因此它无法最大化。我想处理标题栏上的双击消息。我怎样才能做到这一点?
编辑:
我希望这一次大家都清楚。我有一个没有系统菜单(和系统按钮或图标)的对话框。当用户双击该对话框的标题栏时,我希望程序调用 function x();
。
我正在开发一个 MFC C++ 应用程序。我正在处理一个SystemMenu
属性设置为的对话框FALSE
,因此它无法最大化。我想处理标题栏上的双击消息。我怎样才能做到这一点?
编辑:
我希望这一次大家都清楚。我有一个没有系统菜单(和系统按钮或图标)的对话框。当用户双击该对话框的标题栏时,我希望程序调用 function x();
。
从技术上讲,您必须处理WM_NCLBUTTONDBLCLK并检查双击是否发生在窗口的标题区域,可能通过发送WM_NCHITTEST并测试返回值是否为HTCAPTION
.
(更新:正如 JohnCz 正确指出的那样,发送WM_NCHITTEST
实际上并不是必需的,因为WM_NCLBUTTONDBLCLK
它的结果已经包含在wParam
.)
然后你只需要发送WM_SYSCOMMAND到窗口来最大化它SC_MAXIMIZE
。wParam
然而,在实践中,如果您的对话框还没有准备好处理大小更改并相应地布局其控件,那么它不会取得太大的成就。上次我检查时,这个功能在 MFC 中没有开箱即用。
我认为这里存在某种混乱:
弗雷德里克·哈米迪
你是对的,处理 WM_NCLBUTTONDBLCLK 消息是正确的方法,但是没有必要调用 HitTest,因为 WM_NCLBUTTONDBLCLK 消息传递了 MFC 框架在 WM_NCLBUTTONDBLCLK 处理程序中转换的命中信息。
胜利者,
通过处理 WM_NCLBUTTONDBLCLK 消息,您究竟想达到什么目的?
一旦您向我们说明清楚,也许还有其他方法可以满足您的要求。您没有系统菜单这一事实不会阻止您的应用程序接收非客户区消息。