CPreviewView и обработчики команд

Моя программа / среда … VS2010, C ++, MFC100, CWinAppEx, CMDIFrameWndEx. Пакет функций MFC.

Я создаю и обрабатываю производную CPreviewView. Мой метод обрабатывает это представление предварительного просмотра как нормальное представление, которое пользователь может поддерживать и активно. Где PreviewView по умолчанию закрашивает текущий вид и «захватывает» дочерний кадр.

Одна вещь, которую я не могу понять, это как получить контроль над картами сообщений ON_UPDATE_COMMAND_UI, которые должны быть направлены на все CDocuments. Когда CPreviewView создан, он как-то отключает все обработчики команд для CDocuments. Обработчики команд для CViews все еще работают и работают.

Все документы, открытые в моем приложении MDI, не получают своих сообщений ON_UPDATE_COMMAND_UI. Я могу переместить эти обработчики сообщений в View или Frame, но их слишком много, чтобы сделать это эффективно.

Кто-нибудь знает, где в классе CPreviewView отключаются обработчики документов?

0

Решение

Во-первых, MFC не является «закрытой» структурой. Его полный источник находится на вашем ПК в следующей папке: «папка Visual Studio» \ VC \ atlmfc \ src \ mfc \ (на моем компьютере это: c: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ atlmfc \ src \ mfc) Источник для CPreviewView находится в viewprev.cpp файл. Я только что открыл файл и в DoPrintPreview они вызывают это:

pParent->OnSetPreviewMode(TRUE, pState);    // Take over Frame Window

В соответствии с MSDN Этот метод:

Реализация по умолчанию отключает все стандартные панели инструментов и скрывает главное меню и главное окно клиента. Это превращает окна кадров MDI во временные окна кадров SDI.

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

В статье MSDN по гиперссылке выше сказано, что вам нужно переопределить OnSetPreviewMode метод для вашего кадра:

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

Это не должно быть проблемой.

2

Другие решения


По вопросам рекламы [email protected]