【MFC】学习MFC day2 vs2019 向导创建MFC应用

【MFC】学习MFC day2 vs2019 向导创建MFC应用程序

上一篇
下一篇
我会把完整的源代码文件放在文章后面
刚开始写博客2,3天如有不对和不好的地方欢迎指正。
1、新建MFC应用
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第1张图片
2、推荐选择MFC标准的样式
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第2张图片
3、选择MainFrame类,当然也可选其他类
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第3张图片
4、打开类视图
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第4张图片
5、右击View结尾的类点属性,这个类是管界面的,(嗯我是这么理解的),
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第5张图片
6、在这里就可以快速添加消息映射函数和对应的宏,就不用像我上一篇博客里面需要自己查手册后手动添加
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第6张图片

接下来将是介绍OnDraw()和OnPaint(),以及OnCreate()与Create()的区别

首先
OnDraw()和OnPaint()都是关于窗口绘图的消息映射函数,具有类似的作用。

//有OnPaint()后OnDraw()里面的代码块将不会执行
void CMFCApplication1View::OnPaint()
{
	CPaintDC dc(this); // device context for painting
					   // TODO: 在此处添加消息处理程序代码
					   // 不为绘图消息调用 CView::OnPaint()
	dc.TextOutW(100,100,TEXT("你好,世界"));
	
}
void CMFCApplication1View::OnDraw(CDC* pDC)
{
	MessageBox(TEXT("世界,你好"));//有OnPaint()后此代码块将不会执行
	CMFCApplication1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	// TODO: 在此处为本机数据添加绘制代码
	pDC->TextOutW(100, 100, TEXT("世界,你好"));
}

但是,当这2个函数同时出现在CMFCApplication1View类中会出现什么情况呢?
答案是:
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第7张图片

这里画出来的却是 你好,世界
注意,这里并不是把世界,你好给遮盖了,而是没有执行OnDraw(CDC* pDC)里面的代码块
MessageBox(TEXT(“世界,你好”)); 这个消息框并没有如期的弹出来

之后是
OnCreate与Create的区别:
Create()负责注册并产生窗口,像动态创建控件中的Create()一样,窗口创建之后会向操作系统发送WM_CREATE消息。
OnCreate()不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置等。
OnCreate()是消息WM_CREATE的消息响应(映射)函数。

当框架调用CreateEx (Create 以Ex结尾的是扩展函数 )函数创建窗口时,会首先调用PreCreateWindow(这个函数在CMainFrame类中已经声明)函数。
通过修改传递给PreCreateWindow的结构体类型参数CREATESTRUCT,应用程序可以更改用于创建窗口的属性。在产生窗口之前让程序员有机会修改窗口的外观。
最后再调用CreateWindowEx函数完成窗口的创建。

最后还有一点
这是层次结构图,MessageBox的作用域是在CWindCWnd (这个我已经查过资料了),也就是说CWinApp 这些地方是不能用MessageBox函数的,所以还有种函数是以Afx开头的函数,比如AfxMessageBox函数,这是一个全局函数,也就是在整个大范围内都能用。
【MFC】学习MFC day2 vs2019 向导创建MFC应用_第8张图片

最后,真的最后了

感谢大家的翻阅。

附加:
本篇文章源代码

你可能感兴趣的:(学习MFC)