MFC知识点(自己整理的,只供参考)
MFC 有关知识
1. 标题栏自绘在网上搜索了很多关于标题栏自绘的例子,但是大都存在很多的问题,多是没有自绘彻底,比如出现闪烁,会出现默认风格最大化等按钮的显示,不过其中有份代码处理的比较好,至于出于什么地方想不起来了,下面会一并给出源代码(源代码的下载地址在评论部分给出),本例是在这份源代码的基础上作的改进,主要有以下几个方面:(1)标题栏添加了颜色渐变的效果,使之看上去有立体感,其实就是在绘制位图资源时填充渐变色而已;(2)当我们点击最大化,最小化或关闭按钮的时候,只有当左键弹起时才能起效;(3)当窗口失去焦点时,标题栏应有对应的反映,即改变标题文字和最大化等按钮的颜色;(4)使用了CToolTipCtrl控件,实现了当我们将鼠标放到最大化等按钮上时,显示文字提示;(5)可以设置对话框标题栏的左上角和右上角是以圆角显示还是以直角显示,调用SetTitleRectStyle方法即可实现;(6)使用FrameRect函数绘制了对话框的边线;(7)对原有的代码做了一些简化的处理;(8)将对话类封装了一下,即CColorTitleDlg,要实现多个该风格的对话框,只需继承该对话框类即可。
2. 双缓冲显示位图CDC MemDC; //首先定义一个显示设备对象CBitmap MemBitmap;//定义一个位图对象//随后建立与屏幕显示兼容的内存显示设备MemDC.CreateCompatibleDC(NULL);//这时还不能绘图,因为没有地方画//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);//将位图选入到内存显示设备中//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//先用背景色将位图清除干净,这里我用的是白色作为背景//你也可以用自己应该用的颜色MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));//绘图(如果是现成的位图,只要LoadBitmap一下资源就可以直接贴图了)MemDC.MoveTo(……);MemDC.LineTo(……);//将内存中的图拷贝到屏幕上进行显示pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);//绘图完成后的清理MemBitmap.DeleteObject();MemDC.DeleteDC();双缓冲显示位图的原理网上介绍的比较多,主要思路如下:本例中的CTestBitmapShowDlg主测试类中位图的显示,以及CColorTitleDlg标题栏重绘类中标题栏的贴图操作都是使用双缓冲来实现,以避免界面的闪烁。
MFC知识点(自己整理的,只供参考)
知识点:不是很全面,只供参考第一章Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。
Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。
在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。
Windows把为这种复杂对象所定义的标识叫做句柄。
常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄事件的描述是一个消息消息的结构:typedef struct tagMSG{HWND hwnd; //产生消息的窗口句柄UINT message;//消息的标识码WPARAM wParam;//消息的附加信息1LPARAM lParam;//消息的附加信息2DWORD time; //消息进入消息队列的时刻POINT pt; //表示发送该消息时鼠标的位置}MSG;消息循环:while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回{TranslateMessage(&msg);//把键盘消息翻译成字符消息DispatchMessage(&msg);//把消息派发给Windows系统创建窗口的三个步骤:注册窗口类:RegisterClass(&wc);创建窗口:hwnd=CreateWindow( lpszClassName,"Windows",WS_OVERLAPPEDWINDOW,120,50,800,600,NULL, NULL, hInstance,NULL);显示窗口:ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);大题:用函数封装Windows程序(P16)第二章类封装:窗口类:class CFrameWnd{public:HWND hWnd;///数据成员public:int RegisterWindow(); //定义及注册窗口类void Create(LPCTSTR lpClassName,LPCTSTR lpWindowName);//创建窗口void ShowWindow(int nCmdShow);//显示与更新窗口void UpdateWindow();};应用程序类:class CWinApp{public:CFrameWnd*m_pMainWnd;//以窗口类的对象作为数据成员public:BOOL InitInstance (int nCmdShow);//在初始化函数中创建及显示窗口int Run();//消息循环};窗口函数的封装——消息映射用DECLARE_MESSAGE_MAP来声明消息映射表用BEGIN_MESSAGE_MAPBEGIN_MESSAGE_MAP(类名称,基类名称)ON_XXXX 例ON_WM_PAINT()END_MESSAGE_MAP来实现消息映射表大题:类封装Windows应用程序第三章应用程序的框架由两个对象组成:应用程序类CWinApp的派生类对象和框架窗口类CFrameWnd的派生类对象,后者作为一个成员对象嵌在前者之中。
mfc要点(自己总结的)
将按钮置为选中状态(IDC_RADIO1为按钮ID):
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
编辑框控件(IDC_RESULT)显示数据(UINT rs):
SetDlgItemInt(IDC_RESULT,rs,FALSE);
添加控件(其ID不能为默认状态,否则无法关联)与其变量关联(在CDialog::DoDataExchange(CDataExchange* pDX)中):
DDX_Control(pDX, IDC_SHOWBMP(控件ID), pStatic(控件变量名,类型为CStatic));
控件显示图片(pStatic为图片控件变量):
if(hDll!=NULL)
{
lpFun pShowDlg=(lpFun)GetProcAddress(hDll,"ShowDlg"); //ShowDlg为导出的函数,pShowDlg为获得的此函数的指针
if(pShowDlg!=NULL)
pShowDlg(); //执行即可
暂停(挂起)线程(pFront为指向线程的指针):
pFront->SuspendThread();
恢复(唤醒)线程:
pFront->ResumeThread();
令窗口无效(程序重绘窗口,即调用OnDraw):
Invalidate();
InvalidateControl(); //用于控件
//此处添加导出函数的代码
}
dll导出类接口(位于头文件中,CRichStaticText为导出的函数):
class AFX_EXT_CLASS CRichStaticText : public CStatic /ec(dllexport))即可
mfc 知识点总结
mfc 知识点总结MFC库的基本组成包括以下几个部分:1. CObject类:是所有MFC类的基类,提供了对象的基本功能,包括内存管理、类型信息、对象的打印和序列化等。
2. CWnd类:是窗口类的基类,封装了Windows窗口的创建、显示、消息处理等功能。
3. CFrameWnd类:是框架窗口类,派生自CWnd类,封装了应用程序的主窗口,提供了菜单、工具栏、状态栏等UI组件。
4. CDocument类和CView类:分别是文档类和视图类,用于管理应用程序中的文档和视图。
文档类负责文档的打开、保存、关闭等操作,视图类负责文档内容的显示和交互。
5. CWinApp类:是应用程序类的基类,封装了应用程序的初始化、消息循环、资源管理等功能。
MFC库提供了丰富的类和函数,用于处理Windows应用程序的各个方面,下面将对MFC的一些重要知识点进行总结。
1. 消息处理在MFC应用程序中,窗口的消息处理是至关重要的。
MFC提供了消息映射机制来进行消息处理。
通过DECLARE_MESSAGE_MAP宏和BEGIN_MESSAGE_MAP/END_MESSAGE_MAP 宏,在类中声明消息处理函数并将消息与处理函数进行映射。
例如:```cpp// 声明消息处理函数afx_msg void OnMouseMove(UINT nFlags, CPoint point);// 映射消息到处理函数BEGIN_MESSAGE_MAP(CMyWnd, CWnd)ON_WM_MOUSEMOVE()END_MESSAGE_MAP()```2. 对话框对话框是Windows应用程序中常用的界面元素,用于与用户进行交互。
MFC提供了CDialog类和CDialogEx类来封装对话框。
开发者可以使用资源编辑器创建对话框模板,然后通过类向导生成对话框类。
对话框类中可以处理控件的事件,并通过DoModal函数或Create函数来显示对话框。
关于MFC的有些知识
关于MFC的有些知识实验⼀1、在VC++中,⼯程与各种源⽂件之间是什么关系?解答:⼯程的实质是⼀些相互关联的源⽂件的集合,可以把项⽬理解成⼀个⼯作任务, 开发环境中,⼯程包含在⼯作区间中,⼀个⼯作区可以管理多个⼯程2、⼀个VC++⼯程下会有3个⽂件夹,这3个⽂件夹分别是什么?以.cpp为后缀的⽂件会添加到哪个⽂件夹中?以.h为后缀⽂件会添加到哪个⽂件夹中?解答:分别是head Files ,Sourse Files, Resourse Files ,.cpp放在Sourse ⽂件⾥⾯,.h放在Head Files⽂件⾥3,以win32 console application⼯程为例,简述⼯程的建⽴,⽂件的添加,⼯程的编译和链接及⼯程的执⾏过程。
解答:这个就是win32 console application⼯程的实例验证过程。
实验⼆1.简述Windows应⽤程序的特点。
解答:⼀.事件驱动的程序设计它是⼀种“被动”式程序设计⽅法,程序开始运⾏时,处于等待⽤户输⼊事件状态,然后取得事件并作出相应反应,处理完毕⼜返回并处于等待事件状态。
⼆. 消息循环与输⼊消息是⼀种报告有关事件发⽣的通知。
· 事件驱动是靠消息循环机制来实现的。
· Windows应⽤程序的消息来源有以下四种:(1)输⼊消息(2)控制消息(3)系统消息(4)⽤户消息三. 图形输出Windows程序的所有输出都是图形,字符也被作为图形来处理。
· GDI提供两种基本服务:创建图形输出和存储图象。
· 绘图函数分为三类:⼀是⽂字输出;⼆是⽮量图形函数,⽤于画线、圆等⼏何图形;三是光栅(位图)图形函数,⽤于绘制位图。
四. ⽤户界⾯对象⽤户界⾯对象:窗⼝边框系统菜单框标题栏菜单栏⼯具条客户区垂直滚动条和⽔平滚动条状态栏图标光标插⼊符对话框控件消息框五.资源共享· 常见的资源包括:设备上下⽂,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插⼊符号,通信端⼝,电话线等。
MFC教程入门知识全集
说明:本书稿为张孝祥、袁龙友两位老师在2000年依据张孝祥的vc++讲课记录整理,由于时间关系,仅仅是写成了草稿,欢迎大家使用!第1章 掌握C++1.1 类的定义与应用1.1.1 结构的定义1.1.2 类的定义1.1.2.1 类与结构1.1.2.2 类的使用 (例子代码EX01-00)1.2 函数的重载1.2.1 重载参数个数不同的函数 (例子代码EX01-01)1.2.2 重载参数数据类型不同的函数 (例子代码EX01-02)1.3 构造函数与析构函数1.3.1 构造函数1.3.2 析构函数 (图1,没有)(图2,没有)1.4 this指针的引用1.5 类的继承与protected访问修饰符1.5.1单一继承 (例子代码EX01-03) (图x,没有)1.5.2多重继承1.6 虚函数与多态性1.7类的书写规范1.8 小结第2章 Windows程序内部运行原理2.1 Windows应用程序,操作系统,计算机硬件之间的相互关系2.1.1 关于API (图1,没有)2.1.2 关于消息及消息队列 (图1、图2没有)2.2 什么是句柄2.3 谈谈WinMain函数 (例子代码EX02-00)2.3.1 WinMain函数的定义及功能2.3.2 窗口及其生成2.3.2.1 如何设计一个窗口类——步骤12.3.2.2 注册设计好的窗口类——步骤22.3.2.3 创建窗口——步骤32.3.2.4 显示创建的窗口——步骤42.3.3 消息循环2.3.4 完成回调函数2.4 程序编写操作步骤与实验2.5 小结第3章 VC集成开发环境介绍3.1 Visual C++开发环境3.1.1 工作区窗格3.1.2 输出窗格3.1.3 编辑区3.1.4菜单栏、工具栏、状态栏3.2 系统菜单功能介绍3.2.1 File菜单3.2.2 Edit菜单3.2.3 View菜单3.2.4 Insert菜单3.2.5 Project菜单3.2.6 Build菜单3.2.6 Tools菜单3.2.7 Window菜单3.2.8 Help菜单3.3 Visual C++重要工具介绍3.3.1 C/C++编译器3.3.2 资源编辑器3.3.3 资源编译器3.3.4 链接器和调试器3.3.5 AppWizard和ClassWizard3.3.6 资源浏览器3.3.7 Microsoft活动模板库、仓库3.4 小结第4章 MFC应用程序框架剖析4.1 什么是MFC以及MFC的特点 (例子代码EX04-00) 4.2 MFC应用程序框架 (例子代码EX04-01)4.3 应用程序框架说明4.4 文档-视图体系结构4.4.1 文档-视图相互作用的函数4.4.2 单文档-视图应用程序结构4.4.2 多文档-视图应用程序结构4.5 MFC消息映射机制4.5.1 消息的种类4.5.2 应用程序的Run函数4.5.3 消息映射表4.5.4 如何添加消息映射4.6 ClssWizard的使用4.6.1 ClssWizard概貌4.6.2 如何添加消息处理函数4.6.3 如何添加成员变量4.6.4 如何添加一个新类第5章 图形与文本5.1 理解图形设备接口5.2 设备描述表5.2.1 什么是设备描述表5.2.2 MFC中的设备描述表类5.2.3 获取设备描述表5.3 Windows的GDI对象5.4 GDI对象的创建5.4.1 自定义画刷(CBrush)5.4.2 自定义画笔(CPen)5.4.3 自定义字体(CFont)5.5 GDI对象的使用及示例5.5.1 画笔的使用5.5.1.1 在MFC程序中画线5.5.1.2 在Windows Application程序中画线5.5.1.3 实现橡皮筋功能5.5.2 画刷的使用5.5.2.1 带颜色的画刷的使用5.5.2.2 带位图的画刷的使用5.5.3 字体的使用5.5.3.1 一个简单的文字处理程序5.5.3.2 模拟卡拉OK程序5.5.3.3 剪切区和路径层第六章 菜单、工具栏和状态栏6.1 菜单6.1.1 菜单介绍6.1.2 创建一个菜单6.1.2.1 添加一个菜单资源6.1.2.2 利用菜单编辑器编辑菜单资源6.1.2.3 将菜单加入到应用程序中6.1.2.4 给菜单项添加COMMAND消息处理6.1.2.5 给菜单项添加UPDATE_COMMAND_UI消息处理6.1.2.6 一个简单的绘图程序6.1.3 在应用程序中控制菜单6.1.3.1 在应用程序中取得菜单6.1.3.2 在应用程序中修改菜单的状态6.1.3.3 在应用程序中添加、删除、插入菜单或菜单项6.1.3.4 一个简易的电话本程序6.1.4 创建快捷方式菜单6.2 工具栏6.2.1 工具栏介绍6.2.1.1 熟悉CToolBar类6.2.1.2 AppWizard是如何创建工具栏6.2.1.3 利用工具栏编辑器设计工具栏按钮6.2.2 新建一个工具栏6.2.3 显示/隐藏工具栏6.3 状态栏6.3.1 状态栏介绍6.3.1.1 熟悉CStatusBar类6.3.1.2 AppWizard是如何创建状态栏6.3.2 修改状态栏6.3.2.1 指示器数组6.3.2.2 修改状态栏窗格6.3.3 在状态栏上显示鼠标坐标、时钟和进度条6.3.3.1 在状态栏上显示鼠标坐标6.3.3.2 在状态栏上显示时钟6.3.3.3 在状态栏上显示进度条第七章 对话框和控件7.1 对话框及控件的介绍7.1.1 常用控件介绍7.1.2 对话框介绍7.1.2.1 对话框的组成7.1.2.2 对话框的种类7.1.2.3 使用对话框编辑器设计对话框7.1.3 创建一个对话框7.1.3.2 创建非模态对话框7.1.3.3 对话框的数据交换机制7.1.3.4 创建模态对话框7.1.4 模态对话框和非模态对话框的区别7.1.5 按钮逃跑小程序7.2 属性页和向导对话框7.2.1 创建属性页对话框7.2.1 创建向导对话框7.3 公用对话框7.3.1 增加设置对话框来完善绘图程序7.3.2 颜色对话框的使用7.3.3 字体对话框的使用7.3.4 控制控件颜色做漂亮界面第8章 文档序列化8.1 序列化8.1.1 CArchive类和Serialize函数8.1.2 使自己的类支持序列化8.1.3 实例:保存和显示图形8.2 CFile类8.2.1 CFile类的构造函数8.2.2 打开文件8.2.3 读写数据8.2.4 关闭文件8.3 文件I/O处理8.3.1 利用MFC类来实现8.3.2 利用C函数来实现8.3.3 利用C++函数来实现8.3.4 利用API函数来实现8.3.5 创建保存、打开对话框8.4 注册表操作8.4.1 什么是注册表8.4.2 注册表结构8.4.3 修改注册表第9章 修改框架程序的显示效果9.1修改Windows应用程序外观样式9.1.1 在框架类中修改程序外观9.1.2 在视图类中修改程序外观9.2 制作动画图标9.3 将图片作为窗口显示的背景第10章 网络编程10.1 计算机网络的基本概念10.1.1 计算机网络的分类10.1.2 网络拓扑结构10.2 网络体系结构和网络协议10.2.1 ISO/OSI参考模型10.2.2 TCP/IP参考模型10.2.3 TCP/IP协议10.2.3.1 协议概述10.2.3.2 TCP/IP协议层次结构及各种协议介绍10.2.3.3 IP地址10.2.3.4 端口号10.2.4 专业术语解释10.3 Socket套接字10.3.1 Socket介绍10.3.2 关于协议族和地址族10.3.3 使用Socket10.3.3.1 创建Socket10.3.3.2 指定本地地址及端口号10.3.3.3 建立连接10.3.3.4 监听连接10.3.3.5 发送数据10.3.3.6 接收数据10.3.3.7 关闭套接字10.3.4 套接字一般调用过程10.4 WinSock编程机制10.4.1 认识Windows Socket10.4.2 Windows Sockets库函数介绍10.4.2.1 Berkeley socket函数10.4.2.2 数据库函数10.4.2.3 Windows专有扩展函数10.5 WinSock编程实例10.5.1 实例一:面向连接服务的socket调用10.5.2 实例二:面向非连接服务的socket调用10.5.3 实例三:基于字符界面的聊天程序第11章 线程间的同步11.1 进程和线程的概念11.2 Win32的线程11.2.1 线程的创建11.2.2 线程的终止11.2.3 实例:通过创建多线程来编写网络聊天程序 11.3 MFC的线程处理11.3.1 创建工作者线程11.3.2 创建用户界面线程11.4 线程同步11.4.1 为什么要同步11.4.2 等待函数11.4.3 同步对象11.4.3.1 关键代码段11.4.3.2 互斥对象11.4.3.3 信标对象11.4.3.4 事件对象11.4.4 如何选择同步对象第12章 进程间的通讯12.1 进程控制12.1.1 进程的创建12.1.2 进程的终止12.2 进程间通讯12.2.1 剪贴板通讯方式12.2.2 邮槽通讯方式12.2.3 管道通讯方式12.2.3.1 命名管道通讯12.2.3.2 匿名管道通讯第14章 ActiveX技术14.1 ActiveX简介14.2 ActiveX控件和普通Windows控件14.2.1 ActiveX控件和普通Windows控件的相同点14.2.2 ActiveX控件和普通Windows控件的相同点 14.3 ActiveX控件的属性、方法和事件14.3.1 ActiveX控件的属性14.3.2 ActiveX控件的方法14.3.3 ActiveX控件的事件14.4 创建ActiveX控件。
C++笔试_MFC编程知识要点
MFC编程知识要点特别注意:红色有框的部分,考试不做要求(即:15,21,30,34,48,49)。
1、MFC应用程序中,应用程序类的基类是CWinApp;2、C/C++程序中有且只有一个main函数!在MFC应用程序中没有main函数,但是有且只有一个WinMain函数!3、MFC把WinMain函数隐藏了,我们在程序中看不到,程序员能看到的是App类中的公有成员函数InitInstance函数!这个函数是CWinApp类中定义的虚函数。
MFC应用程序从应用程序类的InitInstance函数开始,到ExitInstance结束。
因此,程序员可以在应用程序类的InitInstance函数中可以添加全局变量的初始化工作,在应用程序类的ExitInstance函数中进行全局内存资源的释放工作。
4、MFC中对话框类为CDialog;5、创建模态对话框的方法是调用CDialog类的DoModal函数,该函数的返回值代表用户是按下哪一个按钮返回的;“模态对话框”的含义是:即在该对话框关闭之前,其它窗口无法获得输入焦点!6、在MFC对话框中显示提示信息使用函数AfxMessageBox7、对话框类使用DDX/DDV机制将对话框窗口和控件窗口关联起来,DDX/DDV的代码不需要自己手工修改,可以直接使用VC中的向导界面来设置;8、CDialog::UpdateData的函数的使用MFC使用DDX/DDV机制将对话框类的成员变量和对话框中控件的数据关联起来。
DDX/DDV在类向导界面中设置。
需要了解类向导设置了DDX/DDV后,代码发生了哪些变化,DDX/DDV关联的成员变量在对话框类的构造函数中初始化。
编程时可以调用CDialog类的成员函数UpdateData更新有DDX/DDV关联的成员变量和控件中的数据。
在对话框类的消息响应函数OnOK中,第一句就应该是UpdateData(TRUE);以便于启动DDV检验或者在自己检验数据合法性之前获得最终的成员变量值。
MFC基础知识概述
MFC基础知识概述MFC(Microsoft Foundation Classes)是微软公司开发的基于C++的类库,用于Windows操作系统下的图形用户界面(GUI)应用程序开发。
MFC是Windows的主要开发框架,提供了一系列的类和函数,可以用于创建窗口、控件、对话框、菜单等。
本文将对MFC的基础知识进行概述,包括MFC的结构、类层次结构、消息和事件处理、资源管理等内容。
一、MFC的结构MFC的结构主要由四个层次构成:应用程序对象、窗口对象、视图对象和文档对象。
应用程序对象继承自CWinApp类,用于创建和初始化应用程序的整个过程。
窗口对象继承自CWnd类,用于创建和管理窗口。
视图对象继承自CView类,用于显示和处理用户界面上的一部分,通常与窗口对象对应。
文档对象继承自CDocument类,用于管理应用程序中的数据。
二、MFC的类层次结构MFC提供了众多的类和函数,可以用于创建各种窗口、控件、对话框等。
类层次结构是指这些类的继承关系。
MFC的类层次结构非常庞大,以CObject类为基类,派生出众多的中间类,再由这些中间类派生出更具体的类。
例如,CObject派生出CWnd,CWnd派生出CFrameWnd,CFrameWnd派生出CView,CView派生出CScrollView和CFormView等。
通过这种类层次结构,可以方便地创建和管理各种类型的窗口和控件。
三、消息和事件处理在MFC中,消息是用于实现窗口和控件之间通信的机制。
当用户操作窗口或控件时,会产生消息,应用程序可以通过消息处理函数来处理这些消息。
MFC提供了一些宏,如DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP,可以简化消息处理函数的定义和注册。
消息处理函数需要通过ON_MESSAGE或ON_COMMAND宏来注册,以告诉MFC在何时何地调用该函数。
事件是消息的一个特殊形式,一般是指用户操作控件时触发的消息。
mfc面试知识点
MFC面试知识点介绍MFC(Microsoft Foundation Classes)是微软公司推出的一套用于开发Windows桌面应用程序的C++类库。
它提供了一系列的类和函数,使开发者能够快速地构建Windows应用程序。
在MFC面试中,了解和掌握MFC的知识点是非常重要的。
本文将介绍一些常见的MFC面试知识点,帮助你提前准备。
MFC基础知识1. 什么是MFC?MFC是微软公司开发的一套C++类库,用于快速开发Windows桌面应用程序。
它提供了一系列的类和函数,简化了Windows应用程序的开发过程。
2. MFC和Windows API有什么区别?MFC是对Windows API的封装,提供了更高级的接口和更方便的开发方式。
使用MFC可以更快速地开发Windows应用程序,而Windows API则提供了更底层的系统调用接口。
3. MFC的优点是什么?•提供了丰富的类和函数,简化了Windows应用程序的开发过程。
•可以利用MFC的资源管理器进行资源的管理和调用。
•可以通过MFC的消息映射机制处理Windows消息。
•提供了可视化的界面设计工具,如Visual Studio。
4. MFC的缺点是什么?•MFC基于C++,对于C++不熟悉的开发者来说,上手难度较大。
•MFC的应用程序比较庞大,对系统资源要求较高。
•MFC的界面设计工具功能相对简单,不如其他专门的界面设计工具强大。
MFC应用程序的创建和运行1. 如何创建一个MFC应用程序?•使用Visual Studio新建一个MFC应用程序项目。
•在项目设置中选择需要的选项,如应用程序类型和预编译头文件。
•编写代码并进行编译、调试。
2. MFC应用程序的入口函数是什么?MFC应用程序的入口函数是CWinApp::InitInstance(),该函数负责初始化应用程序实例,并创建主窗口。
3. MFC应用程序的消息循环是如何处理的?MFC应用程序的消息循环是通过CWinApp::Run()函数实现的。
MFC基础知识
1.列表视图控件:ClistCtrl类的用法:1常规操作函数:它们可以完成向列表视图中插入新条目或新列等操作。
ISubItem-指定条目子索引项BOOL DeleteAllItems()删除列表控件中所有条目int InsertColumn(int nCol,const LVCOLUMN * pColum)插入新列操作成功返回新列索引nCol-----指定新列索引。
pColum---为LVCOLUMN结构指针,包含将插入的信息。
LVCOLUMN结构例:m_ListCtrl.InsertColumn( 0, _T( "所有匹配的单词" ), LVCFMT_LEFT, 115 );int InsertItem(const LVITEM *pItem)调用该函数以向列表中插入新条目返回新条目索引值pItem-------为LVITEM结构,其中包含了将插入的条目信息列表控制中包含两个非常重要的数据结构LV_ITEM和LV_COLUMN。
LV_ITEM用于定义列表控制的一个表项,LV_COLUMN用于定义列表控制的一个表列例:m_ListCtrl.InsertItem( 0, WordSet.m_Word );//数据项CString s;s.Format("%d",m_Set.m_column1);//格式化//int InsertItem(i,s,0)调用该函数以向列表中插入新条目返回新条目索引值//相当于插入新的一行数字代表列数m_ListCtrlx.InsertItem(i,s,0);EnsureVisible---调用该函数以确保指定的列表视图条目可见,其原型为:BOOL EnsureVisible(int nItem,BOOL bPartialOK)返回值:nItem:指定了必须可见的条目索引。
bPartialOK:指定了是否允许部分可见。
列表视图控件将在必要时进行滚动,以确保指定条目可见。
MFC从零开始学
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
MicrosoftVisual C++提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。
1.封装构成MFC框架的是MFC类库。
MFC类库是C++类库。
这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。
(1)对Win32应用程序编程接口的封装用一个C++ Object来包装一个Windows Object。
例如:class CWnd是一个C++ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C++ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。
(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。
MFC把许多类似的处理封装起来,替程序员完成这些工作。
另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。
文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。
(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。
MFC基础知识
AfxRegisterWndClass:注册用于创建Windows窗口的窗口类
24
8.4应用程序向导
25
26
27
28
29
30
31
32
15
5.控件类
控件子层次结构包括若干类,使用这些类可建立静态文本、 命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。 这些直观控件为Windows应用程序提供了各种输入和显示界面。
6.控件条类:CControlBar类
控件条子层次结构为工具条、状态条、对话条和分割窗 口建立模型。该类是CToolBar、CStatusBar、CDialogBar的 基类,负责管理工具条、状态条、对话条的一些成员函数。控 件条指的是连接在主窗口框架的顶部或底部的小窗口
19
产生异常的原因描述将储存在异常对象的 m_cause数据成员中。
例如CArchiveException 类的m_cause数据成员 的可能值如下:
• badClass:不能读错误对象类型中的内容 • badIndex:无效文件格式 • badSchema:无效对象版本 • endOfFile:到达文件尾 • Generic:不明异常 • None:无异常 • readOnly:试图向只读文件进行写操作 • writeOnly:试图向只写文件进行读操作
2
是用来编 写Windows 应用程序 的C++类集
以层次结构组织 封装了大部分API函数 提供了图形环境下应用程序的框架 提供了创建应用程序的组件
提供了大量的基类供程序员根据不同的应用环境进行扩充 MFC
允许在编程过程中自定义和扩展应用程序中的类
较好的移植性,可移植于众多的平台
MFC还很好地保持了程序的向下兼容性
关于MFC的有些知识
实验一1、在VC++中,工程与各种源文件之间是什么关系?解答:工程的实质是一些相互关联的源文件的集合,可以把项目理解成一个工作任务, 开发环境中,工程包含在工作区间中,一个工作区可以管理多个工程2、一个VC++工程下会有3个文件夹,这3个文件夹分别是什么?以.cpp为后缀的文件会添加到哪个文件夹中?以.h为后缀文件会添加到哪个文件夹中?解答:分别是head Files ,Sourse Files, Resourse Files ,.cpp放在Sourse 文件里面,.h放在Head Files文件里3,以win32 console application工程为例,简述工程的建立,文件的添加,工程的编译和链接及工程的执行过程。
解答:这个就是win32 console application工程的实例验证过程。
实验二1.简述Windows应用程序的特点。
解答:一.事件驱动的程序设计它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。
二. 消息循环与输入消息是一种报告有关事件发生的通知。
· 事件驱动是靠消息循环机制来实现的。
· Windows应用程序的消息来源有以下四种:(1)输入消息(2)控制消息(3)系统消息(4)用户消息三. 图形输出Windows程序的所有输出都是图形,字符也被作为图形来处理。
· GDI提供两种基本服务:创建图形输出和存储图象。
· 绘图函数分为三类:一是文字输出;二是矢量图形函数,用于画线、圆等几何图形;三是光栅(位图)图形函数,用于绘制位图。
四. 用户界面对象用户界面对象:窗口边框系统菜单框标题栏菜单栏工具条客户区垂直滚动条和水平滚动条状态栏图标光标插入符对话框控件消息框五.资源共享· 常见的资源包括:设备上下文,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插入符号,通信端口,电话线等。
mfc面试知识点总结
mfc面试知识点总结MFC(Microsoft Foundation Class)是微软公司开发的一套 C++ 库,用于简化 Windows 应用程序的开发。
MFC 提供了一系列的类和函数,用于处理 windows 窗口、消息、事件等,使得开发者能够更快速地完成 Windows 程序的开发。
在 MFC 的面试中,通常会涉及到一些基础知识和高级知识,下面就来总结一些常见的 MFC 面试知识点。
一、MFC 的基本概念1. MFC 是什么?MFC 是 Microsoft Foundation Class 的简称,是微软公司提供的用于简化 Windows 应用程序的开发的一套 C++ 类库。
2. MFC 的特点有哪些?MFC 的特点包括易学易用、功能强大、提供了丰富的类库和工具等。
3. MFC 和 Win32 API 有什么区别?MFC 是建立在 Win32 API 之上的,它封装了 Win32 API,提供了更加高层次的接口,使得开发 Windows 应用程序更加简单和方便。
4. MFC 和 ATL 有什么区别?MFC 是面向传统 Windows 应用程序的开发框架,而 ATL 是为开发高效的 COM 组件而设计的,两者目标不同。
5. MFC 和 .Net 的关系是什么?MFC 是基于 C++ 的框架,而 .Net 是 Microsoft 开发的基于 .Net Framework 的框架,两者属于不同的技术栈。
二、MFC 的基本类和对象1. CWinApp 类CWinApp 是 MFC 应用程序的主类,它代表了一个 MFC 应用程序的实例,通常包含了一个主窗口类对象和一些初始化及清理代码。
2. CFrameWnd 类CFrameWnd 是 MFC 中的主窗口类,它代表了应用程序的主窗口,通常包含了菜单、工具栏等 UI 元素。
3. CView 类CView 是MFC 中的视图类,它用于显示窗口中的用户界面,通常包含了子视图、控件等。
MFC基础知识概述
MFC基础知识概述MFC(Microsoft Foundation Class)是微软公司提供的一套用于Windows平台的C++应用程序开发框架。
它是Windows操作系统上的一层封装,为开发者提供了丰富的面向对象编程工具和类库,使得程序开发更加简单和高效。
MFC的基础知识主要包括以下几个方面:1. MFC的历史和特点:MFC最早是作为在Windows 3.0上开发基于C++的应用程序的解决方案而推出的,它提供了一套完整的类库,使得Windows应用程序的开发更加容易和高效。
MFC的主要特点是基于面向对象的编程方式,使用了许多设计模式和封装机制,同时还提供了丰富的GUI(Graphical User Interface)控件和功能。
2. MFC的结构和组成:MFC是基于CObject类的层次结构来组织的,它由许多不同的类和模块组成。
其中,CWinApp类是整个应用程序的起点,它负责初始化和管理应用程序的资源,同时还提供了一些事件处理函数和全局变量。
另外,MFC还包括了许多重要的类,如CWnd(窗口类)、CFrameWnd(框架窗口类)和CView(视图类),它们分别用于管理窗口、框架和视图的相关操作。
3. MFC的消息映射机制:MFC利用了Windows的消息机制来处理用户输入和系统事件。
它通过定义消息映射表来将特定的消息与相应的处理函数绑定在一起。
当程序收到一些消息时,MFC会根据映射表查找相应的处理函数,并将消息传递给它进行处理。
这种消息映射机制使得程序的处理逻辑更加清晰和灵活,同时也降低了代码的复杂性。
5. MFC的文档视图模型:MFC引入了文档视图模型(Document/View)的概念,使得程序的数据和界面分离开来。
文档(Document)类负责存储和管理程序的数据,而视图(View)类则负责显示和操作数据的方式。
通过文档视图模型,开发者可以更好地组织和管理应用程序的数据和界面,同时也提高了程序的可维护性和扩展性。
MFC部分复习整理
MFC部分复习整理一Windows SDK 程序:使用软件开发工具包开发出来的Windows 应用程序。
Windows 应用程序:以Windows 作为平台运行的应用程序.Windows API函数:用来开发Windows SDK的软件开发工具包是由C语言编写的一个大型函数库,这个库中的函数就是API函数.Windows API函数的三大类型及其功能:(1)窗口函数:实现窗口的创建、移动和修改等功能。
(2)图形设备函数:实现图形的绘制及操作功能。
(3)系统服务函数:实现与操作系统有关的一些功能.事件:能触发程序作出相应反应的因素或动作.如鼠标的单击、在键盘上按下一个键等。
消息循环:在创建了窗口的应用程序中,应用程序将不断地从消息队列获取消息,并将消息指派给指定的窗口处理函数来处理,然后再回来从消息队列中获取消息,这个循环工作的过程叫消息循环。
Windows应用程序的主函数的三个主要任务:注册窗口类创建应用程序的窗口建立消息循环. Windows 系统、主函数、窗口函数之间的关系:主函数和窗口函数都是由Windows 系统调用的函数,只不过主函数是程序启动之后,系统首先调用的函数,而窗口函数是主函数在获得消息并把消息发给系统之后,由系统依据产生事件的窗口所使用的窗口类型提供的函数指针调用的函数.二消息映射表:描述了整个应用程序的消息和消息处理函数的对应关系的总表。
消息映射表的声明: DECLARE_MESSAGE_MAP (用来声明消息映射表的宏)消息映射表的实现:控件种类不同,方式不同控件为按钮控件(button)的单击事件消息映射宏的实现:ON_BN_CLICKED(〈消息标识>,<对应的消息处理函数>)控件组合控件(ComboBox)的双击事件消息映射的实现宏:ON_CBN_DBLCLK(<消息标识〉,〈对应的消息处理函数>)控件为文本编辑框控件(Edit)的双击事件消息映射的实现宏:ON_EN_DBLCLK(〈消息标识〉,<对应的消息处理函数>)窗体类CFrameWnd中需要封装的成员:窗口句柄、窗口类的定义、注册窗口类、创建窗口、显示更新窗口。
关于MFC的基础知识
Day01一 MFC课程的知识点1 MFC微软基础类库和框架2 COM组件的原理以及应用3 ADO-MFC对数据库的访问4 SOCKEDT-windows平台下网络通信二 MFC课程中需要掌握的技能1 断点调试程序2 使用call stack查看函数的调用关系3 熟练使用向导(生成向导,类向导)和工具4 借助MSDN查看三对大家期望和要求1 不要缺课,课程连续极强。
2 多思考,多练习。
3 营造良好的课堂气氛。
四自我介绍..........*************************************************一 MFC的概念,历史和作用1 什么MFC?全称是 Microsoft Foundation Class Library微软基础类库它封装了WINDOWS应用程序的各种API函数,以及相关的机制,C++语法中的数据结构。
1.1 MFC就是一个大类库1.2 MFC还是一个程序的框架2 MFC历史VC6.0 - MFC5.XVC7.0(VC2003) - MFC6.XVC8.0(VC2005) - MFC7.XVC9.0(VC2008) - MFC8.XVC10.0(VC2010)- MFC9.X二 MFC的头文件afx.h - 包含了MFC的大部分类的头文件afxwin.h - 包含了afx.h和windows.hafxext.h - 提供了扩展窗口类的支持,例如工具栏,状态栏。
三 MFC应用程序类型1 支持MFC的控制台程序1.1 main函数不同于普通的控制台程序的main函数1.2 CWinApp theApp多了一个全局对象。
1.3 AfxWinInit - 初始化MFC库的各个信息。
(在MFC库中以Afx....开头的函数基本可以确定为全局函数)2 MFC库程序2.1 支持MFC的静态库程序2.2 支持MFC的动态库程序1)MFC规则库使用静态MFC库生成自己的DLL使用动态MFC库生成自己的DLL2)MFC扩展库规则库可以被所有程序调用,扩展库只能被支持MFC的程序使用。
WindowsMFC重点
WindowsMFC重点重点:一、windows操作系统主函数、窗口函数之间的关系主函数和窗口函数都是由windows系统来调用的函数,只不过主函数是系统启动之后,系统首先调用的函数,而窗口函数的主函数在获得消息并把消息发给系统之后,由系统依据产生事件的窗口所使用的窗口类型提供的函数指针调用的函数。
二、(名词解释)消息映射表为了形成总表,MFC要求和每一个属于CCmdTarget类族的类中都设置,一个链表节点有两个指针:一个叫做lpEntries,指向本类消息映射表_messageEntries;另一个叫做pBaseMap,指向积累节点,从而使这些节点链成了一个单向链表,而链表上的每个节点都挂接了一个类的消息映射表。
三、.基于框架编程程序员的主要工作?(1)重写CwinApp派生类的虚函数InitInstance(),在这个函数中,按自己需求创建和显示窗口。
(2)在CDocument的派生类中,声明程序所需要的数据和对这些数据进行必要操作的接口函数。
(3)在CView类的派生类中编写处理消息的代码。
(4)在CView类的派生类的OnDraw()函数中编写窗口重绘时的代码。
(5)用宏实现类的消息映射表四、图像设备描述环境:Windows为图形显示设备进行了软件封装,形成了一个统一的虚拟图形显示设备,从而使程序可以在这个虚拟设备上进行绘图,而虚拟设备图形转换为物理设备图形的任务,则由系统去完成。
在Windows中,这个虚拟图形设备表现为一个叫做图形设备描述表的数据结构,它描述了虚拟图形设备的属性,所以也叫做图形设备描述环境,简称:DC。
五、理解视图类的InvalitedRect函数:在视图中完成绘图的操作后,都是用视图类的成员函数InvalitedRect来触发OnDraw函数时显示屏幕进行重绘。
有效提高拆分窗口显示更新效率的方法,是让程序只重绘必须重绘的部分。
这样,就可以大大地减少绘图所需要的时间。
c++mfc使用知识总结
c++mfc使用知识总结1、窗口是Windows应用程序中的一个非常重要的元素,一个Windows程序至少有一个窗口,成为主窗口。
利用窗口可以接收用户的输入和输出。
2、窗口可以分为客户区(用来显示文字或绘制图形)和非客户区(标题栏、菜单栏、系统菜单、最小化框、最大化框、可调边框)。
3、窗口可以有父窗口,有父窗口的称为子窗口。
窗口有对话框、消息框的窗口。
窗口的形式有按钮、单选按钮、复选框、组框、文本编辑框等。
4、窗口由窗口句柄(HWND)标识,要对窗口进行操作,首先得到窗口的句柄。
系统的资源包括窗口,图标,光标等,系统在创建资源时为它们分配内存和产生资源标识号。
5、Windows程序设计是以事件驱动方式的程序设计模式,主要是基于消息。
窗口过程函数是专门负责处理消息的函数。
6、Windows程序的消息是由MSG结构体来标识。
消息的一般定义为WM_XXX宏的形式,XXX为某种消息的英文拼写的大写形式。
例:WM_LBUTTONDOWN,WM_KEYDOWN,WM_CHAR。
消息附加信息的变量wParam(unsigned int),lParam(long int)。
7、Windows程序运行的机制:将产生的消息依次放在消息队列中,应用程序则不断的通过一个消息循环从消息队列中取出消息,进行响应。
8、Windows程序消息可以分为“进队消息”和“不进队消息”。
系统将进队消息放到应用程序的消息队列中,由应用程序取出和发送。
不进队消息由系统调用窗口过程直接发给窗口。
不管进队还是不进队消息都由系统调用窗口过程函数进行处理。
9、WinMain是所有Win32程序的入口点函数,当WinMain函数结束时或返回时,Windows应用程序结束。
创建一个窗口的程序实例步骤:①、WinMain函数的定义。
②创建一个窗口。
③进行消息循环。
④编写窗口过程函数。
MFC技术知识
1. 什么是质量流量计?什么是质量流量控制器?质量流量计,即Mass Flow Meter (缩写为MFM ), 是一种精确测量气体流量的仪表,其测量值不因温度或压力的波动而失准,不需要温度压力补偿。
质量流量控制器, 即Mass Flow Controller (缩写为MFC ), 不但具有质量流量计的功能,更重要的是,它能自动控制气体流量,即用户可根据需要进行流量设定,MFC 自动地将流量恒定在设定值上,即使系统压力有波动或环境温度有变化,也不会使其偏离设定值。
简单地说,质量流量控制器就是一个稳流装置, 是一个可以手动设定或与计算机联接自动控制的气体稳流装置。
2. 质量流量控制器的原理是什么?质量流量控制器由流量传感器、分流器通道、流量调节阀门和放大控制器等部分组成。
质量流量控制器的剖面结构图见图1。
气体流量传感器采用毛细管传热温差量热法原理测量气体的质量流量(无需温度压力补偿)。
将传感器加热电桥测得的流量信号送入放大器放大, 放大后的流量检测电压与设定电压进行比较, 再将差值信号放大后去控制调节阀门,闭环控制流过通道的流量使之与设定的流量相等。
分流器决定主通道的流量。
与质量流量控制器配套的流量显示仪上设置有稳压电源,数字电压表, 设定电位器, 外设、内设转换和三位阀控开关等。
气体质量流量控制器与流量显示仪连接后的工作原理如图2所示。
图1. 质量流量控制器结构图 图2. 质量流量控制器原理图3. 怎么理解质量流量计/质量流量控制器的流量单位?气体质量流量单位一般以sccm (Standard Cubic Centimeter per Minute,每分钟标准毫升)和slm (Standard Liter per Minute,每分钟标准升)来表示。
这意味着,这种仪表在不同的使用条件下,指示的流量均是标准状态下的流量。
标准状态规定为: 气压—101325Pa (760mm Hg); 温度—0℃ (273.15K)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知识点:不是很全面,只供参考第一章Windows应用程序使用的界面是由各种图形元素组成的图形界面(GUI)。
Windows提供了大量预定义的用C语言编写的函数,这些函数就叫做API(Application Programming Interface)函数。
在Windows应用程序中,存在着许多与DOS应用程序不同的复杂对象,例如窗口、按钮、滚动条等等。
Windows把为这种复杂对象所定义的标识叫做句柄。
常用的句柄类型:HWND 窗口句柄,HDC 图形设备环境句柄,HINSTANCE 当前程序应用实例句柄,HBITMAP 位图句柄,HICON 图标句柄,HCURSOR 光标句柄,HBRUSH 画刷句柄,HPEN 画笔句柄,HFONT 字体句柄,HMENU 菜单句柄,HFILE 文件句柄事件的描述是一个消息消息的结构:typedef struct tagMSG{HWND hwnd; //产生消息的窗口句柄UINT message;//消息的标识码WPARAM wParam;//消息的附加信息1LPARAM lParam;//消息的附加信息2DWORD time; //消息进入消息队列的时刻POINT pt; //表示发送该消息时鼠标的位置}MSG;消息循环:while(GetMessage(&msg,NULL,NULL,NULL))//系统处理了消息后返回{TranslateMessage(&msg);//把键盘消息翻译成字符消息DispatchMessage(&msg);//把消息派发给Windows系统创建窗口的三个步骤:注册窗口类:RegisterClass(&wc);创建窗口:hwnd=CreateWindow( lpszClassName,"Windows",WS_OVERLAPPEDWINDOW,120,50,800,600,NULL, NULL, hInstance,NULL);显示窗口:ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);大题:用函数封装Windows程序(P16)第二章类封装:窗口类:class CFrameWnd{public:HWND hWnd;///数据成员public:int RegisterWindow(); //定义及注册窗口类void Create(LPCTSTR lpClassName,LPCTSTR lpWindowName);//创建窗口void ShowWindow(int nCmdShow);//显示与更新窗口void UpdateWindow();};应用程序类:class CWinApp{public:CFrameWnd*m_pMainWnd;//以窗口类的对象作为数据成员public:BOOL InitInstance (int nCmdShow);//在初始化函数中创建及显示窗口int Run();//消息循环};窗口函数的封装——消息映射用DECLARE_MESSAGE_MAP来声明消息映射表用BEGIN_MESSAGE_MAPBEGIN_MESSAGE_MAP(类名称,基类名称)ON_XXXX 例ON_WM_PAINT()END_MESSAGE_MAP来实现消息映射表大题:类封装Windows应用程序第三章应用程序的框架由两个对象组成:应用程序类CWinApp的派生类对象和框架窗口类CFrameWnd的派生类对象,后者作为一个成员对象嵌在前者之中。
应用程序的文档/视图结构:MFC把早期窗口类的功能分解成:数据存储、管理部分,数据显示与用户交互部分,管理窗口框的大小、标题、菜单条、状态条的窗口部分,进而形成了三个类:文档类CDocument、视图类CView和窗口类CFrameWnd。
这三个类统一由一个叫文档模板的对象来管理。
应用程序类对象是上述所有对象的容器和消息传递中心。
两种文档/视图结构:单文档界面(SDI)应用程序、多文档界面(MDI)应用程序视图类CView的派生类中连个重要的函数:GetDocumment()用于获得文档类对象的指针,是视图类对象与文档类对象进行联系的通道;OnDraw()用来更新视图的显示文档模板类CDocTemplate有两个派生类:单文档模板类和多文档模板类应用程序类的派生类:初始化BOOL CMyApp:InitInstance(){。
CSingleDocTemplate *pDocTemplate,// 声明文档模板指针pDocTemplate=new CSingleDocTemplate(//文档模板对象IDR_,MAINFRAME,//文档模板使用的资源IDRUNTIME_CLASS(CMyDoc),//创建文档对象如何关联RUNTIME_CLASS(CMainFrame),//创建SDI框架窗口对象RUNTIME_CLASS(CMyView));//创建视图对象AddDocTemplate(pDocTemplate);//将文档模板加入模板链表M_pMainWnd->ShowWindow(SW_SHOW);M_pMainWnd->UpdateWindow();Return TRUE;}第四章用来在显示设备硬件与程序员之间进行隔离的虚拟绘图环境叫做图形设备描述环境DC。
它屏蔽了显示设备的特殊性,给程序员提供了一个统一的绘图界面。
GDI(图形设备接口)是用户可以调用的一套用于绘图操作的函数集。
DC的获取HDC GetDC(HWND hWnd) //获取窗口DCint Release(HWND hWnd,HDC hdc) //释放窗口DCCDC类:CDC类中的一些常用的成员函数:Arc()画圆弧、BitBlt()、Ellipse()、LineTo()、MoveTo ()、Rectangle()画矩形、RoundRect()画圆角矩形、SelectObject()、SetTextColor()、StretchBlt()把一个DC中的位图复制到另一个DC中,但可以改变位图的长宽比、TextOut ()CDC类派生了CClientDC (窗口客户区的设备描述环境)CMetaFileDC (图元文件的设备描述环境)CPaintDC(窗口用户区的设备描述环境)CWindowDC (整个窗口内绘图的设备描述环境)等在不同场合下应用的CDC类画笔是绘制线条的工具,它CPen类的对象。
CPen类的构造函数为:CPen(int style,int width,COLORREF color);因此在使用自己定义的画笔时,要使用CDC的函数把默认画笔替换为自己定义的画笔,这个函数的原型为:CPen* SelectObject( CPen* pPen );使用画笔的代码片段为://创建新画笔CPen newPen(PS_SOLID,width,color);//载入新画笔并把旧画笔存入指针CPen*oldPen=pDC->SelectObject(&newPen);//绘图代码…………//在使用新画笔绘制线条之后,恢复原画笔pDC->SelectObject(oldPen);画刷是CBrush类的对象,是用来填充封闭图形内部的工具。
CBrush类的构造函数有两个:CBrush(COLORREF color); CBrush(int style,COLORREF color); 使用画刷的代码片段为://创建新画刷CBrush newBrush (color);//载入新画刷并把旧画刷存入指针CBrush*oldBrush=pDC->SelectObject(&newBrush);//绘图代码…………//在使用新画刷绘制线条之后,恢复原画刷pDC->SelectObject(oldBrush);文本:文本显示:BOOL TextOut(....);设置文本颜色:virtual COLORREF SetTextColor(。
);//设置COLORREF GetTextColor();//获得V irtual COLORREF SetBkColor(。
);//设置背景颜色COLORREF GetBkColor();//获得设置文本字符间距:int SetTextCharacterExtra(。
);intGetTextCharacterExtra();设置文本对齐方式:UNIT SetTextAlign(TA_LEFT);TA_LEFT、TA_CENTER、TA_RIGHT、TA_TOP、TA_BOTTOM、TA_BASELINE第五章简单数据类:CPoint、CSize、CRect 、字符串类CStringMFC用CPoint类来描述一个点。
这个类常用的两个构造函数为:CPoint(int initX, int initY );CPoint( POINT initPt );POINT是Windows定义的一个结构:typedef struct tagPOINT {LONG x; LONG y; } POINT;在MFC中,类CRect的对象可以描述一个矩形。
CRect常用的两个构造函数为:CRect( int l, int t, int r, int b );CRect( const RECT& srcRect );在MFC中,用CSize类来描述一个矩形区域的大小。
CSize类常用的两个构造函数为:CSize( int initCX, int initCY );CSize( SIZE initSize );MFC把对字符串的处理方法封装在了类CString中,从而对字符串提供了强有力的支持。
CString常用的构造函数为:CString();CString( const unsigned char* psz );为了处理诸如数组、链表之类的群体数据,MFC在头文件afxtempl.h中提供了基于模板的群体数据类和非基于模板的群体数据类。
基于模板的群体数据类有CArray、CList和CMap。
用CArray类对象可以创建数组,由于这是一个类模板,因此可以对任意数据类型的数据进行处理。
定义CArray类对象的语法如下:CArray<数组元素的数据类型,成员函数形参的数据类型> 对象名;例如:CArray<CPoint,CPoint&> m_P;即定义了一个数组对象m_P,数组元素的数据类型为CPoint,而数组对象成员函数的形参数据类型为CPoint&。
第六章三个机会选择窗口样式:在MFC AppWizard-Step1时,可以选择SDI、MDI还是以对话框为界面的窗口样式。