CPreviewView和命令处理程序

时间:2014-05-19 20:42:26

标签: c++ mfc mfc-feature-pack afx

我的程序/环境...... VS2010,C ++,MFC100,CWinAppEx,CMDIFrameWndEx。 MFC功能包。

我正在创建和处理CPreviewView衍生产品。我的方法将此预览视图视为用户可以跟上并激活的普通视图。默认的PreviewView在当前视图上绘制并“接管”子框架。

我无法弄清楚的一件事是如何控制应该定向到所有CD文档的ON_UPDATE_COMMAND_UI消息映射。创建CPreviewView时,它会以某种方式禁用CDocuments的所有命令处理程序。 CView的命令处理程序仍在运行。

在我的MDI应用程序中打开的所有文档都不会收到它们的ON_UPDATE_COMMAND_UI消息。我可以将这些消息处理程序移到View或Frame中,但是有太多的东西可以有效地执行此操作。

有没有人知道CPreviewView类在哪里关闭文档处理程序?

1 个答案:

答案 0 :(得分:2)

首先,MFC不是一个“锁定”的框架。它的完整源代码驻留在您自己的PC上的以下文件夹中:“您的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方法:

  

在打印预览期间自定义控件栏和其他框架窗口部件的隐藏和显示。从重写版本中调用基类实现。

这应该不是问题。