我们遇到了临时句柄的问题。
我在这里读到:What is the lifetime of a CWnd obtained from CWnd::FromHandle?
CWnd::FromHandle()
将创建一个临时句柄。我们的计划是存放手柄供以后使用,但这不起作用。
我们也试过CWnd::FromHandlePermanent()
,但这会以某种方式返回一个空指针。
并且mpWnd->Attach(mhWnd);
也引发了访问冲突异常。
如果可能,我们希望存储CWnd
而不是HWnd
,并在每次需要FromHandle()
时致电CWnd
。
有人知道这方面的解决方案吗?
答案 0 :(得分:0)
如果继承现有窗口,或者使用其中一个CWnd
函数创建CWnd
,则只能获得永久CWnd::Create
个对象。
在这种情况下,你应该不使用Attach
。 Attach
由SubclassWindow
和内部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()
);
。子类化窗口的缺点总是:如果你的程序稍后尝试子类化窗口,那么最终会失败,因为它已经是子类。
此外,您的问题并未提供您想要执行此操作的信息为什么。