MFC编程讲稿

2025-03-11 版权声明 我要投稿

MFC编程讲稿(精选2篇)

MFC编程讲稿 篇1

1、将C语言变量简单重新定义 UINT、INT(32位,4字节)

LONG、DWORD(32位,4字节)WPARAM、LPARAM(32位,4字节)SHORT、WORD(16位,2字节)LONG、LRESULT BOOL(TRUE、FALSE)PINT

PSTR、LPSTR、LPCSTR(字符串指针,只读和可写)

//

2、H开头,Windows句柄类型变量 HANDLE of Windows =>HWND HANDLE of Instance =>HINSTANCE HANDLE of Icon =>HICON

//3结构体类型

SIZE、POINT、RECT

MFC所有封装类一共有200多个,但是MFC的内部技术不只是简单地封装。MFC内部总共有六大关键技术,构架起了整个MFC开发平台。

一、MFC的六大关键技术包括: a)MFC程序的初始化过程: b)消息映射机制;

c)运行时类型识别(RTTI); d)动态创建; e)永久保存; f)消息传递;

六大关键技术的目的是为了提高开发效率,开发者只需要在局部做简单的修改,即可处理大部分窗口事物。

二、SendMessage和PostMessage函数的功能:

a)能够向指定的窗口内发送窗口消息,既可以是本进程内窗口也可以是其他进程的; b)既可以发送系统内部消息,消息编号的范围是:1-WM_USER-1; 例如:WM_LBUTTONDONW,WM_MOUSEMOVE等; c)也可以发送非系统消息(开发者定义的消息),范围是WM_USER-0x7FFF。

三、SendMessage和PostMessage两个函数的区别是:

a)SendMessage是阻塞型函数,PostMessage是非阻塞型函数:

SendMessage用于调用指定窗口的内部程序,直到窗口程序处理完成以后再返回: PostMessage是将一个消息寄送到一个窗口内的消息队列后就立即返回。b)两个函数的返回值不同:

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM,lParam);BOOL PostMessage(HWND hWnd,UNIT Msg,WPARAM wParam,LPARAM,lParam);SendMessage的返回值依赖于消息处理函数

c)跨线程或者跨进程发送消息,推荐使用PostMessage函数。

一、更具主窗口类型,MFC软件工程可以分为以下几种构架模型:

1、SDI(Single Document Interface):单文档界面,一个主框架窗口下只能编辑一份文档。例如:记事本和画笔等。

2、MDI(Multiple Document Interface):多文档界面,一个主框架窗口下可以同时编辑多份文档。

例如:VC++6.0,Photoshop等软件。

3、基于对话框的软件模型:主窗口是通过资源管理器,在对话框模板内摆放控件编辑而成的。

多数用于开发小规模软件,例如:任务管理器。

4、其他自定义窗口做主窗口:主窗口既不是框架也不是对话框,而是直接开发通用窗口类CWind而成。

例如:输入法窗口、QQ和360软件等,有时这类软件都可以使用框架和对话框模式来代替开发而成。

对话框常用消息映射函数:

二、对话框初始化消息:

1、WM_CREATE:通用窗口初始化消息

窗口还未显示出来,只有父窗口,子窗口还没创建

2、WM_INITDIALOG:对话框窗口专用消息

子窗口已经全部创建完成,可以调用和操作子窗口

三、对话框关闭过程消息:

1、WM_SYSCOMMAND:管理所有系统菜单和系统按钮消息 包括通过最大化、最小化、移动、大小和关闭等

2、WM_CLOSE:是WM_SYSCOMMAND消息的一个专用关闭的分支 再次消息处理过程可以取消本次关闭任务

3、IDCANCEL按钮消息:不但用于按钮回调消息,也是系统按钮关闭窗口的回调 执行真正关闭对话框函数是EndDialog,在此消息处理过程可以取消本次关闭任务

4、WM_DESTROY:通用窗口销毁消息

窗口已经在屏幕中消失了,但是自身窗口和窗口内的控件都还可以调用 在此消息处理过程可以取消本次关闭任务

四、非模式对话框:

1、在调用EndDialog函数关闭时,非模式对话框只是隐藏没有真正关闭;

2、在调用DestroyWindow函数关闭时,只是隐藏没有真正关闭;

3、DestroyWindow函数是通用摧毁窗口的函数,适用于对话框、控件、框架和视图等。

一个MFC软件工程由至少一个CWind派生类和一个CWinApp派生类,因此这两个类是MFC工程中最重要的两个类。

一、CWind成员函数:主要就是一个核心成员变量m_hWnd。

1、DestroyWindow:摧毁窗口。

2、Create和CreateEx:创建窗口,CreateEx创建时可以指定扩展风格。

3、获取窗口句柄:

a)pWnd->m_hWnd:直接调用前最好判断一下指针是否为空。b)operator HWND():自动类型转换,将对象转换为句柄。

c)GetSafeHwnd():可以避免的a方法,因为指针为空造成软件崩溃。

4、由句柄转化为CWnd对象:

a)CWnd::FromHandle:生成一个临时性窗口类指针

b)Attach和Detach:为一个CWnd对象嫁接和移除窗口句柄; c)SubclassWindow和UnsubclassWindow:子类化和反子类化; d)SubclassDlgItem:子类化指定ID对应的控件窗口。

5、获取和设置窗口信息:

a)GetWindowText和SetWindowText:获取和设置窗口的标题文字。b)GetStyle和ModifyStyle:获取和设置窗口的基础风格。c)GetExStyle和ModifyStyleEx:获取和设置窗口的扩展风格。

6、计时器: a)SetTimer: b)KillTimer:

7、窗口操作: a)ShowWindow: b)EnableWindow: c)MoveWindow: d)CenterWindow:

二、CWinApp类成员变量:

三、CWinApp类成员函数:

//匈牙利命名法: //变量:

MFC编程讲稿 篇2

1 VARIANT结构变量

程序及Active X控件对象数据成员之间的访问使用该变量,对Active X控件对象数据成员的访问必须对VARIANT变量对象进行设置。VARIANT变量对象可以表达几乎所有类型数据,其中各种类型数据成员是一个UNION结构体。具体存放类型由vt成员(VARTYPE枚举类型可转化为long类型)指出,像字符串(Unicode)和安全数组长度不定的数据只保存指针。数据库中常用的数据类型有:文本、货币、日期/时间、数字、查阅向导及备注(后两种类型实际上为文本类型),这些数据在VARIANT变量对象中对应的数据类型、数据成员及成员类型见表1:

说明:(1)可以把双字节字符串(常数串:L"….")直接赋与CString变量对象;CString对象用方法AllocSys String()在系统区产生一个字串,返回值为BSTR类型,使用完后用函数Sys Free String(VARIANT变量名.bstr Val)释放字符串内存。BSTR数据类型可直接赋与CString变量。

(2)CY是一个三个数据成员的结构类型(成员名为Hi、int64及Lo),一般设置int64成员(long类型),存储数比实际值大10000倍。COle Currency(VARIANT变量名)生成COle Currency对象变量。

(3)DATE类型实际上是一个double类型,整数部分表示日期,小数部分表示时间。COle Date Time(VARIANT)可生成COle Date Time对象,该对象的m_dt数据成员为DATE类型。

2 MFC中Active X控件的成员访问

设计时在窗口资源编辑器中右击需要Active X控件对象处理数据的窗口,弹出菜单中执行“插入Active X控件”命令,在弹出对话框中选择在本机上已注册的控件(如包含需要控件的文件未注册,应先注册),被选择控件的对象设计图案将出现在窗口上,右击该图案可初始控件对象属性。控件对象生成后其控件代码已加入工程中,但访问对象没有产生。在‘建立类向导/Member Variables’中给控件对象生成一个控件访问对象[2],访问对象的定义(.h)和实现(.cpp)代码文件会加入工程中,有要通过访问对象访问Active X控件对象成员的代码文件中应#include包含这些头文件。一般访问对象与控件对象交换数据的变量类型是VARIANT类型。

3 显示数据控件手工绑定ADO数据控件

在VB中显示数据控件对象绑定ADO后,绑定控件与被绑定控件(ADO)对象之间可自动协调工作。在MFC中则不然,主要是当ADO移动记录,许多绑定ADO数据控件对象的显示控件对象(Data Grid除外)不能正确的显示数据,以及显示控件对象的数据不能正确写入当前记录集。解决这个问题的方法是进行手工编程设定,即ADO移动记录时用其访问对象把当前记录的字段值从记录集中读出,再次写入显示数据控件对象;或用显示数据控件访问对象的属性值写入ADO记录集。

ADO当前记录移动时产生Move Complete事件[1],该事件的处理过程为On Move Complete Adodc#(#为数字,表示不同的ADO对象),把当前记录字段值重设入显示数据控件对象的代码放入其中。窗口初始时,其上的控件对象也在初始期,这时ADO控件对象会多次发出Move Complete事件,而窗口和控件对象没有初始完成,如果用ADO访问对象读当前记录字段会出现程序中断。可定义一个全局变量(如:bool Ado Init Complete=FALSE),无视对应的窗口(Dialog窗口),窗口初始完成后会发出WM_INITDIALOG;有视对应的窗口,对应视会执行On Initial Update过程。在这些过程中把Ado Init Complete设置为TRUE。On Move Complete Adodc#过程中,只有当该变量为TRUE时才能通过ADO访问对象读写。显示数据控件的数据写入记录集的代码可放入菜单、按钮及WILLMOVE事件处理过程中[3]。

4 引用ADO控件记录集对象增加新记录的Add New方法

ADO访问对象的记录集对象实现了一个Add New方法,但是该方法带有二个VARIANT参数,参数的设置极不好理解,因而不能使用。ADO控件的记录集对象本身有一个无参数的Add New方法,只是访问对象没有实现该方法,编程直接引用这个方法成为必然。

大多数Activ X控件有IUnknown和IDispatch接口,从ADO访问对象可以得到ADO记录集对象的I-Unknown接口的指针,通过该接口获得IDispatch接口指针。下面是直接引用ADO记录集对象Add New方法的函数Add New Recorder代码:

5 数据库错误例外处理

执行Add New、Update及Update Batch把当前记录缓冲区的字段数据写入数据库和执行Delete方法删除记录,由于数据库数据有效性检查会导致数据库操作错误例外,必须用Cancel、Cancel Update、Cancel Batch方法取消操作,取消操作代码放在例外处理代码段中。MFC有多种错误例外处理,这里访问对象是COle Dispatch Driver类派生对象,通过IDispatch接口实现成员访问,出现的错误例外为COle Dispatch Exception,用数据库例外捕捉不到这些错误。

6 结束语

用上述方式使用Active X控件进行MFC数据库应用编程,代码的重用性大大提高,程序的稳定不会降低。手工绑定数据控件会增加一些源代码,如果把通过ADO访问对象读写记录集字段的基本操作编写为函数,放入头文件中,比用其它方式编写的MFC数据库应用程序的界面质量与编写代码数之比要高。

摘要:MFC数据库应用编程时,主要使用应用程序向导产生的记录集类和记录视类,或者使用MFC类库提供的有关类两种方式编程,没有充分利用现有的ActiveX控件。因为许多ActiveX绑定数据控件与ADO数据控件不能自动协调工作即不能正确显示数据,如TextBox、DataCombo及DTPICKER;有一些ADO控件方法在对应的访问对象中没有提供,如不带参数的AddNew方法。手工绑定数据控件方式使ActiveX控件之间失去的自动协调得以恢复。使用ActiveX控件编程,代码的重用性大大提高,程序界面质量进一步的好转。

关键词:Visual c++,Microsoft Foundation Class(MFC),数据库应用编程,AddNew,ActiveX数据绑定控件,ActiveX Data Objects(ADO)

参考文献

[1]扬长兴,韩滨,刘雄鹰,等.Visual Basic程序设计教程[M].北京:中国铁道出版社,2011.

[2]李英.Visual c++编程与项目开发[M].上海:华东理工大学出版社,2008.

上一篇:写赞美水仙花的作文700字下一篇:五四青年节领导讲话