基于VC++设计的菜单式的MFC编程
0赞
发表于 7/26/2010 10:59:01 PM
阅读(2635)
作者:小盒子 于2007年1月10日大连
声明:该文档中有部分图片未能上传,若需要请与我联系.
1. 首先新建->项目->MFC应用程序,选择MDI(多文档)方式,其他默认即可。工程的名为heTestMFC
2. 在heTestMFC.app中BOOL CheTestMFCApp::InitInstance();中删除
//CMultiDocTemplate* pDocTemplate;
//pDocTemplate = new CMultiDocTemplate(IDR_TerminalConfiguTYPE,
// RUNTIME_CLASS(CTerminalConfigureDoc),
// RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
// RUNTIME_CLASS(CHeTerConfView));
//if (!pDocTemplate)
// return FALSE;
//AddDocTemplate(pDocTemplate);
表示删除弹出来的子对话框
3. 在主菜单中新建子菜单项目如图,并设置其ID值,每个子菜单能设置ID主菜单不能设置ID,但每个主菜单必须包含一个子菜单。否则编译不通过。
4. 资源对话框->Dialog点击右键,新建一个Dialog->IDD_FORMVIEW,并在其属性对话框中设置其ID。
5. 在新建立的formview中点击右键找到”添加类”选项
在该对话框中添加类名CheViewLedDisplay并选择基类类型这里要选择CFormView。并点击“完成“。
6. 将#include "heViewLedDisplay.h"复制到heTestMFC.app文件中。
7. 在heTestMFC.h->Pubilc中设置一下两个变量
CMultiDocTemplate* m_pTemplateTheNine;
CDocument* m_pDocTheNine;
8. 在heTestMFC.app中新写一个函数为BOOL CheTestMFCApp::InitDocTemplate()并在其heTestMFC.h中声明改函数。
9. 在BOOL CheTestMFCApp::InitDocTemplate()函数中添加以下语句
BOOL CTerminalConfigureApp::InitDocTemplate()
{
{
m_pTemplateTheNine = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTerminalConfigureDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CheViewLedDisplay));//在此处添加formview的类名
AddDocTemplate(m_pTemplateTheNine);
m_pDocTheNine = NULL;
}
{//其他窗口在下面继续以此类推
m_pTemplateTheTwo = new CMultiDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTerminalConfigureDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CheViewWorkStatus));
AddDocTemplate(m_pTemplateTheTwo);
m_pDocTheTwo = NULL;
}
return TRUE;
}
该函数需要在BOOL CheTestMFCApp::InitInstance()中调用InitDocTemplate();
10. 为该子菜单添加事件处理程序,然后弹出来一个对话框,直接点击“编辑代码即可“然后在heTestMFC.app中自动生成一个函数
void CTerminalConfigureApp::OnFileLeddisplay()
{
// TODO: 在此添加命令处理程序代码
}
在中间添加一下代码
void CTerminalConfigureApp::OnFileLeddisplay()
{
// TODO: 在此添加命令处理程序代码
if( m_pDocTheNine == NULL)//窗口关闭时需要将此变量赋NULL 值
{
theApp.CloseAllDocuments(FALSE);
m_pDocTheNine = (CTerminalConfigureDoc *)m_pTemplateTheNine->OpenDocumentFile(NULL);
m_pDocTheNine ->SetTitle("显示板调试");
POSITION posVIew = m_pDocTheNine->GetFirstViewPosition();
CView * pShowView = m_pDocTheNine->GetNextView(posVIew);
CChildFrame * pChildFram = (CChildFrame *)pShowView->GetParent();//->SetActiveWindow();
pChildFram->ActivateFrame();
pChildFram->MDIMaximize();
return;
}
POSITION posVIew = m_pDocTheNine->GetFirstViewPosition();
CView * pShowView = m_pDocTheNine->GetNextView(posVIew);
CChildFrame * pChildFram = (CChildFrame *)pShowView->GetParent();//->SetActiveWindow();
pChildFram->ActivateFrame();
return;
}
注意修改紫色的变量名。
然后在heViewLedDisplay.app中修改析构函数
CheViewLedDisplay::~CheViewLedDisplay()
{
theApp.m_pDocTheNine=NULL;
}
释放刚才建立的formview窗体
11.运行即可完成
