【MFC】学习MFC day2 vs2019 向导创建MFC应用程序
上一篇
下一篇
我会把完整的源代码文件放在文章后面
刚开始写博客2,3天如有不对和不好的地方欢迎指正。
1、新建MFC应用
2、推荐选择MFC标准的样式
3、选择MainFrame类,当然也可选其他类
4、打开类视图
5、右击View结尾的类点属性,这个类是管界面的,(嗯我是这么理解的),
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类中会出现什么情况呢?
答案是:
这里画出来的却是 你好,世界
注意,这里并不是把世界,你好给遮盖了,而是没有执行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函数,这是一个全局函数,也就是在整个大范围内都能用。
最后,真的最后了
感谢大家的翻阅。
附加:
本篇文章源代码