CPreviewView和命令处理程序
CPreviewView and command handlers
我的程序/环境…VS2010, c++, MFC100, CWinAppEx, CMDIFrameWndEx。MFC功能包。
我正在创建和处理一个CPreviewView的衍生物。我的方法将此预览视图视为用户可以保持和活动的普通视图。而默认的PreviewView绘制在当前视图上,并"接管"子框架。
我不能弄清楚的一件事是如何获得对ON_UPDATE_COMMAND_UI消息映射的控制,应该指向所有CDocuments。当创建CPreviewView时,它以某种方式禁用所有CDocuments的命令处理程序。CViews的命令处理程序仍然在工作。
在我的MDI应用程序中打开的所有文档都不会收到他们的ON_UPDATE_COMMAND_UI消息。我可以将这些消息处理程序移到视图或框架中,但是太多了,无法有效地做到这一点。
有没有人知道在CPreviewView类关闭文档处理程序的地方?
首先,MFC不是一个"锁定"的框架。其完整的源代码驻留在您自己的PC中的以下文件夹:"您的Visual Studio文件夹"VCatlmfcsrcmfc(在我的PC上它是:c:Program Files (x86)Microsoft Visual Studio 11.0VCatlmfcsrcmfc) CPreviewView的源代码是在viewprev.cpp
文件。我刚打开文件在DoPrintPreview中他们调用这个:
pParent->OnSetPreviewMode(TRUE, pState); // Take over Frame Window
根据MSDN这个方法:
默认实现禁用所有标准工具栏并隐藏主菜单和主客户端窗口。这将MDI框架窗口变为临时SDI框架窗口。
我已经打开了名为winfrm.cpp
的文件,并检查了该方法正在执行,并且它确实禁用了所有菜单。显然,当预览模式开启时,不会向文档发送更新消息。
上面超链接的MSDN文章说你需要覆盖你的框架的OnSetPreviewMode
方法:
自定义打印预览时控件栏和其他框架窗口部分的隐藏和显示。从被覆盖的版本中调用基类实现。
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 为什么我的 IExtractIcon 处理程序没有被调用?
- 在遍历处理程序的向量时注册和注销处理程序
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 通过安装信号处理程序关闭多线程应用程序
- QDateTime::toString() 在退出处理程序中使用时失败
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- async_write完成处理程序最早何时完成?
- C++事件系统 - 多态事件和事件处理程序
- 具有shared_ptr的处理程序中的分段错误
- 为什么我的信号处理程序只执行一次?
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- 命令和UPDATE_COMMAND_UI处理程序未在 MFC dll 中调用
- 主对话框在命令消息处理程序返回之前销毁
- 是否有任何本机 gtkmm 类可以从小部件的信号处理程序函数中排队命令/数据
- 对话框中的菜单命令更新处理程序
- CPreviewView和命令处理程序