+-----+----------------------+
| | |
| | |
| 1 | 3 |
| | |
| | |
+-----+----------------------+
| 2 |
| |
+----------------------------+
ON_UPDATE_COMMAND_UI мать его...
Код:
Области 1 и 2 - пристыкованные CControlBar'ы, область 3 - MDI-клиент. Вверху этой аппликухи имеем тулбар и меню. В меню (и на тулбаре) есть функции, относящиеся к (1), равно как и относящиеся к (2). Соответственно обработчики ON_WM_COMMAND и ON_UPDATE_COMMAND_UI расположены в соответствующих классах.
В результате получаем следующий противный эффект: активны только те кнопки и пункты, которые относятся к "активному" CControlBar'у (т. е. тому, который последним получал фокус. При щелчках на областях все это дело переключается.
Как просто и эффективно сделать так, чтобы этого не было? Я пробовал переносить записи MessageMap'а в класс основного фрейма, а ссылаться на функции в классах (для чего объявил класс фрейма для них другом). В результате получил страшенную байду с указателями this в этих функциях (которые указывали черт-те-куда), и забросил это дело. Мучился три часа, пытаясь понять, как вся эта хрень изнутри работает и где в MFC происходит запрет/разрешение команд по умолчанию. Не понял нифига. По идее мне нужно перехватить то место, где происходит запрет команд, которые не отрабатываются активным окном,и вместо этого вызвать что-то, что вызовет мою цепочку ON_UPDATE_COMMAND_UI для класса того окна, которое сейчас неактивно. А как блин???