【Demo 0033】遍历窗体中控件

今天学习的内容在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;
}
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);

     本例以Notepad 窗体为目标, 通过EnumChildWindows 获取NotePad中所有的控件

二、显示结果

     image

    运行后发现NodePad 有两个控件1. Edit 2. statusbar  且不可见

演示代码

原文地址:https://www.cnblogs.com/ztercel/p/2152612.html