- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
孙鑫vc笔记
第三讲
有了一定的Windows32编程知识,就能学习MFC了。
在学习MFC之前,一定要弄明白Windows32编程中的消息循环是怎么回事。MFC实际上就是对Windows API函数的封装。
?
在Windows程序设计编程中,创建一个窗口要经历下面四个过程?(如有不懂,请看博客 win32初窥)
1设计一个窗口类;
2注册窗口类;
3创建窗口;
4显示及更新窗口。
?
同样,MFC中也是一样的。只是封装了而已,很多人认为MFC很难学,看着书本能编程序,但是却编写不了自己的程序,为什么呢?因为还没有理解MFC的原理的机制。
市场上有很多有关VC++的书本,但是很少有将MFC原理讲得比较透彻的,引用孙鑫老师的话。
同样的,WinMain也是入口函数,具体的过程,请看孙鑫视频20讲之第三讲
其中,孙鑫老师开始提出的一个问题是:
在全局变量中,定义一个子类对象。。。
#includeiostream
#includestring
using namespace std;
class Person
{
public:
Person *p;
Person()
{
}
virtual void say()
{
coutPersons say()endl;
}
};
class Student:public Person
{
public:
Student()
{
}
void say()
{
coutStudents say()endl;
}
};
Student s;
int main()
{
s.p-say();//这里将调用子类的方法
return 0;
}
什么都不用做,直接用向导生成一个MFC窗口。
下面是结构图,有五个类
是这样命名的,开头的C表示Class ,C+工程名+(App,Doc,View...)
其中CMainFrame表示一个窗口(主窗体,包括标题栏,菜单...),XXApp表示运用程序,XXDOC表示文档类(加载数据,实现数据的存储与操作分离),XXView也表示一个窗口(相当于Windows的客户区)
?
下面看看MFC中类的主要继承关系:
由于继承树太大,这里只罗列了CWnd的继承关系
API中CreateWindowEx和CreateWindow几乎是一样的,Ex表示扩展,多了一个参数
下面用API模拟CWnd
just模拟
class CWnd
{
public:
BOOL CreateEX(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // menu handle or child identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // window-creation data
);
BOOL ShowWindow(int nCmdShow);
BOOL UpdateWindow();
public:
HWND m_hWnd;
};
BOOL CWnd::CreateEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // registered class name
LPCTSTR lpWindowName, // window name
DWORD dwStyle, // window style
int x, // horizontal position of
文档评论(0)