从HWnd获取永久CWnd

时间:2017-07-06 11:37:49

标签: c++ mfc

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

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

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

并且mpWnd->Attach(mhWnd);也引发了访问冲突异常。

如果可能,我们希望存储CWnd而不是HWnd,并在每次需要FromHandle()时致电CWnd。 有人知道这方面的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果继承现有窗口,或者使用其中一个CWnd函数创建CWnd,则只能获得永久CWnd::Create个对象。

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

因此,当您使用CWnd函数出错时,mpwnd对象无效,或者CWnd对象已经是子类。

此外,对我来说,为什么要存储FromHandle指针也没有意义。使用句柄,如果需要,请使用CREATE EXTENSION "uuid-ossp"; CREATE TABLE user ( id serial PRIMARY KEY not null, user_id varchar(255) not null default uuid_generate_v4() ); 。子类化窗口的缺点总是:如果你的程序稍后尝试子类化窗口,那么最终会失败,因为它已经是子类

此外,您的问题并未提供您想要执行此操作的信息为什么