【问题标题】:What's the Window Message that the parent window receive when a new WindowControl is opened from it?从父窗口打开新的 WindowControl 时,父窗口收到的窗口消息是什么?
【发布时间】:2014-07-24 14:26:43
【问题描述】:

例如,当用户单击一个按钮并打开一个新表单时,父窗口接收到的消息是什么,以检测从中打开了一个新窗口?

我看到父窗口收到类似 WM_PAINT 的消息。但每次必须在屏幕上绘制控件时都会出现此消息。

有一个独特的消息,父母可以从中识别一个新打开的窗口?如果不是,我该怎么办?

谢谢。

【问题讨论】:

  • 没有这样的消息。让您的按钮单击处理程序在打开表单时向父级发送一条私人消息。
  • 我无法控制处理按钮的应用程序。

标签: windows winapi


【解决方案1】:

WM_PARENTNOTIFY 消息 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632638(v=vs.85).aspx)

使用 WM_CREATE (0x0001) - LOWORD(wParam)。

编辑:

就像其他人在 cmets 中所说,WM_PARENTNOTIFY 不起作用。

我发现的另一种方法是在我的 MainWindow 开始执行后对所有 WINDOW 类进行超类化。这样,Windows 操作系统将在控件初始化之前调用我自己的 WndProc,然后我可以获得将要创建的窗口的 WM_NCREATE 和 WM_CREATE 消息。

谢谢你们。

【讨论】:

  • 这只是Windows 8/Server 2012及以上,据MSDN
  • 奇怪...我正在使用 Win 7 并且正在发生!
  • 不要相信 MSDN 文档报告的操作系统版本号。随着对旧版本的支持被放弃,它们会随着时间的推移而出现偏差。 WM_PARENTNOTIFYWM_EX_NOPARENTNOTIFY 自 Windows 95 和 NT 3.1 以来就已经存在。请参阅this documentation中的“支持的操作系统版本”评论
  • 一般来说,这不适用于对话框上的子窗口。来自文档:“所有子窗口,除了那些具有WS_EX_NOPARENTNOTIFY 扩展窗口样式的子窗口,都会将此消息发送到它们的父窗口。默认情况下,对话框中的子窗口具有WS_EX_NOPARENTNOTIFY 样式".
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
相关资源
最近更新 更多