1

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

编辑:

我希望这一次大家都清楚。我有一个没有系统菜单(和系统按钮或图标)的对话框。当用户双击该对话框的标题栏时,我希望程序调用 function x();

4

2 回答 2

5

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

(更新:正如 JohnCz 正确指出的那样,发送WM_NCHITTEST实际上并不是必需的,因为WM_NCLBUTTONDBLCLK它的结果已经包含在wParam.)

然后你只需要发送WM_SYSCOMMAND到窗口来最大化它SC_MAXIMIZEwParam

然而,在实践中,如果您的对话框还没有准备好处理大小更改并相应地布局其控件,那么它不会取得太大的成就。上次我检查时,这个功能在 MFC 中没有开箱即用。

于 2013-01-07T20:17:52.447 回答
1

我认为这里存在某种混乱:

弗雷德里克·哈米迪

你是对的,处理 WM_NCLBUTTONDBLCLK 消息是正确的方法,但是没有必要调用 HitTest,因为 WM_NCLBUTTONDBLCLK 消息传递了 MFC 框架在 WM_NCLBUTTONDBLCLK 处理程序中转换的命中信息。

胜利者,

通过处理 WM_NCLBUTTONDBLCLK 消息,您究竟想达到什么目的?

一旦您向我们说明清楚,也许还有其他方法可以满足您的要求。您没有系统菜单这一事实不会阻止您的应用程序接收非客户区消息。

于 2013-01-08T23:29:32.740 回答