2017-07-06 61 views
0

我們遇到了臨時句柄的問題。從HWnd獲取永久CWnd

當我在這裏讀到:What is the lifetime of a CWnd obtained from CWnd::FromHandle? CWnd::FromHandle()將創建一個臨時句柄。我們的計劃是存儲手柄供以後使用,但這不起作用。

我們也試過CWnd::FromHandlePermanent(),但是這不知何故返回一個空指針。

而且mpWnd->Attach(mhWnd);也引發了訪問衝突異常。

如果可能的話,我們想存儲CWnd而非HWnd,並呼籲FromHandle()每次的CWnd是必需的。 有沒有人知道這個解決方案?

+0

CWnd與句柄不一樣,它只是一個Window對象指針;只要窗口打開,「真正的」句柄就是hWnd –

+0

您已經知道解決方案。你爲什麼不使用它? – IInspectable

回答

0

如果你子類現有的窗口,或創建一個CWnd用的CWnd::Create功能之一,您只能得到一個永久CWnd對象。

你應該在不是使用Attach在這種情況下。 AttachSubclassWindow和內部Create掛鉤使用。如果在沒有子類的情況下使用Attach,則銷燬時不會從窗口圖中刪除該窗口。

因此,當您使用Attach函數出錯時,mpwnd對象無效,或者CWnd對象已被子類化。

另外,爲什麼要存儲一個CWnd指針就沒有意義了我。使用句柄,如果需要,使用FromHandle。子類化窗口的缺點總是:,如果你的程序後來試圖最後對窗口進行子類化,這就失敗了,因爲它已經是子類

另外你的問題不提供信息爲什麼你想這樣做。