代碼:查找子窗口

1.一個窗口的標題就是主窗口顯示時左上角的窗口名,用GetWindowText獲取;一個窗口的類名是註冊這個窗口時的窗口類名,用GetClassName獲取。

2.MFC在preCreateWindow中註冊窗口類,根據窗口類型不同註冊6個窗口類中的一個,每個窗口類名固定,如:

    CWnd註冊一個名爲_AfxWnd的類,CFrameWnd註冊一個_afxWndFrameOrView,CMDIFrameWnd註冊一個_afxWndMDIFrame.

    上面的_AfxWnd,_afxWndFrameOrView,_afxWndMDIFrame都是宏,代表標識窗口類的字符串,共有5個窗口類名: _afxWnd         _afxWndControlBar    afxWndMDIFrame    _afxWndFrameOrView   _afxWndOleControl,每個宏代表一個串。但是MFC框架會自動對類名進行一個轉換,轉成Afx:x:y:z:w的形式,成爲獨一無二的窗口類名稱。(用spy++可以看到窗口類名都是這種形式)

3.可以自己給窗口類名起一個名字,方法如下:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

         if( !CFrameWnd::PreCreateWindow(cs) )

                  return FALSE;

         

 

         return TRUE;

}

   

4.默認情況下,每建立一個子窗口,主窗口標題會加上一個“ - 子窗口標題”,在 PreCreateWindow把cs的風格設置成WS_OVERLAPPEDWINDOW就不會加了。

5.一個MDI主窗口有一個子窗口"MDIClient"(子窗口類名),它纔是所有MDI子窗口的父窗口。MDI主窗口的子窗口包括狀態欄,工具欄,菜單欄和MDIClient窗口,MDIClient窗口的子窗口才是MDI子窗口,所有以下程序只能查找到狀態欄,工具欄等MDI主窗口的子窗口

         HWND hWnd = ::FindWindow(NULL,_T("Hello"));

	HWND hPreWnd = ::FindWindowEx(hWnd,NULL,NULL,NULL);

	TCHAR lpTemp[30] = ""; 

	TCHAR lpTemp2[30]= "";

	while(::IsWindow(hPreWnd))

	{		

		::GetWindowText(hPreWnd,lpTemp,30);		

		::GetClassName(hPreWnd,lpTemp2,30);

		hPreWnd = ::FindWindowEx(hWnd,hPreWnd,NULL,NULL);

	}
以下代碼用於查找MDI子窗口:
       
         HWND hWnd = ::FindWindow(NULL,_T("Hello"));

	HWND hFirstWnd = ::FindWindowEx(hWnd,NULL,NULL,NULL);

	HWND hMdiChildWnd = ::FindWindowEx(hFirstWnd,NULL,NULL,NULL);

	TCHAR lpTemp[30] = ""; 

	TCHAR lpTemp2[30]= "";

	while(::IsWindow(hMdiChildWnd))

	{		

		::GetWindowText(hMdiChildWnd,lpTemp,30);		

		::GetClassName(hMdiChildWnd,lpTemp2,30);

		hMdiChildWnd = ::FindWindowEx(hFirstWnd,hMdiChildWnd,NULL,NULL);

	}
	
發佈了44 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章