1. 程式人生 > 其它 >通過HWND獲得CWnd指標/通過CWnd獲取HWND

通過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.