獲取對話方塊控制代碼
阿新 • • 發佈:2018-12-21
簡介:
獲取主對話方塊和子對話方塊的控制代碼,子對話方塊通過FindWindow。我之所以會用這個函式,其實我是有這個需求,那就是我需要在一個對話方塊的通過AfxBeginThread建立的執行緒中呼叫另一個對話方塊函式。廢話少數,如下:
1.主對話方塊
在其它對話方塊或者執行緒呼叫時,目前有以下幾種常用的方法
1)通過獲取對話方塊的指標方式
CTcpAsynSDlg *pMainDlg = (CTcpAsynSDlg*)AfxGetApp()->GetMainWnd();
pMainDlg->m_hWnd; //就是指向主對話方塊的控制代碼。
2)呼叫GetParent()
CWnd* pWnd=this->GetParent();
pWnd->m_hWnd;可以獲得父視窗控制代碼。
3)呼叫AfxGetMainWnd()
AfxGetMainWnd()-> m_hWnd;
AfxGetMainWnd(); 返回的是m_pMainWnd
2.子對話方塊
1)使用FindWindow()
CLogReadDlg* g_pLogReadDlgWnd;
HWND hWnd = ::FindWindow(NULL,"日誌"); //HWND hWnd = ::FindWindow("#32770","日誌"); g_pLogReadDlgWnd = (CLogReadDlg*)FromHandle(hWnd);
順便通過FromHandle還可以獲得對話方塊指標。
2)詳解
MSDN:
HWND FindWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName );
很多人誤以為第一個引數是類名之類的,其實是錯誤的,不要被變數名迷惑。
通過VC工具Spy++,如圖可以看到使用方法。所有的對話方塊視窗類名都是#32770。
所以也可以呼叫HWND hWnd = ::FindWindow("#32770","日誌");
但是這種不直觀,最簡單的方法是HWND hWnd = ::FindWindow(NULL,"日誌");第二個引數就是你的視窗名,簡單的理解就是對話方塊的標題。