目的:
在单文档中点击下拉菜单项(“读”、“写”、“装载”)切换多个视图(3个对话框:IDD_READDLG,IDD_WRITEDLG,IDD_LOADDLG)。
我参照一个网上教程作的,但是当我点击菜单却得不到响应,初始也没有切换到开始设置的对话框。
程序代码如下:BOOL CGenaralReaderApp::InitInstance()
{
。
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CGenaralReaderDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CReadDlg));
AddDocTemplate(pDocTemplate);
}
void CMainFrame::SwitchToForm(int nForm)
{
CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
{
case IDD_READDLG :
pNewActiveView=(CView*)new CReadDlg;
break;
case IDD_WRITEDLG :
pNewActiveView=(CView*)new CWriteDlg;
break;
case IDD_LOADDLG :
pNewActiveView=(CView*)new CLoadDlg;
break;
}
CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图 if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CReadDlg))
pOldActiveView->SetDlgCtrlID(IDD_READDLG); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CWriteDlg))
pOldActiveView->SetDlgCtrlID(IDD_WRITEDLG); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CLoadDlg))
pOldActiveView->SetDlgCtrlID(IDD_LOADDLG);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
delete pOldActiveView; //删除旧视图 RecalcLayout(); //调整框架窗口}
void CMainFrame::OnRead()
{
SwitchToForm(IDD_READDLG);
}void CMainFrame::OnLoad()
{
SwitchToForm(IDD_LOADDLG);
}void CMainFrame::OnWrite()
{
SwitchToForm(IDD_WRITEDLG);}
请大虾们指点迷津。
在单文档中点击下拉菜单项(“读”、“写”、“装载”)切换多个视图(3个对话框:IDD_READDLG,IDD_WRITEDLG,IDD_LOADDLG)。
我参照一个网上教程作的,但是当我点击菜单却得不到响应,初始也没有切换到开始设置的对话框。
程序代码如下:BOOL CGenaralReaderApp::InitInstance()
{
。
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CGenaralReaderDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CReadDlg));
AddDocTemplate(pDocTemplate);
}
void CMainFrame::SwitchToForm(int nForm)
{
CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
{
case IDD_READDLG :
pNewActiveView=(CView*)new CReadDlg;
break;
case IDD_WRITEDLG :
pNewActiveView=(CView*)new CWriteDlg;
break;
case IDD_LOADDLG :
pNewActiveView=(CView*)new CLoadDlg;
break;
}
CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
pNewActiveView->OnInitialUpdate();
}
SetActiveView(pNewActiveView); //改变活动的视图
pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图 if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CReadDlg))
pOldActiveView->SetDlgCtrlID(IDD_READDLG); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CWriteDlg))
pOldActiveView->SetDlgCtrlID(IDD_WRITEDLG); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CLoadDlg))
pOldActiveView->SetDlgCtrlID(IDD_LOADDLG);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
delete pOldActiveView; //删除旧视图 RecalcLayout(); //调整框架窗口}
void CMainFrame::OnRead()
{
SwitchToForm(IDD_READDLG);
}void CMainFrame::OnLoad()
{
SwitchToForm(IDD_LOADDLG);
}void CMainFrame::OnWrite()
{
SwitchToForm(IDD_WRITEDLG);}
请大虾们指点迷津。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货