我们遇到了临时手柄的问题。
正如我在这里看到的:What is the lifetime of a CWnd obtained from CWnd::FromHandle? CWnd::FromHandle()将创建一个临时句柄。我们的计划是存储手柄供以后使用,但这行不通。
我们也尝试过CWnd::FromHandlePermanent(),但是这会以某种方式返回一个空指针。
此外,mpWnd->Attach(mhWnd);还抛出了访问冲突异常。
如果可能的话,我们希望存储CWnd而不是HWnd,并在每次需要CWnd时调用FromHandle()。有人知道解决这个问题的办法吗?
发布于 2017-07-06 11:49:02
如果您将子类CWnd作为一个现有窗口,或者使用函数之一创建一个CWnd,则只能获得一个永久的CWnd::Create对象。
在这种情况下,您应该而不是使用Attach。Attach由SubclassWindow和内部Create挂钩使用。如果您使用Attach而没有子类化,则在销毁时将不会从句柄映射中删除该窗口。
因此,如果Attach函数出现错误,则mpwnd对象无效,或者CWnd对象已被子类化。
而且,对于我来说,为什么要存储CWnd指针也是没有意义的。使用句柄,如果需要使用FromHandle。子类窗口的缺点始终是:如果您的程序稍后尝试对窗口进行子类化,这将失败,因为它已经被子类化了。
而且,您的问题没有给出为什么想要这样做的信息。
https://stackoverflow.com/questions/44947805
复制相似问题