1.程序向导(去掉无用功能)
向导完成后生成的类如下所示
调试一下程序,你会发现,还有很多多余功能
这些菜单都是没用的,我们的程序不会用到
2.删掉CAboutDlg和CChildView两个类,我们直接利用主框架类创建创建程序窗口
3.在CMainFrame类中删除CMainFrame诊断代码,状态栏相关代码,焦点设置代码,这些都用不到,精简程序
框架类只剩下这三个函数(注意删除OnCreate()的状态栏代码)
如此,CMainFrame类就修改好了,那现在就可以调试了吗?,调试发现,还是有错误,这是怎么回事,原来我们仅仅修改了CMainFrame类,还有一个类没动,这个类里面有CAboutDlg关于框的启动代码
删掉OnAppAbout()相关代码,调试
运行发现,怎么还有菜单呢,别着急,还有代码在CSnowApp 类的InitInstance函数中,我们可以看到
BOOL CSnowDownApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); // 初始化 OLE 库 if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); EnableTaskbarInteraction(FALSE); // 使用 RichEdit 控件需要 AfxInitRichEdit2() // AfxInitRichEdit2(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); // 若要创建主窗口,此代码将创建新的框架窗口 // 对象,然后将其设置为应用程序的主窗口对象 CMainFrame* pFrame = new CMainFrame; if (!pFrame) return FALSE; m_pMainWnd = pFrame; // 创建并加载框架及其资源 pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); // 唯一的一个窗口已初始化,因此显示它并对其进行更新 pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; }
创建并加载框架及其资源,我们打开IDR_MAINFRAME所代表的资源看看
这不就是我们刚刚看到的菜单吗,LoadFrame有什么作用呢?他是用于从资源文件中创建窗口,和Create(用于创建窗口)类似,还有一个PreCreateWindow,他是用于注册窗口类,我们可以在这修改窗口风格
4.LoadFrame和Create必须有一个,我们是创建最简窗口,删掉这行代码,删掉菜单资源,在CMainFrame中加入Create()
Create()加载哪儿呢,当然是框架类的构造函数了,运行到OnCreate()函数是窗口已经创建成功了
CMainFrame::CMainFrame() { // TODO: 在此添加成员初始化代码 Create(NULL, _T("学习笔记"), NULL, CRect(0, 0, 800, 600)); }
调试
如果需要最大化最小化按钮,在PreCreateWindow函数中修改窗口风格
最简窗口创建完毕