0

我正在 Visual Studio 2012 中构建一个 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);

难道我做错了什么?先感谢您。

4

2 回答 2

4

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

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

执行此操作的功能是GetDlgItem(). 这将通过您在创建它们时提供的 ID 来查找子窗口。

HWND hwB1 = GetDlgItem(hWnd, IDC_BUTTON1);

hWnd是父窗口,IDC_BUTTON1是 ID。

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

于 2013-08-16T21:32:22.630 回答
0

使用FindWindowEx(),

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

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

于 2015-10-28T10:54:36.407 回答