gpt4 book ai didi

c++ - CPreviewView 和命令处理程序

转载 作者:行者123 更新时间:2023-11-28 02:48:00 32 4
gpt4 key购买 nike

我的程序/环境...VS2010、C++、MFC100、CWinAppEx、CMD​​IFrameWndEx。 MFC 功能包。

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

我想不通的一件事是如何控制应该定向到所有 CDocuments 的 ON_UPDATE_COMMAND_UI 消息映射。创建 CPreviewView 时,它会以某种方式禁用 CDocuments 的所有命令处理程序。 CViews 的命令处理程序仍在运行。

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

有谁知道 CPreviewView 类中的什么地方关闭了文档处理程序?

最佳答案

首先,MFC 不是一个“锁定”的框架。它的完整源位于您自己的 PC 上的以下文件夹中:“您的 Visual Studio 文件夹”\VC\atlmfc\src\mfc\(在我的 PC 上是: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这个方法:

The default implementation disables all standard toolbars and hides the main menu and the main client window. This turns MDI frame windows into temporary SDI frame windows.

我打开了名为 winfrm.cpp 的文件并检查了此方法是否有效,它确实禁用了所有菜单。显然,当预览模式打开时,不会向文档发送任何更新消息。

上面超链接处的 MSDN 文章说您需要为您的框架覆盖 OnSetPreviewMode 方法以:

customize the hiding and showing of control bars and other frame window parts during print preview. Call the base class implementation from within the overridden version.

这应该不是问题。

关于c++ - CPreviewView 和命令处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746862/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com