MFC 10. Возможно ли иметь CFrameWnd в CView?

Я использую MFC (да, это должен быть MFC, и нет, я не могу взаимодействовать с .Net) для создания CFrameWnd.

Моя цель — создать CFrameWnd, содержащий CFormView, основанный на шаблоне диалога, который выглядит примерно так:

введите здесь описание изображения

У меня есть рамка и представление для отображения, и у меня есть элемент управления Edit. Теперь я хочу, чтобы CToolbar был выровнен по верхней части элемента управления «Редактировать текст», но не был прикреплен к верхнему фрейму.

В идеале я хотел бы иметь дочерний фрейм/представление, которое я могу динамически добавлять вместо группы операторов. Таким образом, я мог просто закрепить панель инструментов, как обычно.

Что мне кажется странным, так это то, что я мог бы легко добиться этого, если бы у меня был сплиттер, используя функцию CreateView. Я действительно не хочу иметь сплиттер и чувствую, что должен быть другой способ.

В общем, вот вопрос, с которым мне нужна помощь:

  • Q1 — Как я могу иметь CFrameWnd в CView (например, что делает CSplitter::CreateView)?
  • Вопрос 2. Как разместить панель инструментов в CView, не закрепляя ее и не перемещая ее в другом фрейме (я более чем готов изменить размер, расположить ее вручную, если бы только знал, как это сделать)?

Теперь я действительно ценю то, насколько легко все обстоит в .Net.


person steinybot    schedule 18.04.2011    source источник


Ответы (1)


Я бы не рекомендовал вставлять CFrameWnd в CView. Вы будете бороться с MFC на протяжении всего пути, фактически живя в мире ASSERT, поскольку внутренняя функциональность, такая как маршрутизация сообщений, предполагает, что фреймы не живут в представлениях.

Вместо этого просто используйте CWnd вместо CFrameWnd и в методе «Создать» вручную создайте панель инструментов, а также Ctrl и размер редактирования и расположите их самостоятельно (создайте метод AdjustLayout, который использует CMFCToolbar:: CalcFixedLayout для настройки положения других ваших компонентов) .

Отличным примером этого является пример приложения Visual Studio PropertiesViewBar.cpp:

http://msdn.microsoft.com/en-us/library/bb983983(v=vs.90).aspx

Примечание. Возможно, вам придется переопределить OnCmdMsg, чтобы распространить маршрутизацию сообщений на внутренние элементы управления.

person snowdude    schedule 18.04.2011
comment
Огромное спасибо. Я не смотрел на образцы, но они довольно хороши. Переход от нашего существующего кода отправил меня по неправильному пути. Это только я или документация немного расплывчата / загадочна в отношении того, какой элемент управления лучше всего подходит для конкретной задачи? Мне нужна лучшая стратегия для определения того, какие элементы управления использовать. В .Net это кажется намного более интуитивным. - person steinybot; 19.04.2011
comment
Да и документация не очень. Что необходимо, так это обновленная версия отличной книги Professional MFC, чтобы охватить новый пакет функций. Я использую продукт под названием FileLocator Pro для навигации по исходному коду MFC и примерам приложений. - person snowdude; 19.04.2011