首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CWnd获得永久HWnd

从CWnd获得永久HWnd
EN

Stack Overflow用户
提问于 2017-07-06 11:37:48
回答 1查看 2.2K关注 0票数 0

我们遇到了临时手柄的问题。

正如我在这里看到的:What is the lifetime of a CWnd obtained from CWnd::FromHandle? CWnd::FromHandle()将创建一个临时句柄。我们的计划是存储手柄供以后使用,但这行不通。

我们也尝试过CWnd::FromHandlePermanent(),但是这会以某种方式返回一个空指针。

此外,mpWnd->Attach(mhWnd);还抛出了访问冲突异常。

如果可能的话,我们希望存储CWnd而不是HWnd,并在每次需要CWnd时调用FromHandle()。有人知道解决这个问题的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-06 11:49:02

如果您将子类CWnd作为一个现有窗口,或者使用函数之一创建一个CWnd,则只能获得一个永久的CWnd::Create对象。

在这种情况下,您应该而不是使用AttachAttachSubclassWindow和内部Create挂钩使用。如果您使用Attach而没有子类化,则在销毁时将不会从句柄映射中删除该窗口。

因此,如果Attach函数出现错误,则mpwnd对象无效,或者CWnd对象已被子类化。

而且,对于我来说,为什么要存储CWnd指针也是没有意义的。使用句柄,如果需要使用FromHandle。子类窗口的缺点始终是:如果您的程序稍后尝试对窗口进行子类化,这将失败,因为它已经被子类化了。

而且,您的问题没有给出为什么想要这样做的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44947805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档