Я пишу довольно простую оболочку для Win32 элементов управления / диалогов / окон.
У меня проблема в том, что ListBox и ComboBox ведут себя по-разному.
В базовом классе Widget, от которого я наследую, я переопределяю существующий WNDPROC для элемента управления, а затем обрабатываю сообщения в новом WNDPROC, в первую очередь продвигая их в события boost :: signal.
Проблема в том, что, хотя WndProc ComboBox получает CBN_SELCHANGE — как и ожидалось — WndProc ListBox не получает команду LBN_SELCHANGE.
Я понимаю, что диалоговое окно / окно, которому принадлежит элемент управления, скорее всего, получит это, но я вроде как уже спустился в эту кроличью нору, и это похоже на довольно аккуратное решение. Нужно ли мне возвращаться назад и заставлять владельцев элементов управления обрабатывать сообщения WM_COMMAND (и оттуда преобразовывать их в событие на самом элементе управления).
Это учебное упражнение, поэтому, пожалуйста, не напоминайте мне о MFC и не комментируйте ценность этого.
Уведомительные сообщения обычно отправляются родителю элемента управления. Предположительно, все окна (то есть родительские окна и элементы управления) используют одну и ту же оконную процедуру? В этом случае обычное решение: в обработчике уведомлений в вашей оконной процедуре проверьте, пришло ли уведомление из текущего окна. Если это так, поднять событие; если оно не отправило сообщение обратно элементу управления, откуда оно пришло (где оно будет вызвано как событие).
Других решений пока нет …