打開wincore.cpp文件(d:\ program files \ Microsoft visual studio . net 2003 \ vc7 \ atl MFC \ src \ MFC)。看312行,功能如下:
CWnd * PASCAL CWnd::from handle(HWND HWND)
{
CHandleMap * pMap = afx mapwnd(TRUE);//如果不存在,則創建映射
斷言(pMap!= NULL);
CWnd * pWnd =(CWnd *)pMap-& gt;from handle(hWnd);
# IFN def _ AFX _ NO _ OCC _支持
pWnd-& gt;AttachControlSite(pMap);
#endif
ASSERT(pWnd = = NULL | | pWnd-& gt;m _ hWnd = = hWnd);
返回pWnd
}
斷言被斷言(pWnd = = NULL | | pWnd-& gt;m _ hWnd = = hWnd);也就是說,讀取句柄映射表有兩種可能性:
1您傳入的窗口句柄為空,即窗口對象已生成,但窗口不是用Create創建的。
2.窗口所在的線程不是當前線程,所以讀取映射窗口的指針或者使用FromHandle將指針映射到臨時窗口都不可避免的會出錯。窗口都是線程相關的。
如果不正確地單擊菜單命令,則菜單命令執行的代碼可能包含FromHandle語句。看,壹定是它。
200分。還不明白就問我。壹定要給我。