MFC框架程序剖析(5)
2015-10-12 20:38
387 查看
最后一个讲解,我们来讲一个按钮的例子加深一下对MFC框架的理解吧。
首先,我们知道关于按钮的类是CButton,派生于CWnd,也是一个窗口类。我们利用这个类定义一个窗口类对象,创建完对象之后,你要产生这个窗口的话还要用到我们之前提过的CreateEx函数,从而生成窗口。
那创建在哪里呢?我们再把图拿出来:
明显,我们想把按钮显示在视窗口上,那么MFC又是采用了一种消息映射机制(可以简单理解成产生消息之后我们可以捕获到这个消息并且去执行相应的操作),那么我们可以在视窗口生成的时候同时生成按钮,这个时候我们注意:
1.视窗口生成的时候会产生WM_CREATE这个消息,然后我们需要一个函数来响应这个消息,那就是OnCreate这个函数啦,我们可以在这里生成我们的按钮。
2.但是我们在CTESTView这个类的主文件(.c)并没有找到OnCreate这个函数,默认是不给的,这个时候我们自行添加,在CLASS VIEW上右键选择CLASS Wizard,选择MESSAGE,这时候我们就可以添加函数啦。
3.添加完之后我们在CTESTView.c这个文件里可以看到OnCreate函数,然后我们来生成这个按钮:
(1)CButton btn;定义一个按钮对象,然后调用其btn.Create。
(2)若是在OnCreate函数里面定义的话,我们可以看到视窗口并没有生成按钮,因为btn此时是个局部对象,函数执行完它的生命周期也就结束了。
(3)在CTESTView这个类的声明中定义,btn便为全局对象了,这时在OnCreate函数用使用btn.Create(),视窗口便可以看到我们的按钮了。
4.最后,看一下Create函数的使用:
BOOL
Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD
dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL);
总结:看完实操一遍加深理解,推荐书:孙鑫老师的VC++深入了解,理解完框架和消息映射机制之后后面的学习也就是熟悉使用其他的类而已了~~
首先,我们知道关于按钮的类是CButton,派生于CWnd,也是一个窗口类。我们利用这个类定义一个窗口类对象,创建完对象之后,你要产生这个窗口的话还要用到我们之前提过的CreateEx函数,从而生成窗口。
那创建在哪里呢?我们再把图拿出来:
明显,我们想把按钮显示在视窗口上,那么MFC又是采用了一种消息映射机制(可以简单理解成产生消息之后我们可以捕获到这个消息并且去执行相应的操作),那么我们可以在视窗口生成的时候同时生成按钮,这个时候我们注意:
1.视窗口生成的时候会产生WM_CREATE这个消息,然后我们需要一个函数来响应这个消息,那就是OnCreate这个函数啦,我们可以在这里生成我们的按钮。
2.但是我们在CTESTView这个类的主文件(.c)并没有找到OnCreate这个函数,默认是不给的,这个时候我们自行添加,在CLASS VIEW上右键选择CLASS Wizard,选择MESSAGE,这时候我们就可以添加函数啦。
3.添加完之后我们在CTESTView.c这个文件里可以看到OnCreate函数,然后我们来生成这个按钮:
(1)CButton btn;定义一个按钮对象,然后调用其btn.Create。
(2)若是在OnCreate函数里面定义的话,我们可以看到视窗口并没有生成按钮,因为btn此时是个局部对象,函数执行完它的生命周期也就结束了。
(3)在CTESTView这个类的声明中定义,btn便为全局对象了,这时在OnCreate函数用使用btn.Create(),视窗口便可以看到我们的按钮了。
4.最后,看一下Create函数的使用:
BOOL
Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD
dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL);
总结:看完实操一遍加深理解,推荐书:孙鑫老师的VC++深入了解,理解完框架和消息映射机制之后后面的学习也就是熟悉使用其他的类而已了~~
相关文章推荐
- leetcode 28:Implement strStr()
- 美团、去哪儿、奇虎360独角兽公司技术薪资分析
- 在ubuntu下,把安装的中文输入法切换出来
- python编码问题初探
- 面试题:异或去重
- 迷宫问题(顺序栈)
- [置顶] UML——九种图 关系
- DB2 里的mongoDB
- 测试工具在测试工作中是什么地位?
- C++对C的扩充(体现在面向过程程序设计部分)
- [mysql] mysql如何实现更新一条记录中某个字段值的一部分呢?
- 动手学习TCP:4种定时器
- 【笔试】57、确定一个字符串的所有字符是否都不同
- MySQL中数据操作DML
- Android中Parcelable接口用法http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html
- Unity UIButton切换相应的UI页面动态加载
- 数制转换问题(顺序栈)
- 什么是软件测试,软件测试的目的?
- 【Foundation-26-1】#import <Foundation/NSDictionary.h>字典,旧
- 顺序栈——C++实现