从CWnd :: FromHandle获得的CWnd的生命周期是多少?

rem*_*mio 12 winapi mfc hwnd cwnd

根据msdn,当我用CWnd :: FromHandle获得CWnd*时,

指针可能是临时的,不应存储以供以后使用.

"后期使用"的含义对我来说并不清楚.它只是当前方法的范围吗?据我所知,Win32中没有GC!

Phi*_*ney 15

MFC维护许多句柄映射,从HWND到CWnd,HDC到CDC等,它们存储在线程状态中.每个句柄映射都包含一个永久映射和临时映射 - 当您调用CWnd :: Create或CDC :: Attach等方法时会添加永久条目,而当您在没有方法的句柄上调用FromHandle时会创建临时条目永久进入.

在空闲处理期间(在CWinApp :: OnIdle中)清除临时条目,因此只能在处理当前消息时安全地使用它们.一旦返回到消息循环,或进入另一个模态循环(例如通过调用DoModal),它们就可能被删除.

  • 是的,没关系,HWND将在窗口的生命周期内有效. (2认同)