Могу ли я прикрепить CBitmapButton к родительскому CWnd вместо родительского CDialog?

Я унаследовал проект (изначально написанный для Win95!), Который имеет несколько кнопок, прикрепленных к родительскому окну, производному от CWnd. Сами кнопки находятся в определяемом пользователем классе, производном от CWnd, поэтому они не являются "настоящими" кнопками, а представляют собой небольшие окна, определяемые миллиардами строк кода, и имеют массу проблем с отображением, над которыми я потел в течение нескольких недель, без разрешения в поле зрения.

На днях мы пришли к выводу, что CBitmapButton выглядит как отличная альтернатива. Выглядит просто, определите 4 растровых изображения для разных состояний кнопок. Все, что мне нужно, это BN_CLICKED, чтобы запустить обработчик, и я буду золотым.

Поработав с этим некоторое время, настроив кнопку и несколько растровых изображений, я смог отобразить CBitmapButton; не выглядел великолепно, но я могу это исправить... проблема СЕЙЧАС в том, что я попытался настроить карту сообщений для захвата сообщения BN_CLICKED, но так как родительское окно получено из CWnd вместо CDialog, я получаю синтаксические ошибки настройка карты сообщений. Прочитайте MSDN по этому вопросу несколько раз, и кажется, что вы можете только подключить CBitmapButton к классу, производному от CDialog. Это кажется мне довольно странным - я просто хочу кнопку, и она должна быть в состоянии передать простое "меня нажали" любому родителю, к которому он привязан, но, очевидно, не суждено случиться.

Итак, кто-нибудь успешно прикрепил CBitmapButton к производному от CWnd родителю; и если да, то как настроить карту сообщений, которая будет работать с этими вещами? В качестве альтернативы, какой подход вы бы использовали для настройки класса кнопки, который бы работал с родителем CWnd, поскольку CBitmapButton и CButton, кажется, требуют наличия CDialog в качестве родителей?

1 ответ

Решение

Нет, это не требует, чтобы ваше родительское окно всегда было CDiaglot, вы даже можете наследовать от CWnd и создать внутри него CButton/CBitmapButton.

Вы можете переопределить OnCommand сообщение в вашем CWnd производный класс и нажмите кнопку события нажатия.

Другие вопросы по тегам