Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MDI внутри сплиттера

10K
19 июня 2006 года
Sonic_amiga
34 / / 19.06.2006
Приветствую всех! Имею проблему со следующим интерфейсом:
 
Код:
------------------------
|      |               |
|      |      3        |
|      |               |
|   1  |---------------|
|      |               |
|      |      2        |
|      |               |
|      |               |
------------------------

Собственно весьма стандартно. 1 - некий просмотрщик дерева; 2 - список объектов, представленный иконками; а вот 3 - область MDI (Tabbed MDI если кому важно). Там раскрываются документы, представленные иконками в области (2). Область (1) - некая служебная.
Пишу на MFC.
С областями 1 и 2 все отлично. 1 - TreeView, 2 - ListView в режиме LVS_ICON. А вот с (3) грабли. Создал я там с помощью CreateView подкласс CMDIFrameWnd без бордюра, тулбара и прочих вещей (тулбар имеет корневой фрейм). Во-первых, обнаружилось, что стандартный CMDIFrameWnd::OnCreateClient() использует меню, которое загружается по LoadFrame(), иначе там какая-то хитрая вещь которая у меня крешилась (в общем-то знаю почему - меню недоделано). Ну да ладно, заменил я OnCreateClient() на свой, кормлю ему там специально менюшку. Грабля вторая: MFC почему-то считает, что MDI-фрейм обязательно является главным окном приложения, посему тупо берет указатель на него из m_pMainWnd и скармливает в Create() моего подкласса CMDIChildWnd. Переписал это Create(), заменяю в нем окно на правильное, Снова падаем по ошибке доступа в защищенную память внутри MessageMap'а моего субкласса CMDIChildWnd. И вот тут я уже пас.
Вопрос: как правильно это сделать? Может я вообще что-то не то делаю? В Инете полно примеров по MDI, но именно моего случая почему-то нет.
398
19 июня 2006 года
Alexandoros
630 / / 21.10.2005
Попробуй создать сразу CMDIChildWnd, без главного фрейма CMDIFrameWnd, вместо него указывай (если где нужно) свой фрейм (область 3). Ну и останется поэксперементировать с фреймом области 3.
Если не выйдет наверно придется свой CWnd писать :)
398
20 июня 2006 года
Alexandoros
630 / / 21.10.2005
Как решил - то?
10K
11 июля 2006 года
Sonic_amiga
34 / / 19.06.2006
Это вообще не так делается, зарубежные челы подсказали. Без MDI-фрейма MDI-детей создавать нельзя в принципе, поскольку не будет MDI-клиента. А "сторонний" контент размещается в окне с помощью CControlBar, CDialogBar и им подобных. В качестве бонуса получаем возможность переразмещать эти области и "растаскивать" аппликуху на отдельные окошки. Сам по себе CControlBar сложен в использовании и дерьмово документирован. Я использовал CSizingBarControl, найденный где-то в Инете.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог