Я пытаюсь изменить стандартную функцию WndProc
. У меня есть этот код:
HWND btn = CreateWindowEx(WS_EX_TRANSPARENT | WS_EX_CLIENTEDGE, L"BUTTON", L"Window title", WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON
, 50, 50, 50, 50, (HWND)XApplicationMainWindow->window->_wnd, (HMENU)123,
(HINSTANCE)GetWindowLongPtr(XApplicationMainWindow->window->_wnd, GWLP_HINSTANCE), NULL);
SetWindowLongPtrW(btn, GWLP_WNDPROC, (LONG_PTR)SubclassWindowProc);
Я могу использовать имя класса L"BUTTON"
, но когда я изменю функцию WndProc
, у меня возникнут проблемы.
На этой картинке вы видите пустой квадрат и обычную кнопку. Если я попытаюсь создать новый WNDCLASS or WNDCLASSEX
, у меня ничего не будет... Почему?
Как я могу изменить стандартную функцию WndProc
, если я использую имя класса L"BUTTON"
?
Это мой второй WndProc
:
LRESULT CALLBACK SubclassWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CREATE:
break;
case WM_COMMAND:
//Event click
switch (LOWORD(wParam))
{
case 123:
OutputDebugStringA("Subclass click2");
break;
default:
break;
}
break;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
DefWindowProc
а предыдущий wndproc, который вернулSetWindowLongPtrW
, затем вам нужно передать ему все сообщения, которые вы не обрабатываете специально,WM_CREATE
например. и напоследок - для чего вообще менять кнопку proc - person RbMm   schedule 29.07.2020SetWindowSubclass()
безопаснее, чемSetWindowLongPtr()
- person Remy Lebeau   schedule 29.07.2020