一個VC寫的圖形程序,原來是單文檔結(jié)構(gòu),現(xiàn)在需要改成多文檔的形式,我不想新建一個多文檔工程再把代碼加過去,那樣的話工作量太大。我就把程序中和單文檔有關(guān)的地方改了下,比如CMainFrame改為從CMDIFrameWnd繼承,新增了一個從CMDIChildWnd繼承的類CChildFrame,C***App::InitInstance()內(nèi)一段改為
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CChartEditDoc),
RUNTIME_CLASS(CChildFrame), // 原來為RUNTIME_CLASS(CMainFrame)
RUNTIME_CLASS(CChartEditView));
AddDocTemplate(pDocTemplate);
可程序運(yùn)行倒 if (!ProcessShellCommand(cmdInfo)) return FALSE;就出錯了。
哪位知道的告訴我怎么改啊???
http://www.wangchao.net.cn/bbsdetail_746539.html
如果想將一個編好的SDI應(yīng)用程序轉(zhuǎn)換為MDI,首先要建立一個繼承于CMDIChidWnd的類,假設(shè)為CChldFrm,在CWinApp中作如下變化。
InitInstance()
{
. ...
//instead of adding CSingleDocTemplate
// Add CMultiDocTemplate.
pDocTemplate = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSDIDoc),
RUNTIME_CLASS(CChldFrm),
// For Main MDI Frame change this frame window from
// CFrameWnd derivative ( i.e. CMainFrame )
// to your CMDIChildWnd derived CChldFrm.
RUNTIME_CLASS(CSDIView));
/// After this it is required to create the main frame window
// which will contain all the child windows. Now this window is
// what was initially frame window for SDI.
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
.....
}
在從CMDIFrameWnd中繼承的類CMainFrame代替CFramWnd后,所有的類都將從CMDIFrame繼承,而不是CFrameWnd,編譯運(yùn)行后你就會發(fā)現(xiàn)程序已經(jīng)從SDI變換到MDI。
注意:在CMainFram中必須將構(gòu)造函數(shù)從private改為public.否則會出錯。
幫頂~
up
還有兩個地方要注意:
1、在主框架的cpp文件中:IMPLEMENT_DYNCREATE(CMainFrame, CMDIFrameWnd)
2、ProcessShellCommand之前要自己創(chuàng)建主框架:
C/C++ code
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
m_pMainWnd = pMainFrame;
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。