我正在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未知时,这是一个更好的方法。