WinAPI FindWindow
Я создаю приложение win32 в Visual Studio 2012. У меня есть 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);
Я делаю что-то неправильно? Заранее спасибо.
2 ответа
FindWindow()
находит окна верхнего уровня, а не дочерние окна.
Если вы действительно хотите посмотреть дочернее окно по имени, вы можете использовать FindWindowEx()
функция, но использование идентификатора обычно более эффективно.
Функция, которая делает это GetDlgItem()
, Это просматривает дочерние окна по их идентификатору, который вы предоставляете при создании.
HWND hwB1 = GetDlgItem(hWnd, IDC_BUTTON1);
hWnd
это родительское окно, и IDC_BUTTON1
это идентификатор.
Другая альтернатива - просто сохранить дескриптор окна, который возвращается при создании дочернего окна - hWndButton
в вашем примере кода - и тогда вам вообще не нужно его искать.
Использование FindWindowEx()
,
HWND hwB1=FindWindowEx(hWnd/*Parent window*/,
hWndButton/*Child window*/,
"BUTTON"/*Class of the child window*/,
"APP1"/*Title of the child window*/);
Это лучший метод, когда идентификатор элемента управления неизвестен.