theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, FALSE);
将最后一个参数改为false 消息使用标准MFC路由
2、设置子窗口是否是选项卡方式
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
CMDITabInfo mdiTabParams;
mdiTabParams.m_style = CMFCTabCtrl::STYLE_3D_ONENOTE; // 其他可用样式...
mdiTabParams.m_bActiveTabCloseButton = TRUE; // 设置为 FALSE 会将关闭按钮放置在选项卡区域的右侧
mdiTabParams.m_bTabIcons = FALSE; // 设置为 TRUE 将在 MDI 选项卡上启用文档图标
mdiTabParams.m_bAutoColor = TRUE; // 设置为 FALSE 将禁用 MDI 选项卡的自动着色
mdiTabParams.m_bDocumentMenu = TRUE; // 在选项卡区域的右边缘启用文档菜单
EnableMDITabbedGroups(TRUE, mdiTabParams);
3、不打开默认文档
BOOL ***ShowApp::InitInstance()
{
……………………
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) //替换命令 取消默认窗口生成
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
……………………
}
4、添加不同类型的子窗口
1)创建新的View类如:
class COperationView : public CView
{
DECLARE_DYNCREATE(COperationView)
protected:
COperationView(); // 动态创建所使用的受保护的构造函数
virtual ~COperationView();
public:
virtual void OnDraw(CDC* pDC); // 重写以绘制该视图
#ifdef _DEBUG
virtual void AssertValid() const;
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc) const;
#endif
#endif
protected:
DECLARE_MESSAGE_MAP()
};
2)添加新的模板并记录
BOOL ***ShowApp::InitInstance()
{
……………………
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_DicomShowTYPE,
RUNTIME_CLASS(CDicomShowDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CDicomShowView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
m_pMultiDocTempPacs = pDocTemplate;
pDocTemplate = new CMultiDocTemplate(IDR_DicomShowTYPE,
RUNTIME_CLASS(CDicomShowDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(COperationView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
m_pMultiDocTempShowDicom = pDocTemplate;
……………………
}
3)、重载OnFileNew
BEGIN_MESSAGE_MAP(CDicomShowApp, CWinAppEx)
ON_COMMAND(ID_APP_ABOUT, &CDicomShowApp::OnAppAbout)
// 基于文件的标准文档命令
ON_COMMAND(ID_FILE_NEW, &CDicomShowApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
// 标准打印设置命令
ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinAppEx::OnFilePrintSetup)
END_MESSAGE_MAP()
5)添加新的ChildFrm后出现“创建空文档失败的情况”
头文件中
DECLARE_DYNAMIC(ChildFrmDCM)
替换
DECLARE_DYNCREATE(ChildFrmDCM)
源文件中
IMPLEMENT_DYNAMIC(ChildFrmDCM, CMDIChildWndEx)
替换为
IMPLEMENT_DYNCREATE(ChildFrmDCM, CMDIChildWndEx)
4)打开空文档
void CDicomShowApp::OnFileNew()
{
//打开指定模板
m_pMultiDocTempPacs->OpenDocumentFile(NULL);
int n = 10;
}