MFC知识点(自己整理的,只供参考)

合集下载

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知识点(自己整理的,只供参考)

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要点(自己总结的)

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 知识点总结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的有些知识

关于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教程入门知识全集

说明:本书稿为张孝祥、袁龙友两位老师在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:指定了是否允许部分可见。

列表视图控件将在必要时进行滚动,以确保指定条目可见。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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还是以对话框为界面的窗口样式。

相关文档
最新文档