Chinaunix首页 | 论坛 | 博客
  • 博客访问: 353477
  • 博文数量: 82
  • 博客积分: 3353
  • 博客等级: 中校
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-20 19:13
文章分类

全部博文(82)

文章存档

2015年(1)

2014年(1)

2013年(1)

2012年(12)

2011年(3)

2010年(25)

2009年(37)

2008年(2)

我的朋友

分类: C/C++

2012-03-22 14:52:01

一、MFC需要的函数库:
C Runtime函数库、 
DLL Import函数库(GDI32.LIB, USER32.LIB, KERNEL32.LIB)、
MFC函数库(MFC42D.LIB).

二、需要的头文件:
STDAFX.H: 预编译头文件,载入了其它MFC头文件;
AFXWIN.H: 每个Windows MFC程序都必须载入它,它以及它所载入的文件声明了所有的MFC类,内
含AFX.H,后者又载入AFXVER.H,后者又载入AFXV_W32.H,后者又载入WINDOWS.H(该
文件包含了所有API的函数声明、消息定义、常数定义、宏定义);
AFXEXT.H: 凡使用工具栏、状态栏的程序必须载入;
AFXDLGS.H: 凡使用通用型对话框的MFC程序必须载入,其内部载入COMMDLG.H.
AFXCOLL.H: 凡使用 Collections Classes(用以处理数据结构如数组、链表)之程序必须载入。
AFXDLLX.H: 凡MFC extension DLLS均需载入此文件。
AFXRES.H: MFC程序的RC文件必须载入此文件。

三、
CWinApp代表程序主体
CFrameWnd代表一个主框串口(Frame window),和CDialog同处于一个类层次

1、CWinApp用来取代WinMain在SDK程序中的地位,也就是说传统上SDK程序的WinMain所完成的工作现在由CWinApp的三个函数完成:
virtual BOOL InitApplication();
virtual BOOL InitInstance();
virtual int Run();

CCmdThread里面有记录主窗口的handle,CWinApp从 CCmdThread 派生。

2、CFrameWnd取代WndProc的地位
MFC内建了一个Message Map 机制,会把消息自动送到“与消息对应的特定函数”中去;消息和处理函数之间的对应关系由程序员指定。

3、引爆器----Application object
theApp就是Application object,每个MFC程序都有一个,而且仅有一个,当执行程序时,这个全局对象就产生,于是构造函数执行,会执行父类CWinApp的构造函数。 CWinApp的成员变量将因theApp这个全局对象的诞生而获得配置。
MFC在APPMODUL.CPP文件中已经准备好了_tWinMain()函数,并由链接器直接加到应用程序代码中,进一步调用WINMAIN.CPP中的AfxWinMain()。
AfxWinMain最先调用的是AfxWinInit();再调用InitApplication,这里的操作都是MFC为了内部管理而做的;再调用InitInstance,这里我们改写了,所以调用的是theApp中的,在这里需要手动创建创建窗口,在创建窗口的前一秒,会有注册窗口的操作。再调用ShowWindow显示窗口,并调用UpdateWindow送出WM_PAINT消息。

4、CWinApp::Run------程序的活水源头
pApp->Run()会在pApp->InitInstance()之后被调用,也在AfxWinMain()中,进入消息循环。会进一步调用CWinThread::Run(),会有个循环,调用GetMessage(),并将消息传递给窗口函数DefWindowProc, DefWindowProc会将消息传递过消息映射表,如果发现有相符项目,就调用项目中对应的函数。

5、把消息与处理函数链接在一起: Message Map 机制
消息分类:
1).标准window消息(WM_XXX)对应规则:
宏名称 对应消息 消息处理函数
ON_WM_PAINT WM_PAINT OnPaint
2).命令消息(WM_COMMAND)的一般性对应规则:////基本就是自己添加的
ON_COMMAND(, )     //现在好像都是ON_MESSAGE
3).Notification消息(由控件产生,例如:BN_XXX)对应机制的宏分好几种(因为控件种类多)
控件 宏名称 消息处理函数
    Button      ON_BN_CLICKED(, )         memberFxn
   ComboBox   ON_CBN_DBLCLK(, )        memberFxn
各个消息处理函数均以afx_msg void为函数类型。

6、callback函数
由自己设计,却由Windows系统调用的函数,统称为callback函数。
C++编译器会为类成员函数多准备一个隐藏参数this,与window callback函数的默认类型不符。解 决方法:
1).不要使用类的成员函数,使用全局变量(相当于在C语言中使用);
2).使用static成员函数。

阅读(1082) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~