如何用MFC创建最简窗口


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函数中修改窗口风格

最简窗口创建完毕


  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值