- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我把winapi CreateWindowEx打包成一个简单的类。由于每个窗口共享相同的 wndProc(hwnd,msg,wparam,lparam),我将 CreateWindowEx 创建的每个窗口放入一个映射中以分发 msg,如下所示:
wndProc(hwnd, msg, wparam, lparam){
if(map[hwnd]!=nil){
switch(msg){
map[hwnd].wndProc(...)
}
}
}
每次销毁窗口或其父窗口时,将其从 map 中删除:
case WM_DESTROY: delete(map, hwnd)
但是按钮之类的东西不会收到 WM_DESTROY。我在 WM_NOTIFY 和 WM_COMMAND 中打印了所有消息,但我注意到了。
那么我怎样才能在正确的时间从 map 上删除那些子窗口呢?或者在不创建 hwnd 映射的情况下分发消息的方法?
最佳答案
他们肯定确实明白了这个信息。但是它们的窗口过程在 Windows 内部,而不是在您的程序内部。所以你永远看不到它。您可以在 MSDN documentation 中阅读的内容,请注意 WM_DESTROY 没有得到任何特殊处理。也不会生成您的父窗口可以看到的通知。
当您看到父窗口被销毁时自动删除所有子窗口,subclassing controls是 C++ 类库包装器的一个非常标准的要求。顺便说一句,最好不要自己发明,这已经做过很多次了。
关于windows - 子窗口没有收到 WM_DESTROY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044113/
下面是我的消息过滤器: bool MyFilter::PreFilterMessage(Message %m){ switch(m.Msg){ case WM_CLOSE: c
我把winapi CreateWindowEx打包成一个简单的类。由于每个窗口共享相同的 wndProc(hwnd,msg,wparam,lparam),我将 CreateWindowEx 创建的每个
本文对WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数的功能及区别做出了分析比对,有助于读者更好的对消息投递函数加以理解。详情如下: 1、WM_CLOSE、WM_DEST
对于子窗口,父窗口首先接收WM_DESTROY,然后是子窗口。对于自有 window ,情况恰恰相反。拥有的窗口首先接收WM_DESTROY,然后是所有者。如果我想修改一些会影响子窗口的内容,我可以在
我有一个用于 Windows Mobile 5 的 WTL 8.0 SDI 应用程序。在下面这个人为设计的示例中,我创建了一个 View ,销毁它,然后重新创建它。但是,当它重新创建时,WM_INIT
为了将 WNDPROC 用作对象方法,我采用了您在那里找到的典型解决方案,但看起来 WM_DESTROY 消息并未发送到对象窗口自身的WNDPROC,关闭窗口后程序不退出。 我的窗口类如下所示(删除了
下面的程序创建一个带有公共(public)控件工具提示的窗口,该工具提示对该窗口进行了子类化。当我收到 WM_DESTROY 时,我本能地决定销毁工具提示,因为 WM_DESTROY comes be
我正在尝试使用 Win32 API 创建一个非常基本的窗口,我已经很久没有这样做了。 我认为我的消息循环没问题,但是当我关闭打开的窗口时,应用程序仍在运行。看起来消息循环永远不会收到 WM_QUIT
我将这段代码用于主循环(我的函数): while (running) { if(is_close) { Log().push_log("close", "mes
在详细说明 another question 的答案时(我自己),我想到了使用 MessageBox 来报告对话框结果的想法。它是一个使用 DialogBox() 函数创建的 WinAPI 模式对话框
在 Windows 中处理窗口生命周期的默认方式是监听 WM_CLOSE 消息,然后决定是否关闭窗口,然后可选地处理 WM_DESTROY 消息(用于清理等)。 是否存在 WM_DESTROY 可以在
我想知道 Windows 程序中的 WM_QUIT、WM_CLOSE 和 WM_DESTROY 消息之间有什么区别,本质上是:它们是什么时候发送的,除了程序定义的之外,它们是否有任何自动效果? 最佳答
我正在使用 win32 API 在 Windows 7 64 位操作系统上进行试验。当我在 Debug模式下运行我的程序时,我的窗口出现了,但我有 2 个错误。首先是我从 Charles Petzol
我是一名优秀的程序员,十分优秀!