我有一个MFC MDI应用程序,我在Visual Studio中使用选项卡式界面开发。我想在选项卡组中打开非文档视图的视图 - 即它们没有关联的文档,不需要保存它们等等。在某种程度上,它们的行为类似于非模态对话框,但有标签。 [这些窗口只是显示信息并接受命令]
MDI应用程序的内部机制似乎非常适合使用DocTemplate - Document - Frame - View对象结构及其相关窗口。
Q1)有人对如何创建这样的窗口并将它们添加到已经建立的MDI选项卡组中有任何想法吗?我试图创建一个RichEdit窗口并将其添加到:
// m_wndListingView will be a non-editable CRichEditCtrl
m_wndListingView->Create(WS_CHILD | WS_VISIBLE | ES_WANTRETURN | WS_VSCROLL |
WS_HSCROLL | ES_MULTILINE | ES_LEFT | ES_AUTOHSCROLL | ES_SAVESEL |ES_READONLY,
CRect(0, 0, 20, 20), pMainFrame, 1234);
// get Tab control and add a new tab
CMFCTabCtrl *mm_wndTabCtrl = &pMainFrame->GetMDITabs();
mm_wndTabCtrl->AddTab (m_wndListingView, _T("LISTING"));
这创建并显示了窗口..但它没有添加到选项卡组。
Q2)如果我设法在选项卡组中正确显示一个窗口(可能需要一个框架窗口),如何告诉“系统”当用户关闭它时,我不想要该应用程序提示用户保存文档?也许我可以重载'OnClose'方法......但它不能是document :: OnClose(),因为没有文档。
感谢您的任何想法, CAS
答案 0 :(得分:0)
您需要创建一个框架和视图来托管您的富编辑。这可以在没有文档的情况下完成。该视图将是richedit的父级(而不是pMainFrame)。
这些内容(警告,未经测试):
CFrame* pFrame = (Crame*)RUNTIME_CLASS( CFrame )->CreateObject();
CCreateContext context;
context.m_pNewViewClass = RUNTIME_CLASS( CView );
context.m_pCurrentDoc = NULL;
context.m_pCurrentFrame = NULL;
context.m_pLastView = NULL;
context.m_pNewDocTemplate = NULL;
// NOTE: create IDR_SOMERESOURCE string (for tab title), menu, etc as needed
BOOL frameLoaded = pFrame->LoadFrame( IDR_SOMERESOURCE, WS_OVERLAPPEDWINDOW, pMainFrame, &context );
if (frameLoaded)
Frame->InitialUpdateFrame( NULL, TRUE );
// now create your rich edit with the view as its parent