介绍 有时,它可能是有用的和文档/视图结构,模态窗口工具栏/状态栏支持(即基本功能实现MFC框架窗口)。如何让这些没有实现所有这些功能在CDialog-derived类?这里给出的CModalFrame实用程序类可以帮助您实现一个模态对话框的行为对任何CFrameWnd-derived窗口类的一个简单的方法。 如果你要使用它,有一点时间,请添加一个评论这一页的底部,告诉,您决定使用这段代码的上下文。我会很感兴趣。 背景 一些基本的事实: 所有必需的功能已经实现CFrameWnd-derived类。 模态的基本支持消息循环已经CWnd类中实现。 简短描述:实现 该实用程序代码只使用CFrameWnd类接口和不做任何建议任何CFrameWnd-derived类的内部实现细节。 CModalFrame:创建内部CModalDialogLock类的一个实例,运行: 商店模态循环的背景下, 运行模态消息循环, 支持多个模态运行框架。 CModalDialogLock子类创建的框架窗口提供: 更新命令帧的UI WM_KICKIDLE消息, 退出模态WM_NCDESTROY消息和消息循环, 恢复标准模态窗口行为ncactivate消息的信息。 你不应该使用WS_CHILD窗口风格的框架。因为它的父窗口在模态循环是禁用的。所以孩子框架窗口也将被禁用(例如,MDI子帧)! 使用的代码 所需文件: ModalFrame.h ModalFrame.cpp 用法:样本隐藏,复制Code
void CMyView::OnRunModalFrame() { CCreateContext context; context.m_pNewViewClass = RUNTIME_CLASS(CMyOtherView); context.m_pCurrentDoc = GetDocument(); context.m_pNewDocTemplate = GetDocument()->GetTemplate(); context.m_pLastView = this; context.m_pCurrentFrame = GetParentFrame(); CRuntimeClass * pFrameClass = RUNTIME_CLASS(CMyModalFrame); if (!CModalFrame::Run(*pFrameClass, false, IDR_MYFRAMERESOURCE, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, this, &context)) { AfxMessageBox(AFX_IDP_COMMAND_FAILURE); } } // don't forget close modal frame like a modal dialog box! void CMyModalFrame::OnClose() { int nModalResult = -1; CModalFrame::End(this, nModalResult); }
看到演示项目代码的更多细节。 历史 版本1.2 修复Bug。 更准确的处理一堆模态帧。 版本1.1 实现支持多种运行模式框架。 更准确的恢复活动窗口后的模态消息循环。 版本1.0 最初的版本。 本文转载于:http://www.diyabc.com/frontweb/news5438.html