MFC 10 - возможно ли иметь CFrameWnd в CView? - PullRequest
0 голосов
/ 18 апреля 2011

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

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

enter image description here

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

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

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

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

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

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

1 Ответ

2 голосов
/ 18 апреля 2011

Я бы не рекомендовал вставлять 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, чтобы расширить маршрутизацию сообщений до внутренних элементов управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...