Win32 Subclassed Window Сообщения

У меня есть статическое окно с окном кнопки внутри приложения Win32, и я поместил эту кнопку в подкласс, чтобы обработать ее сообщения с помощью моего единственного «MessageProc».

void MyProgram::Initialize(WNDPROC messageProc)
{
//Here I create a bunch of windows
_resourceWindow = CreateWindow("STATIC", "Resources", WS_CHILD | WS_VISIBLE | WS_SIZEBOX, 5, 5, 200, 600, 0, 0, _mainInstance, NULL);
//The child button
_resourceAddButton = CreateWindow("BUTTON", "Add", WS_CHILD | WS_VISIBLE, 5, 20, 50, 20, _resourceWindow, 0, _mainInstance, NULL);

_resourceAddButtonWndProc = (WNDPROC)SetWindowLongPtr(_resourceAddButton, GWLP_WNDPROC, (WNDPROC)messageProc);
//Messages from this button are sent to messageProc now
}

void MyProgram::SubclassesProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_PAINT:
{
if(hWnd == _resourceAddButton) //I have more than one child button so I'll have to do this one by one right?
{
CallWindowProc(_resourceAddButtonWndProc, hWnd, uMsg, wParam, lParam);
}
}
}
}

Этот «SubclassesProc» вызывается в части по умолчанию моей функции «messageProc».

Так оно и есть, моя кнопка вообще не получает «щелчки», я нажимаю, но ничего не происходит (визуально она не меняется и тоже не вызывает WM_COMMAND).
Я предполагаю, что это потому, что теперь все сообщения от этой кнопки обрабатываются функцией messageProc, и это вызывает некоторую блокировку сообщений … например, WM_LBUTTONDOWN в элементе управления Button никогда не вызывается, потому что у меня уже есть:

switch(uMsg)
{
case WM_LBUTTONDOWN:
{
//I'm doing something else
break;
}
//bunch of other commands
default:
{
myProgram.SubclassesProc(hWnd, uMsg, wParam, lParam);
break;
}
}

Поэтому SubclassesProc с WM_LBUTTONDOWN никогда не вызывается, и кнопка не может быть нажата, и из-за этого она не будет вызывать WM_COMMAND.

Какой правильный способ справиться с этим?

На данный момент я рассматриваю возможность переписать функцию messageProc, но я должен был бы принять во внимание каждое подклассовое окно почти в каждом входящем сообщении пользователя … или просто забыть о подклассах.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]