今天学习的内容在Demo032中基本上己学过了, 此例仅在Demo32基础上做了一点延伸。
在上节中我们了解EnumchildWindows遍历桌面的子窗体, 本节使 用此函数来获取窗体中所有控件.
一、代码演示
//////////////////////////////////////////////////////////////////////////
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;
}
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;
}
HWND hListbox = GetDlgItem(hWnd, IDC_LSTWNDLIST);
SendMessage(hListbox, LB_RESETCONTENT, 0, 0);
HWND hParent = FindWindowEx(NULL, NULL, _T("Notepad"), NULL);
EnumChildWindows(hParent, WndEnumProc, (LPARAM)GetDlgItem(hWnd, IDC_LSTWNDLIST));
SetWindowText(GetDlgItem(hWnd, IDC_BTNDATAREAD), _T("Refresh"));
TCHAR szTmp[128];
DWORD dwcount = SendMessage(GetDlgItem(hWnd, IDC_LSTWNDLIST), LB_GETCOUNT, 0, 0);
_stprintf(szTmp, _T("size: %d"), dwcount);
OutputDebugString(szTmp);
SendMessage(hListbox, LB_RESETCONTENT, 0, 0);
HWND hParent = FindWindowEx(NULL, NULL, _T("Notepad"), NULL);
EnumChildWindows(hParent, WndEnumProc, (LPARAM)GetDlgItem(hWnd, IDC_LSTWNDLIST));
SetWindowText(GetDlgItem(hWnd, IDC_BTNDATAREAD), _T("Refresh"));
TCHAR szTmp[128];
DWORD dwcount = SendMessage(GetDlgItem(hWnd, IDC_LSTWNDLIST), LB_GETCOUNT, 0, 0);
_stprintf(szTmp, _T("size: %d"), dwcount);
OutputDebugString(szTmp);
本例以Notepad 窗体为目标, 通过EnumChildWindows 获取NotePad中所有的控件
二、显示结果
运行后发现NodePad 有两个控件1. Edit 2. statusbar 且不可见