遍历子窗体的临时代码
2015-04-28 09:00:25 访问(2310) 赞(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;
}
标签:
遍历子窗体的临时代码 


上一条:
下一条:
相关评论
发表评论