MFC编程实例

合集下载

mfc编程cstringlist实例

mfc编程cstringlist实例

mfc编程cstringlist实例MFC编程中的CStringList实例在MFC(Microsoft Foundation Classes)编程中,CStringList是一个非常有用的类,用于管理字符串的链表。

它提供了许多方便的功能,使得操作字符串链表变得更加简单和高效。

在本文中,我们将逐步回答关于CStringList的问题,并给出一些实例代码来帮助读者更好地理解和使用这个类。

问题1:什么是CStringList?CStringList是MFC框架中的一个类,它是一个模板类,用于处理字符串的链表。

它使用的是C++的模板机制,可以在链表中存储任意类型的数据。

但在这里,我们主要关注它在处理字符串方面的应用。

问题2:如何创建一个CStringList对象?要创建一个CStringList对象,只需简单地声明一个新的实例即可:CStringList strList;这将创建一个名为strList的CStringList对象。

您可以根据需要创建多个实例,并在程序的任何地方使用它们。

问题3:如何向CStringList中添加字符串?要向CStringList中添加字符串,可以使用AddHead()或AddTail()成员函数。

AddHead()函数将字符串添加到链表的头部,而AddTail()函数则将字符串添加到链表的尾部。

下面是一些示例代码:CStringList strList;strList.AddHead("Hello");strList.AddTail("World");这将创建一个名为strList的CStringList对象,并向其头部添加字符串"Hello",在其尾部添加字符串"World"。

问题4:如何遍历并访问CStringList中的字符串?要遍历并访问CStringList中的字符串,可以使用CstringList的一个迭代器。

MFC控件之CListCtrl的应用实例教程

MFC控件之CListCtrl的应用实例教程

MFC控件之CListCtrl的应⽤实例教程本⽂以实例形式较为详细的讲述了MFC控件中CListCtrl的应⽤⽅法,对于学习Windows程序设计来说有不错的借鉴价值。

具体步骤如下:⾸先,CMFCListCtrl实现的功能中⽐较特别的就是通过CImage来扩展每⾏的⾼度。

实例化代码如下:CMFCListCtrl m_lisTestResult;1、插⼊列(创建表格):m_lisTestResult.InsertColumn(0, _T("序号"), LVCFMT_CENTER, 50);2、填充内容:m_lisTestResult.InsertItem(iRow, strRow, -1); //iRow为⾏号,从0开始; strRow为显⽰序列号m_lisTestResult.SetItemText(iRow, 1, _T("显⽰内容"));3、获取⾏数:int iRow = m_lisTestResult.GetItemCount();4、获取列数:int iList = m_lisTestResult.GetHeaderCtrl().GetItemCount();5、获取表头字符:CString strTemp;LVCOLUMN lvcol;TCHAR str[32];lvcol.mask = LVCF_TEXT;lvcol.pszText = str;hTextMax = 32;if (m_lisTestResult.GetColumn(j, &lvcol)){ strTemp.Format(_T("%s,"),lvcol.pszText);}6、改变⾏⾼,这个最主要的是通过CImage配合实现的。

具体代码如下:CMFCListCtrl m_lisTestResult;CFont m_font;m_font.CreateFont(-12,0,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,_T("Arial")); this->SetFont(&m_font);if(!m_lisTestResult.GetSafeHwnd()){ CRect rect; this->GetDlgItem(IDC_LIST_TESTRESULT)->GetWindowRect(&rect); ScreenToClient(&rect); m_lisTestResult.Create(WS_CHILD | WS_BORDER | WS_VISIBLE | WS_VSCROLL | LVS_REPORT, rect, this, IDC_LIST_TESTRESULT); m_lisTestResult.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); m_lisTestResult.SetFont(&m_font); CImageList images; images.Create(1, 24, TRUE | ILC_COLOR32, 1, 0); m_lisTestResult.SetImageList(&images, LVSIL_SMALL);}希望本⽂所述代码对⼤家Windows程序设计有所帮助。

mfc课程设计实例

mfc课程设计实例

mfc课程设计实例一、教学目标本课程旨在通过MFC(Microsoft Foundation Class)的教学,让学生掌握Windows应用程序开发的基本技能。

通过本课程的学习,学生将能够理解MFC的基本概念,掌握MFC应用程序的框架和生命周期,熟练使用MFC提供的各种控件和类,以及熟练使用MFC进行窗口设计、事件处理和资源管理等。

在知识目标上,学生需要掌握MFC的基本概念,包括MFC的类层次结构、应用程序框架、窗口类和控件类等。

学生还需要了解MFC应用程序的生命周期,包括初始化、创建窗口、处理消息和销毁等。

在技能目标上,学生需要能够使用MFC进行Windows应用程序的开发,包括窗口设计、事件处理、资源管理等。

学生还需要能够使用MFC进行调试和优化,以提高应用程序的性能和稳定性。

在情感态度价值观目标上,学生需要培养对编程的兴趣和热情,培养解决问题的能力和创新精神,以及培养良好的编程习惯和团队合作意识。

二、教学内容本课程的教学内容主要包括MFC的基本概念、MFC应用程序的框架和生命周期、MFC提供的各种控件和类、以及MFC进行窗口设计、事件处理和资源管理等。

具体的教学大纲如下:1.MFC的基本概念:介绍MFC的类层次结构、应用程序框架、窗口类和控件类等。

2.MFC应用程序的框架和生命周期:介绍MFC应用程序的创建、初始化、窗口创建、消息处理和销毁等过程。

3.MFC控件的使用:介绍MFC提供的各种控件的使用方法,包括按钮、编辑框、列表框等。

4.MFC窗口设计:介绍如何使用MFC进行窗口设计,包括窗口布局、控件摆放等。

5.MFC事件处理:介绍如何使用MFC进行事件处理,包括消息映射、事件处理函数等。

6.MFC资源管理:介绍如何使用MFC进行资源管理,包括图像、字体和颜色等。

三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。

在讲授法方面,教师将系统地介绍MFC的基本概念、应用程序框架和生命周期等。

MFC计算器

MFC计算器

《C++面向对象程序设计》实验报告学院:信息科学与工程学院专业:学号:姓名:一.题目:利用MFC框架编写Windows附件中所示的简易计算器二.功能描述:1.能够实现最基本的加,减,乘,除四则基本运算。

2.界面有清空,退格按钮,方便用户计算使用。

3.此计算器具有开方,取倒数,求对数的高级运算。

三.概要设计:1.Windows消息处理机制通过对教材的阅读,对Windows程序的消息处理机制有个大致的了解。

Windows的程序都是通过消息来传送数据,并且存在异常处理等不需要用户参与的系统消息,用户消息就是鼠标的单击,双击等。

2.界面的设计如图,简易的计算器界面主要使用菜单中相关控件,并合理的布置各个按钮的位置,使得界面让用户看起来整洁简单。

3.框架描述Windows 简易计算器在资源视图画好界面添加控件的同时,通过属性修改名称为各个按钮和编辑框添加不同的函数四则运算+,-,*,/ 1/x,lgx等函数退格和清空键4.建立的变量和控件的命名,对应的消息处理函数命名表ID CAPTION Message Handler IDC_BUTTON0 0 OnButton0()IDC_BUTTON1 1 OnButton1()IDC_BUTTON2 2 OnButton2()IDC_BUTTON3 3 OnButton3()IDC_BUTTON4 4 OnButton4()IDC_BUTTON5 5 OnButton5()IDC_BUTTON6 6 OnButton6()IDC_BUTTON7 7 OnButton7()IDC_BUTTON8 8 OnButton8()IDC_BUTTON9 9 OnButton9()IDC_BUTTON10 . OnButton11()IDC_BUTTON11 = OnButtonequal() IDC_BUTTON12 + OnButtonadd()IDC_BUTTON13 - OnButtoncut()IDC_BUTTON14 * OnButtonmultiply() IDC_BUTTON15 / OnButtonremove() IDC_BUTTON16 1/x OnButton1x()IDC_BUTTON17 lg OnButtonlg()IDC_BUTTON18 sqrt OnButtonsqrt()IDC_BUTTON19 Backspace OnButtonbackspace() IDC_BUTTON20 C(清空) OnButtonclear()5.下图是基本对话框中所有的类四.详细设计:1.新建工程,选择MFC AppWizard[exe],并命名工程的名称为mycalculator2.选择基本对话框3.通过控件添加各种按钮和编辑框(对话框右边的“Controls”控件箱提供了可用于对话框的各种组建,在此次计算器中,基本上只用到上面四个控件,对话框只能通过控件来实现它们的功能,把控件中的数据保存在对话框类的数据成员中,应用程序才能通过这些数据成员获取控件中的数据)4.考虑用户们的习惯,把编辑框的显示的数字属性由靠左改成靠右(选中编辑框,右击选择属性-样式,排列文本改为向左)5.用同样的方法改变按钮的标题,其他按钮同理6.为美观改变对话框的标题为“计算器”7.右击编辑框添加类向导,添加变量m_result,且type为CString//可通过其改变类型和名称8.实现每个按钮的功能,双击按钮,为按钮添加函数,可以改变函数的名称① 0~9和小数点的函数大致类似void CMycalculatorDlg::OnButton1(){// TODO: Add your control notification handler code herem_result +=_T("1");UpdateData(FALSE);}函数_T()可以对字符串进行操作,UpdateData(FALSE)可以把数据传到文本框里面,小数点与数字同样这样处理。

MFC串口通信编程详解

MFC串口通信编程详解
COMMTIMEOUTS 结构的定义为: typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout;//读间隔超时 DWORD ReadTotalTimeoutMultiplier;//读时间系数 DWORD ReadTotalTimeoutConstant;//读时间常量 DWORD WriteTotalTimeoutMultiplier;//写时间系数 DWORD WriteTotalTimeoutConstant;//写时间常量 } COMMTIMEOUTS,*LPCOMMTIMEOUTS; COMMTIMEOUTS 结构的成员都以毫秒为单位.总超时的计算公式是: 总超时=时间系数×要求读/写的字符数+时间常量 例如要读入 10 个字符,那么读操作的总超时的计算公式为: 读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant 可以看出:间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置 各种超时. 如果所有写超时参数均为 0,那么就不使用写超时.如果 ReadIntervalTimeout 为 0,那么就不使用读间隔超时.如果 ReadTotalTimeoutMultiplier 和 ReadTotalTimeoutConstant 都为 0,则不使用读总超时.如果读间隔超时被设置成 MAXDWORD 并且读时间系数和读时间常量都为 0,那么在读一次输入缓冲区的内容后 读操作就立即返回,而不管是否读入了要求的字符. 在用重叠方式读写串口时,虽然 ReadFile 和 WriteFile 在完成操作以前就可能返 回,但超时仍然是起作用的.在这种情况下,超时规定的是操作的完成时间,而不是 ReadFile 和 WriteFile 的返回时间.

mfc 键盘hook例子

mfc 键盘hook例子

mfc 键盘hook例子全文共四篇示例,供读者参考第一篇示例:MFC是Microsoft Foundation Classes的缩写,是微软公司开发的一种面向对象的C++库。

它提供了许多对Windows编程常用的类和函数,方便开发人员编写Windows应用程序。

在MFC中,键盘hook是一种用于监控键盘消息的技术。

通过键盘hook,我们可以在程序运行时捕获、处理键盘输入,实现自定义的按键响应逻辑。

在本文中,我们将以一个简单的MFC键盘hook例子来演示如何实现键盘消息的拦截和处理。

通过这个例子,读者可以了解MFC中如何使用键盘hook,并学习如何在程序中对键盘消息进行相应的处理。

我们需要创建一个MFC应用程序。

在Visual Studio中新建一个MFC应用程序项目,选择“桌面应用程序(MFC)”模板,并按照向导设置好项目名称和路径。

在新建的MFC应用程序项目中,我们可以添加一个新的类来处理键盘hook。

右键单击项目名称,选择“添加”->“类”,在“添加类”对话框中选择“MFC类from General”模板,填写类的名称(比如CHookManager)并点击“添加”。

在CHookManager类中,我们需要实现键盘hook的安装和卸载函数。

在类的.h文件中定义以下成员变量和函数:```cppclass CHookManager{public:CHookManager();virtual ~CHookManager();在类的.cpp文件中实现这些函数:```cppBOOL g_bHookInstalled = FALSE;HHOOK g_hHook = NULL;CHookManager::CHookManager(){}LRESULT CALLBACK CHookManager::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam){if (nCode >= 0){// 处理键盘消息KBDLLHOOKSTRUCT* pKbdStruct = (KBDLLHOOKSTRUCT*)lParam;if (pKbdStruct->vkCode == VK_ESCAPE){// 拦截ESC键return 1;}}return CallNextHookEx(g_hHook, nCode, wParam, lParam);}void CHookManager::InstallHook(){if (!g_bHookInstalled){g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, GetModuleHandle(NULL), 0);g_bHookInstalled = TRUE;}}在上面的代码中,我们定义了一个HHOOK类型的全局变量g_hHook和一个BOOL类型的全局变量g_bHookInstalled,用于存储键盘hook的句柄和安装状态。

用MFC实现简单资源管理器

用Visual C++打造自己的资源管理器Windows的资源管理器想必大家都用过,该程序的窗口一分为二,左边的窗口显示本机当前所有驱动器以及驱动器中的所有文件夹,当用户单击文件夹后,如果该文件夹下面还有子文件夹,则上层文件夹展开显示下级的文件夹;否则,右边的窗口显示选择文件夹下的文件。

那么这个程序是如何实现的呢?为了说明这个问题,本实例打造了一个简易的资源管理器,它实现了Windows资源管理器的主要功能,在显示文件的属性(如文件的文件名、文件的大小、文件的创建时间)的同时,还可以改变文件显示的方式,如大小图标方式、列表方式等。

本实例代码编译运行后的界面效果如图一所示:一、实现方法从上面的界面效果图可以看出,在程序中使用了拆分窗口,在拆分的过程中,左边窗口为CTreeView 类的子类CLeftView,右边的窗口为CListView类的子类CdriveExplorerView。

窗口的拆分和CTreeView、CListView类不是本实例讲述的重点,相关的知识在本书的实例中都有介绍,读者朋友可以参阅上述内容及实例的原代码,这里主要介绍程序中一些具体的细节知识。

资源管理器中一个重要的问题是如何得到本机中的驱动器信息,微软提供的有关驱动器的API函数有GetLogicalDrives(),GetDriveType()。

对于喜欢操作位和字节的汇编语言使用者来说,GetLogicalDrives()是个很好用的API 函数。

它以位掩码的形式返回逻辑驱动器。

即在一个DWORD类型的返回值中,位0(最小的一位)表示驱动器A,位1表示驱动器B,以此类推。

每一个位的状态如果是on,则表示对应的逻辑驱动器存在;否则状态为off,表示对应的逻辑驱动器不存在。

大家知道DWORD 是一个32位的值,足以包括所有的英文字母,也就是说最多可有26个盘符。

为了确定某个逻辑驱动器的类型,必须调用GetDriveType()函数。

创建基于对话框的MFC工程(详细图示)

实例001 如何创建基于对话框的MFC工程《Visual C++开发实战1200例(第I卷)》本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Visual C++进行程序开发各个方面的知识和技巧,主要包括编程基础、界面设计、应用程序控制和图形图像。

本节为大家介绍实例001 如何创建基于对话框的MFC工程。

AD:第1章开发环境工程创建开发环境设置与使用程序调试1.1 工程创建实例001 如何创建基于对话框的MFC工程要使用Visual C++开发软件,首先要创建一个工程,而基于对话框的MFC工程则是用户广泛使用的工程。

图1.1将是一个新创建的基于对话框的MFC工程。

本实例将介绍如何创建基于对话框的MFC工程。

(New窗口的Projects选项卡中选择MFC AppWizard[exe](MFC应用程序向导)选项,在Project name文本框中输入创建的工程名"Hello",在Location文本(2)单击OK按钮,弹出MFC AppWizard-Step 1窗口,如图1.3所示。

在MFC AppWizard-Step1窗口中可以指定生成框架的类型。

Single document:生成单文档应用程序框架。

Multiple documents:生成多文档应用程序框架。

Dialog based:生成基于对话框的应用程序框架。

Document/View architecture support:选中该复选框,允许生成文档/视图和非文档/视图结构程序。

(3)本实例选中Dialog based单选按钮,创建一个生成基于对话框的应用程序。

单击Next按钮,弹出MFC AppWizard-Step 2 of 4窗口,如图1.4所示。

MFC AppWizard-Step 2 of 4窗口中的主要选项介绍如下。

About box:生成"关于"对话框。

网络编程实验报告-MFC WinInet类应用程序编程实例

对象标识ObjectID
消息Message
函数Member functions
命令按钮
IDOK
BN_CLICKED
OnQuery
命令按钮
IDC_DOWNLOAD
BN_CLICKED
OnDownload
命令按钮
IDC_UPLOAD
BN_CLICKED
OnUpload
列表框
IDC_LIST_FILE
LBN_SELCHANGE
8.添加表6.15所示的事件函数和成员函数的代码
9.进行测试
关于测试,有一点必须指出,如果在本机测试,必须在本机安装一个FTP服务器,并将它运行起来,然后才能运行此程序。FTP服务器软件很多,可以从网上下载,例如比较简单的NetFtpd.exe。运行这个例子程序时,在服务器域名文本框中输入“localhost”,保持登录用户名和口令文本框为空,单击“查询”按钮,用户将获得FTP服务器的默认目录下的文件名和目录名。
IDC_STATIC_PWD
m_staPwd
Control
CStatic
IDC_EDIT_FTP
m_strFtp
Value
CString
m_editFtp
Control
CEdit
IDC_EDIT_NAME
m_strName
Value
CString
m_editName
Control
CEdit
IDC_EDIT_PWD
学生实验报告
开课学院及实验室:2012年月日
学院
机械与电气工程学院
年级、专业、班
姓名
学号
实验课程名称
网络编程
成绩
实验项目名称

VS2010和MFC编程入门之48(字体和文本输出:文本输出)

VS2010MFC编程入门之四十八(字体和文本输出:文本输出)理解了CFont字体类,这里主要讲解文本输出的方法和实例。

文本输出过程在文本输出到设备以前,我们需要确定字体、字体颜色和输出的文本内容等信息。

Windows窗口的客户区由应用程序管理,所以我们还要在应用程序中控制输出文本的格式,例如后续字符的位置、换行等格式。

由此,文本的输出过程大致包括确定字体信息、格式化文本和执行输出操作三个步骤。

下面分别讲解。

1、确定字体信息文本在输出以前应该先确定字体信息,或者是当前正在使用的字体,或者是自定义的字体,之后就可以根据确定的字体来显示文本或者利用字体信息来设定文本的格式了,例如,我们可以根据当前字体的字符高度来确定下一行字符在什么位置输出。

自定义字体可以通过CFont类的创建字体的几个成员函数完成。

获取当前选择字体的信息可以使用API函数GetTextMetrics实现,此函数的原型如下:BOOL GetTextMetrics(__in HDC hdc,__out LPTEXTMETRIC lptm);参数hdc为设备上下文的句柄;参数lptm是指向TEXTMETRIC结构体变量的指针,此结构体变量用于接收字体信息。

TEXTMETRIC结构体的定义如下:C++代码typedefstructtagTEXTMETRIC {LONG tmHeight; // 字符高度LONG tmAscent; // 字符基线以上的高度LONG tmDescent; // 字符基线以下的高度LONG tmInternalLeading; // 由tmHeight成员指定的字符高度顶部的空间LONG tmExternalLeading; // 行间距LONG tmAveCharWidth; // 字符的平均宽度LONG tmMaxCharWidth; // 字符的最大宽度LONG tmWeight; // 字符的粗度LONG tmOverhang; // 合成字体间附加的宽度LONG tmDigitizedAspectX; // 为输出设备设计的x轴尺寸LONG tmDigitizedAspectY; // 为输出设备设计的y轴尺寸TCHAR tmFirstChar; // 字体中第一个字符值TCHAR tmLastChar; // 字体中最后一个字符值TCHAR tmDefaultChar; // 替换字体中没有的字符TCHAR tmBreakChar; // 作为分隔符的字符BYTE tmItalic; // 非0则表示字体为斜体BYTE tmUnderlined; // 非0则表示字体有下划线BYTE tmStruckOut; // 非0则表示字符带有删除线BYTE tmPitchAndFamily;// 字体间距和字体族BYTE tmCharSet; // 字符集} TEXTMETRIC, *PTEXTMETRIC;2、格式化文本格式化文本一般包括两种,一种是确定文本行中后续文本的位置,另一种是确定换行时下一行文本的位置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

{
public: BOOL InitInstance(); }; BOOL CMyApp::InitInstance()
第10章 Visual C++编程实例
{
CMyWnd *pFrame=new CMyWnd; pFrame->Create(0,_T("吹彩色泡泡")); pFrame->ShowWindow(m_nCmdShow); this->m_pMainWnd=pFrame;
penNew.CreatePen(PS_SOLID,1,RGB(255,0,0));
dc.SelectObject(&brushNew); dc.SelectObject(&penNew);
第10章 Visual C++编程实例
for(int i=0;i<m_nBubbleCount;i++)
dc.Ellipse(m_rectBubble[i]); } //应用程序类 class CMyApp:public CWinApp
(3) 窗口句柄的销毁:调用CWnd::DestroyWindow。
第10章 Visual C++编程实例
2) 窗口的大小和位置
(1) IsIconic:窗口是否处在最小化状态。 (2) IsZoomed:判断窗口是否在最大化状态。 (3) MoveWindow:改变窗口的大小、位置和Z轴顺序。 Z轴顺序指本窗口和其他窗口的覆盖关系。
第10章 Visual C++编程实例
10.2 常用MFC类和消息处理
10.2.1 常用MFC类 MFC的类构成了一个完整的体系,该体系由一个 被称为Cobject的类作为基类,其它类大部分由该类派 生而来,如CWnd(窗口类)、Cdocument(文档类)、 Cfile(文件类)等。也有一部分类如字符串类,Cstring和
第10章 Visual C++编程实例
程序开始
生成CwinApp 的一个实例, 初始化全局对象 AfxWinMain() 的函数体 初始化句柄
退出句柄 WindMain () 的函数体 消息循环
退出句柄
程序结束
图 10-1
第10章 Visual C++编程实例
一个MFC程序运行的一般过程如下:
(1) 生成CwinApp的一个实例(调用CwinApp的构造函数), 初始化全局对象; (2) Win32入口程序函数WinMain调用函数AfxWinMain; (3) AfxWinMain调用函数CwinApp的成员函数InitInstance;
(1) FlashWindow:闪烁窗口。
(2) MessageBox:弹出一个标准消息框。
第10章 Visual C++编程实例
例如:开始一个系统定时器每0.5秒发一次
WM_TIMER消息,代码为: SetTimer(1,500,NULL): 其中,第一个参数表示定时器的标识,第二个参 数表示发送WM_TIMER的间隔时间,第三个参数是一 个回调函数,一般设为NULL。可以在WM_TIMER消 息的处理函数OnTimer(通过ClassWizard添加)中加入处 理代码来响应定时器消息。结束定时器的方法是调用
第10章 Visual C++编程实例
另外,也可以选择应用程序静态链接到MFC。静
态链接意味着,应用程序不依赖于MFC库文件的存在 (但仍然可能需要Msvcrt.dll文件)。静态链接的代价是
可执行文件更大,而且MFC内存的利用可能不够充分。
在菜单中选择“工程”中的“设置”对话框,在 对话框右方的“General”选项卡中通过组合框 “Microsoft Foundation Classes”选择使用MFC类库的 方法。可选项有三种,分别为“Not Using MFC(不使 用MFC)","Use MFC in a Shared DLL(以动态链接库方式 使用MFC)”和“Use MFC in a Static Library(以静态库 方式使用MFC)”。
return TRUE;
} CMyApp ThisApp; //全局应用程序对象 按【Ctrl+F5】运行程序,运行结果如图10-2所示。
第10章 Visual C++编程实例
说明:
该程序声明了两个类,一个是由应用程序类 CwinApp派生出来的CmyApp类,一个是由框架窗口 CframeWnd类派生出来的CmyWnd类。MFC的基本类 名均以字母C打头,习惯上在为使用MFC编写的应用 程序中的类起名时也这样做。在程序中还声明了一个 CmyWnd类的全局对象ThisApp。
第10章 Visual C++编程实例
3) 窗口的状态
(1) ShowWindow:显示或隐藏一个窗口,显示可以 有多种方式:最大化、最小化、正常显示等。 (2) IsWindowEnabled:判断一个窗口是否可见。 (3) IsWindowEnabled:判断窗口的禁止/使能状态,
禁止状态的窗口不能响应用户的键盘和鼠标的输入。
时间类Ctime等则不从Cobject继承。
第10章 Visual C++编程实例
1. 窗口公共基类CWnd
类CWnd对所有Windows窗口提供功能支持,它是 所有窗口类的直接或间接父类。 一个CWnd对象和一个Windows窗口是有本质区别 的,尽管它们有密切的联系。CWnd对象是一个C++ 概念,即类的实例,而Windows窗口则是指向Windows 内部数据结构的一个句柄,它的创建和显示要消耗系 统资源。一个CWnd对象通过其构造函数被创建,被析
}
第10章 Visual C++编程实例
}
void CMyWnd::OnPaint() {
CPaintDC dc(this);
CBrush brushNew; CPen penNew; brushNew.CreateSolidBrush(RGB(rand()%255,rand()%25 5,rand()%255));
void CMyWnd::OnLButtonDown(UINT nFlags,CPoint point) { if(m_nBubbleCount<MAX_BUBBLE) {
int r=rand()%50+10;
CRect rect(point.x-r,point.y-r,point.x+r,point.y+r); m_rectBubble[m_nBubbleCount]=rect; m_nBubbleCount++; InvalidateRect(rect,FALSE);
(4) AfxWinMain调用函数CwinApp的成员函数Run;
(5) AfxWinMain函数返回到WinMain,WimMain结束,程 序结束。
第10章 Visual C++编程实例
例10-1
吹泡泡程序。每当用户在窗口客户区中按
下鼠标左键时即可产生一个泡泡(彩色圆形)。 设计思路:显示一个泡泡所需的数据包括其位置
第10章 Visual C++编程实例
第10章 Visual C++编程实例
10.1 MFC编程流程 10.2 常用MFC类和消息处理
10.3 对话框的应用
10.4 菜 单 的 应 用
10.5 工具栏应用
第10章 Visual C++编程实例
10.1 MFC编程流程
在普通的C/C++程序中,可以看到程序从main函数 开始到结束的所有代码,但在Visual C++中MFC封装了 一部分类,同时也隐藏了一部分代码,因此我们看不 到源程序的所有代码,例如从项目的所有源文件中找 不到main函数。 基本对话框的MFC程序流程图如图10-1所示。
int m_nBubbleCount;
public: CMyWnd() {m_nBubbleCount=0;}
第10章 Visual C++编程实例
protected:
afx_msg point); void OnLButtonDown(UINT nFlags,CPoint
afx_msg void OnPaint();
第10章 Visual C++编程实例
图 10-2
第10章 Visual C++编程实例
在CmyWnd类中声明了一个数组成员m_rectBubble,
用于存放泡泡的数据;另外,还声明了一个整型数据 成员m_nBubbleCount, 用来存放数组中泡泡的实际数量。 在框架窗口类的构造函数中该成员变量被初始化为0, 由于构造函数非常简单,因此使用了内联函数的形式。
第10章 Visual C++编程实例
调试:
首先,使用Visual C++集成开发环境中的菜单选项 “文件/新建”,并在项目选项卡中选择“Win32用程序的可执行程序如
何使用MFC的类库。一种方法是使用共享的动态链接
库(DLL)。这种链接方式显著地减小了应用程序的可执 行文件的大小,并能有效地利
(4) EnableWindow:设置窗口的禁止/使能状态,参 数为true表示使能。
第10章 Visual C++编程实例
4) 定时器函数
(1) SetTimer:开始一个系统定时器。定时器的作 用是每隔指定时间发一次WM_TIMER消息。 (2) KillTimer:结束一个指定的系统定时器。 5) 提示函数
第10章 Visual C++编程实例
相关文档
最新文档