WinAPI查找窗口



我正在visualstudio2012中构建一个win32应用程序。我用以下代码创建了4个禁用按钮:

HWND hWndButton=CreateWindowEx(NULL, 
        L"BUTTON",
        L"APP1",
        WS_TABSTOP|WS_VISIBLE|WS_CHILD|BS_DEFPUSHBUTTON|WS_DISABLED|BS_ICON,
        40,
        40,
        180,
        140,
        hWnd,
        (HMENU)IDC_BUTTON1,
        GetModuleHandle(NULL),
        NULL);

我想做的是在应用程序运行时启用这些按钮。我试图使用findwindow来查找并启用第一个按钮,但它找不到。我的代码是:

HWND hwB1 = FindWindow(L"BUTTON",L"APP1");
if (hwB1 !=0)   MessageBox(NULL,L"FOUND",L"Button Found",MB_OK);
EnableWindow(hwB1,true);

我做错什么了吗?提前谢谢。

FindWindow()查找顶级窗口,而不是子窗口。

如果您确实想按名称查找子窗口,可以使用FindWindowEx()函数,但使用ID通常更有效。

执行此操作的函数是GetDlgItem()。这将根据创建子窗口时提供的ID来查找子窗口。

HWND hwB1 = GetDlgItem(hWnd, IDC_BUTTON1);

hWnd是父窗口,IDC_BUTTON1是ID。

另一种选择是简单地存储创建子窗口时返回的窗口句柄(在代码示例中为hWndButton),然后根本不需要查找它。

使用FindWindowEx()

HWND hwB1=FindWindowEx(hWnd/*Parent window*/,
                       hWndButton/*Child window*/,
                       "BUTTON"/*Class of the child window*/,
                       "APP1"/*Title of the child window*/);

当控件ID未知时,这是一个更好的方法。

相关内容

  • 没有找到相关文章

最新更新