【问题标题】:Getting title bar double-clicks获取标题栏双击
【发布时间】:2012-12-21 14:37:11
【问题描述】:

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

编辑:

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

【问题讨论】:

  • 你试过什么?您是否尝试过将intercepting messages 发送到您的应用程序的根窗口?
  • 我尝试搜索 Windows 消息...我在 VC++ 中并不那么“老”
  • 不要将用户已知的快捷方式(如标题栏 dblclick)用于其他功能。你可能觉得这很酷,但它只是在愚弄用户。

标签: c++ visual-c++ mfc message-queue


【解决方案1】:

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

(更新:正如 JohnCz 正确指出的那样,实际上并没有必要发送 WM_NCHITTEST,因为 WM_NCLBUTTONDBLCLK 已经在 wParam 中携带了它的结果。)

那么您只需将WM_SYSCOMMANDSC_MAXIMIZE in wParam 发送到窗口即可最大化它。

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

【讨论】:

  • 我的对话不能被调整大小或最大化
  • 谢谢。但我让对话框不要自己调整大小,这就是我想要的。 :)
  • 顺便说一句。如果您在答案中添加一些代码,那就更好了。无论如何我都会标记它,因为我相信你在这里写的都是真的。
  • @Victor,您说得对,代码示例可以提供更好的答案,但它也可以提出更好的问题 :) 如果您使用对话框类的代码更新您的问题,这将更容易我们帮助您扩展它(并测试结果)。
  • 现在我不在电脑前,但我会尽快为您提供任何您需要的帮助。
【解决方案2】:

我认为这里有些混乱:

弗雷德里克·哈米迪

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

维克多,

您想通过处理 WM_NCLBUTTONDBLCLK 消息来实现什么?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多