Дочерняя кнопка не работаетC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Дочерняя кнопка не работает

Сообщение Anonymous »

Итак, по сути, есть кнопка, главное окно (hwnd), статический элемент управления (hpage1) и оконная процедура hwnd (WndProc). если родительским элементом кнопки является hwnd, все работает нормально, но если родительским элементом является hpage1, я не могу определить, нажата ли кнопка. Кроме того, родительским элементом hpage1 является hwnd.
Я предполагаю, что сообщение (сообщение о нажатии кнопки) отправляется только родительскому обработчику. Я не мог понять, как перенаправить сообщение с hpage1 на hwnd.
#include

#define CLIENTS_BUTTON 12

bool isRunning = true;

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
WNDCLASS windowClass = {};
windowClass.style = CS_HREDRAW | CS_VREDRAW;
windowClass.lpfnWndProc = WndProc;
windowClass.lpszClassName = L"MAIN_WINDOW";

if (!RegisterClass(&windowClass)) {
return 1;
}

HWND hwnd = CreateWindow(windowClass.lpszClassName, L"Simple Test", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 510, 345, NULL, NULL, hInstance, NULL);

ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);

while (isRunning) {
MSG message;
while (PeekMessage(&message, hwnd, 0, 0, PM_REMOVE)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
Sleep(10);
}

return 0;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CREATE: {
HWND hpage1 = CreateWindow(L"STATIC", L"Page1", WS_CHILD | WS_VISIBLE,
50, 50, 1000, 1000, hwnd, (HMENU)0,
(HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);

CreateWindow(
L"BUTTON", L"Submit", WS_CHILD | WS_VISIBLE,
50, 100, 60, 20,
hpage1, // if I change this to hwnd everthing works. but I try to find a way without changing it.
(HMENU)CLIENTS_BUTTON,
(HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL
);
} break;

case WM_COMMAND: {
if (LOWORD(wParam) == CLIENTS_BUTTON) {
MessageBox(hwnd, L"Submit Button Pressed!", L"Debug", MB_OK); // this line only executed when I change the button's parent to hwnd.
}
break;
}

case WM_CLOSE: {
isRunning = false;
} break;

case WM_DESTROY:
break;

default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... unctioning
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»