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函数中修改窗口风格
最简窗口创建完毕