首先谢谢CSDN中XDJM给我这些天给我地帮助,不过小弟才疏学浅,还是又不少问题,希望能得到各位地帮助。
我基于单文档建了一个工程,遇到如下问题:
1:现在要想通过菜单触发再建立一个视图,
2:希望该新建地视图中可以添加编辑框,按钮等控件
怎么做呢?
我基于单文档建了一个工程,遇到如下问题:
1:现在要想通过菜单触发再建立一个视图,
2:希望该新建地视图中可以添加编辑框,按钮等控件
怎么做呢?
解决方案 »
- 人脸识别的大致步骤(不含检测与眼睛定位)
- 拖动客户区窗口时,非子无模式对话框也一起移动.请问可以实现吗?
- Teechart Pro ActiveX 8.005在三维模式中,如和给Depth轴增加箭头
- 这种情况,如何做数据访问互斥为好,重点是速度第一!
- vc++6.o做的对话框,但是打开子对话框,子对话框为什么没有边框??
- 状态栏显示Icon的问题
- 这里的图像处理文章比较多,bmp转换、灰度处理、摄像头等等都有
- 第一次用VISUAL.NET写一个数据库作业出现的问题,求教
- 懂网络编程的帮俺回一下,如何修改本机的IP(在局域网中),都用到哪些函数?
- 请问VC是否可以为LINUX搞开发,是否方便?
- Windows API编程和数据结构视频教程,赶紧下载
- windos编程术语,盼高手指点
两个放在一起吗?那你就分割视图啊?
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMultiViewDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CView1));
AddDocTemplate(pDocTemplate);4 利用资源编辑器,添加几个菜单,并添加相应的消息处理函数:
void CMainFrame::OnViewView1()
{
SwitchToForm(IDD_MULTIVIEW_FORM);
}void CMainFrame::OnViewView2()
{
SwitchToForm(IDD_MULTIVIEW_FORM2);
}void CMainFrame::OnViewView3()
{
SwitchToForm(IDD_MULTIVIEW_FORM3);
}void CMainFrame::OnViewView4()
{
SwitchToForm(IDD_MULTIVIEW_FORM4);
}在SDI中CFrame的派生类即CMainFrame控制着所有的视图,而且它允许用户通过消息处理进行视图的切换。进行视图切换的原理很简单,只是断开和旧视图的连接并把他删除,创建一个新视图,将文档和它相连,设置几个标志,然后显示新视图,SwitchToForm函数是进行视图切换的代码函数。void CMainFrame::SwitchToForm(int nForm)
{
//CDocument* pDoc = GetActiveDocument();
CView *pOldActiveView=GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_MULTIVIEW_FORM :
pNewActiveView=(CView*)new CView1;
break;
case IDD_MULTIVIEW_FORM2 :
pNewActiveView=(CView*)new CView2;
break;
case IDD_MULTIVIEW_FORM3 :
pNewActiveView=(CView*)new CView3;
break;
case IDD_MULTIVIEW_FORM4 :
pNewActiveView=(CView*)new CView4;
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(CView1))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView2))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM2);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView3))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM3);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView4))
pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM4); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
delete pOldActiveView; //删除旧视图RecalcLayout(); //调整框架窗口
}