小盒子的小盒

基于VC++设计的菜单式的MFC编程

0
阅读(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.运行即可完成