Страница 1 из 1

как получать msgs от CToolBarCtrk через ON_CONTROL_REFLECT ?

Добавлено: 13 май 2005, 09:08
pahmed
Привет други,

хочется сделать контрол, который-бы представлял из себя ТулБар и все свои-же сообщения обрабатывал сам —
тем самым не утомляя родителя всякими левыми(low-level с точки зрения сообщениями);
в том числе ТулБар должен хватать и WM_COMMAND от нажатия кнопок!!!! ибо с точки зрения архитектуры будет правильно сделать так:

class IToolBarHandler {
virtual void OnHanflerA() = 0;
virtual void OnHanflerB() = 0;
};


COwnToolBar : public CToolBar {
virtual void OnHanflerA(){ make something }
virtual void OnHanflerB(){ make something }

DECLARE_MESSAGE_MAP()
afx_msg void OnTBHanflerA();
afx_msg void OnTBHanflerB();
};

void OnTBHanflerA() {
IToolBarHandler::OnHanflerA();
}
void OnTBHanflerB() {
IToolBarHandler::OnHanflerB();
}

то есть ТулБар отвечает только за основу GUI, а логика будер реализована в IToolBarHandler;
(на самом деле такой подход вытекает из много-платформенности)

для того, что-бы хватать WM_COMMAND от себя есть такой макрос:
ON_CONTROL_REFLECT, но..........

Студия(7.1) кнопки в ТулБаре отображает как Grayed(Disabled) — на них нажать нельзя ибо в родителе ТулБара не определыоработчики этих кнопок !!!!!!! — бред???????? я ведь не ходу, чтобы родитель обрабатывал
low-level сообщения от ТулБара — вместо этого я использую ON_CONTROL_REFLECT в самом контоле, но кнопки при этом
остаются Grayed.

внимание вопрос:
1. подскажите как все-таки сделать кнопки на тулбаре активными???????
2. как студия используя карту сообщений делает Grayed кнопки ТулБара и Меню??????????? —
вот это для меня загадка!!!!

Thanks...

Добавлено: 19 сен 2005, 00:02
bombur
void CYourToolBar::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
{
CToolBar::OnUpdateCmdUI(pTarget, FALSE);
}