遍历子窗体的临时代码

2015-04-28 09:00:25  访问(2312) 赞(0) 踩(0)

#include <Windows.h>
#include <tchar.h>
#include <assert.h>

//////////////////////////////////////////////////////////////////////////
BOOL CALLBACK EnumChildWndProc(HWND hWnd, LPARAM lParam)
{
	HWND hListbox = (HWND)lParam;
	if (NULL == hWnd)	return FALSE;

	if (NULL != hListbox && IsWindow(hListbox))
	{
		TCHAR szWndInfo[512]	= {0};
		TCHAR szWndTitle[256]	= {0};
		TCHAR szClsName[64]		= {0};

		GetWindowText(hWnd, szWndTitle, 256);
		GetClassName(hWnd, szClsName, 64);
 		_stprintf(szWndInfo,
			      _T("窗口 %08X ")
				  _T("\"%s\" ")
				  _T("%s ")
				  _T("%s"),
			      hWnd,
				  szWndTitle,
				  szClsName,
				  IsWindowVisible(hWnd) ? _T("Visible") : _T("Invisible"));
		SendMessage(hListbox, LB_ADDSTRING, 0, (LPARAM)szWndInfo);
	}

	return TRUE;
}

//////////////////////////////////////////////////////////////////////////
void _EnumChildWindows(HWND hParent, HWND hDisplay)
{
	HWND hWndChild	= GetWindow(hParent, GW_CHILD);
	HWND hWndTemp	= GetWindow(hWndChild, GW_HWNDFIRST);
	do {
		TCHAR szWndInfo[512]	= {0};
		TCHAR szWndTitle[256]	= {0};
		TCHAR szClsName[64]		= {0};

		GetWindowText(hWndTemp, szWndTitle, 256);
		GetClassName(hWndTemp, szClsName, 64);
		_stprintf(szWndInfo,
					_T("窗口 %08X ")
					_T("\"%s\"")
					_T("%s ")
					_T("%s"),
					hWndTemp,
					szWndTitle,
					szClsName,
					IsWindowVisible(hWndTemp) ? _T("Visible") : _T("Invisible"));
		SendMessage(hDisplay, LB_ADDSTRING, 0, (LPARAM)szWndInfo);
	} while (NULL != (hWndTemp = GetWindow(hWndTemp, GW_HWNDNEXT)));
}

//////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{	
	static const UINT IDC_BTNDATAREAD	= 1001;
	static const UINT IDC_LSTWNDLIST	= 1002;
	static const UINT IDC_LSTWNDLIST1	= 1003;

	switch (nMsg)
	{
		case WM_CREATE:
		{
			//--: Move Main wnd to center of screen
			RECT rtMainWnd;
			GetClientRect(hWnd, &rtMainWnd);
			UINT nSrnWidth		= GetSystemMetrics(SM_CXFULLSCREEN);
			UINT nSrnHeight		= GetSystemMetrics(SM_CYFULLSCREEN);
			UINT nWndWidth		= (rtMainWnd.right - rtMainWnd.left);
			UINT nWndHeight		= (rtMainWnd.bottom - rtMainWnd.top);
			UINT nLeft			= (nSrnWidth - nWndWidth) / 2;
			UINT nTop			= (nSrnHeight - nWndHeight) / 2;
			MoveWindow(hWnd, nLeft, nTop, nWndWidth, nWndHeight, TRUE);
			
			CreateWindow(_T("Button"), _T("Extract Desktop Child Window"), WS_CHILD|WS_VISIBLE, 10, 0, 200, 50, hWnd, (HMENU)IDC_BTNDATAREAD, NULL, NULL);
			CreateWindowEx(WS_EX_CLIENTEDGE, _T("Listbox"), _T(""), WS_CHILD|WS_VISIBLE|LBS_HASSTRINGS|WS_VSCROLL, 10, 60, 350, 360, hWnd, (HMENU)IDC_LSTWNDLIST, NULL, NULL);
			CreateWindowEx(WS_EX_CLIENTEDGE, _T("Listbox"), _T(""), WS_CHILD|WS_VISIBLE|LBS_HASSTRINGS|WS_VSCROLL, 380, 60, 350, 360, hWnd, (HMENU)IDC_LSTWNDLIST1, NULL, NULL);

			break;
		}
		case WM_COMMAND:
		{
			switch (wParam)
			{
				case IDC_BTNDATAREAD:
				{
					HWND hListbox	= GetDlgItem(hWnd, IDC_LSTWNDLIST);
					HWND hListbox1	= GetDlgItem(hWnd, IDC_LSTWNDLIST1);
					SendMessage(hListbox, LB_RESETCONTENT, 0, 0);
					SendMessage(hListbox1, LB_RESETCONTENT, 0, 0);

					HWND hParent = GetDesktopWindow();
					_EnumChildWindows(hParent, hListbox);

					EnumChildWindows(hParent, EnumChildWndProc, (LPARAM)hListbox1);

					SetWindowText(GetDlgItem(hWnd, IDC_BTNDATAREAD), _T("Refresh"));
				}
				break;
			}
			break;
		}
		case WM_DESTROY:
		{
			PostQuitMessage(0);
			break;
		}
	}

	return ::DefWindowProc(hWnd, nMsg, wParam, lParam);
}

//////////////////////////////////////////////////////////////////////////
bool RegisterWndClass(HINSTANCE hInstance, const TCHAR* szClsName)
{
	WNDCLASSEX wcs		= {0};
	wcs.cbSize			= sizeof(WNDCLASSEX);
	wcs.hbrBackground	= (HBRUSH)GetStockObject(COLOR_APPWORKSPACE);
	wcs.lpszClassName	= szClsName;
	wcs.lpfnWndProc		= WndProc;
	wcs.hCursor			= LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));
	wcs.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
	wcs.style			= CS_VREDRAW|CS_HREDRAW;
	
	return (0 != RegisterClassEx(&wcs));
}

//////////////////////////////////////////////////////////////////////////
bool CreateMainWnd(HINSTANCE hInstance, const TCHAR* szClsName, const TCHAR* szWndCaption)
{
	if (NULL != szClsName && NULL != szWndCaption)
	{
		HWND hWnd = CreateWindowEx(WS_EX_APPWINDOW, szClsName, szWndCaption, WS_VISIBLE|WS_POPUPWINDOW|WS_CAPTION, 
								0, 0, 800, 480, NULL, NULL, hInstance, hInstance);
		if (NULL != hWnd && IsWindow(hWnd))
		{
			ShowWindow(hWnd, SW_SHOW);
			UpdateWindow(hWnd);
			return true;
		}
	}
	return false;
}

//////////////////////////////////////////////////////////////////////////
void RunMessageLoop()
{
	MSG Msg;
	while (true)
	{
		while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
		{
			if (WM_QUIT == Msg.message)
			{
				return;
			}

			TranslateMessage(&Msg);
			DispatchMessage(&Msg);
		}
	}
}
//////////////////////////////////////////////////////////////////////////
BOOL WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR szCmdLine, int nShowCmd)
{
	const TCHAR* szClsName		= _T("Win32App");
	const TCHAR* szWndCaption	= _T("Demo0032");

	if (RegisterWndClass(hInstance, szClsName))
	{
		if (CreateMainWnd(hInstance, szClsName, szWndCaption))
		{
			RunMessageLoop();
		}
	}

	return TRUE;
}


标签:遍历子窗体的临时代码 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)