通過HWND獲得CWnd指標/通過CWnd獲取HWND
較常用的下面兩個方法:(MFC實現機制是使用對映機制,兩個之間互相MAP)
HWND hWnd = GetSafeHwnd();
CWnd *pWnd = CWnd::FromHandle(hWnd);
下面的轉載地址:http://www.cnblogs.com/mars9/archive/2012/01/20/2327941.html
通過HWND獲得CWnd指標
//獲得當前視窗的控制代碼 HWND hWnd = GetSafeHwnd(); //通過HWND獲得CWnd指標 CWnd *pWnd = CWnd::FromHandle(hWnd); CString strText = _T(""); strText.Format("pWnd = 0x%X\nthis = 0x%X\n", pWnd, this); AfxMessageBox(strText);
1、GetSafeHwnd方法:該函式獲得視窗物件的視窗控制代碼。
Returns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is used with a NULL CWnd pointer。
這個函式用途很廣,很多函式的引數要求是HWND,這時就需要使用GetSafeHwnd函數了。如:
HWND hwnd; CWnd* pWnd; pWnd=((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView(); hwnd=pWnd->GetDlgItem(IDC_EDIT2)->GetSafeHwnd(); ::SetWindowText(hwnd,m_strResult);
其它的一些情況:
AfxWinInit 被WinMain呼叫的一個函式,用做MFC GUI程式初始化的一部份
AfxBeginThread 開始一個新的執行執行緒
AfxEndThread 結束一箇舊的執行執行緒
AfxMessageBox 類似Windows API 函式MessageBox
AfxGetApp 取得application object(CWinApp衍生物件)的指標
AfxGetMainWnd 取得程式主視窗的指標
AfxGetInstance 取得程式的instance handle
AfxRegisterClass 以自定的WNDCLASS 註冊視窗類別
2、FromHandle方法:FromHandle(HANDLE h) 先查詢由使用者定義的核心物件物件的封裝類, 如果找到直接返回,沒有找到構造一個臨時物件返回.
Life is like a box of chocolate, you never know what you are going to get.