What is the lifetime of a CWnd obtained from CWnd::FromHandle?(从 CWnd::FromHandle 获得的 CWnd 的生命周期是多少?)
问题描述
根据 msdn,当我使用 CWnd::FromHandle 获取 CWnd*,
According to msdn, when I get a CWnd* with CWnd::FromHandle,
指针可能是临时的,不应存储以供以后使用.
The pointer may be temporary and should not be stored for later use.
我不清楚以后使用"是什么意思.它只是当前方法的范围吗?据我所知,Win32是没有GC的!
What is meant by "later use" is not clear to me. Is it only the scope of the current method? As far as I know, there is no GC in Win32!
推荐答案
MFC 维护了许多句柄映射,从 HWND 到 CWnd,从 HDC 到 CDC 等,这些句柄映射存储在线程状态中.每个句柄映射都包含一个永久映射和临时映射 - 当您调用 CWnd::Create 或 CDC::Attach 等方法时会添加永久条目,而在没有永久条目.
MFC maintains a number of handle maps, from HWND to CWnd, HDC to CDC etc, which are stored in the thread state. Each handle map contains a permanent map and temporary map - permanent entries are added when you call a method such as CWnd::Create or CDC::Attach, while temporary entries are created when you call FromHandle on a handle that doesn't have a permanent entry.
在空闲处理期间(在 CWinApp::OnIdle 中)清除临时条目,因此它们只能在处理当前消息时安全地使用.一旦您返回消息循环,或进入另一个模式循环(例如通过调用 DoModal),它们可能会被删除.
Temporary entries are cleaned up during idle processing (in CWinApp::OnIdle), so they can only safely be used while processing the current message. As soon as you return to the message loop, or enter another modal loop (e.g. by calling DoModal) then they may be deleted.
这篇关于从 CWnd::FromHandle 获得的 CWnd 的生命周期是多少?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:从 CWnd::FromHandle 获得的 CWnd 的生命周期是多少?
基础教程推荐
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 为什么语句不能出现在命名空间范围内? 2021-01-01