MFC编程简单功能总结
mfc工作原理
mfc工作原理
MFC,即Microsoft Foundation Classes,是一种用于开发Windows图形用户界面(GUI)应用程序的编程框架。
其工作
原理可以简要概括如下:
1. MFC是基于面向对象的编程方法,它使用C++语言来实现
应用程序的开发。
开发者在MFC中创建一系列的类,每个类
分别表示应用程序的窗口、控件、消息处理等各个方面。
2. MFC提供了一组丰富的类和函数库,用于快速构建各种窗
口和控件。
通过继承和复用MFC提供的基础类,开发者可以
很轻松地创建自己的应用程序。
3. MFC使用了消息机制处理用户输入和操作系统事件。
当用
户在应用程序中进行操作时(如点击按钮、键盘输入等),系统会生成相应的消息,MFC会根据消息类型和目标窗口的消
息映射表来调用相应的消息处理函数。
4. MFC以响应式编程的形式工作,即通过处理不同的消息来
响应用户的操作。
开发者可以重写或扩展MFC提供的默认消
息处理函数,以实现自定义的应用逻辑。
5. MFC还提供了一些其他功能,如多线程支持、数据库连接、文件操作等。
开发者可以利用这些功能来开发更加复杂和完善的应用程序。
总之,MFC通过提供一套面向对象的框架和一系列工具类,
帮助开发者快速构建Windows图形界面应用程序。
它通过消息机制来处理用户操作,通过类的继承和复用来提高代码的可维护性和可扩展性。
mfc编程用途
mfc编程用途
MFC(Microsoft Foundation Classes)是微软公司提供的一个用于 Windows 应用程序开发的类库和框架。
它将 Windows API 进行了封装,提供了一系列的类和函数,使得开发者可以更加方便地创建 Windows 应用程序。
以下是 MFC 编程的一些常见用途:
1. 用户界面开发:MFC 提供了丰富的 UI 组件和控件,如按钮、文本框、列表框等,开发者可以利用这些组件快速构建出美观的用户界面。
2. 图形和绘图:MFC 提供了绘图和图形操作的类和函数,开发者可以使用这些功能来绘制图形、显示图像以及实现动画效果。
3. 文件和数据库操作:MFC 提供了文件操作和数据库访问的类和函数,开发者可以使用这些功能来读取、写入文件,以及连接和操作数据库。
4. 网络编程:MFC 提供了网络通信相关的类和函数,开发者可以使用这些功能来创建网络应用程序,实现客户端/服务器通信。
5. 多线程编程:MFC 支持多线程编程,开发者可以使用它来创建并发执行的线程,提高程序的性能和响应能力。
6. 串口通信:MFC 提供了串口通信的类和函数,开发者可以使用这些功能来与外部设备进行串口通信。
7. 打印和打印预览:MFC 提供了打印和打印预览的功能,开发者可以利用这些功能来设计和实现打印相关的应用程序。
8. 动态链接库(DLL)开发:MFC 可以用于创建动态链接库,这些库可以被其他应用程序调用,实现代码的重用和模块化。
总之,MFC 编程提供了一个强大的工具集,使得开发者能够更加高效地创建 Windows 应用程序,并且减少了对底层 Windows API 的直接操作,提高了开发效率和代码的可维护性。
mfc多线程编程 主线程等待子线程退出函数
MFC多线程编程 - 主线程等待子线程退出函数1.引言MFC(Microsoft Foundation Class)是微软提供的一套C++类库,用于快速开发Windows应用程序。
在实际开发中,多线程编程是一种常见的技术需求,用于解决程序中复杂的并发控制和逻辑处理问题。
本文将针对MFC多线程编程中主线程等待子线程退出函数的实现进行详细介绍。
2.多线程概述多线程编程是指在一个程序中同时运行多个独立的线程,每个线程可以执行不同的任务并且可以并发执行。
在MFC中,多线程编程可以通过CWinThread类或AfxBeginThread函数来实现。
在实际应用中,主线程通常会创建一个或多个子线程来完成耗时的任务,主线程需要等待所有子线程执行完毕后再继续执行其他操作。
3.主线程等待子线程退出函数的需求在实际开发中,主线程常常需要等待所有子线程执行完毕后再进行后续的操作,这就需要主线程等待子线程退出函数的支持。
在MFC中,主线程可以通过在子线程结束时调用WaitForSingleObject或WaitForMultipleObjects函数来实现等待子线程退出的功能。
4.主线程等待子线程退出函数的使用方法主线程等待子线程退出函数的使用方法一般分为以下几个步骤:4.1 创建子线程在MFC中,可以通过CWinThread类或AfxBeginThread函数来创建子线程,子线程可以执行需要的任务,并在任务执行完毕后调用ExitInstance函数结束线程。
4.2 处理线程退出通知在子线程执行完毕后,需要通知主线程线程已退出。
可以通过PostThreadMessage或SendMessage等方式向主线程发送线程退出消息。
4.3 主线程等待子线程退出主线程在收到线程退出消息后,可以调用WaitForSingleObject或WaitForMultipleObjects函数来等待所有子线程退出。
这些函数会使主线程阻塞,直到指定的线程对象被释放。
mfc 简单例程
mfc 简单例程摘要:1.MFC 简单例程概述2.MFC 简单例程的实现步骤3.MFC 简单例程的应用示例正文:一、MFC 简单例程概述MFC(Microsoft Foundation Class)是微软提供的一个用于开发Windows 应用程序的类库。
它包含了大量预定义的类和函数,可以帮助开发者快速、简便地创建Windows 应用程序。
MFC 简单例程是指使用MFC 类库创建的一个简单的程序实例,通常用于演示MFC 的基本功能和操作方法。
二、MFC 简单例程的实现步骤1.打开Visual Studio,创建一个新的MFC 应用程序项目。
2.在Visual Studio 中,选择“File”>“New”>“MFC AppWizard”,然后点击“Next”。
3.在“AppWizard”对话框中,选择“A simple MFC application”,然后点击“Next”。
4.输入项目名称、选择项目位置,然后点击“Finish”。
5.在“Solution Explorer”窗口中,双击“MainFrame.cpp”文件,打开代码编辑器。
6.在代码编辑器中,可以编写MFC 简单例程的代码。
例如,可以创建一个窗口,添加按钮和文本框等控件,以及实现按钮点击事件的处理函数等。
三、MFC 简单例程的应用示例以下是一个MFC 简单例程的应用示例,它实现了一个简单的计算器功能:1.创建一个MFC 应用程序项目,并添加一个名为“Calculator”的窗口。
2.在“Calculator”窗口中,添加两个文本框(Text1 和Text2),用于输入两个数字;添加一个按钮(Button1),用于执行计算操作。
3.为“Button1”按钮添加一个点击事件处理函数(ON_BN_CLICKED)。
在函数中,编写计算两个文本框中数字之和的代码,并将结果显示在文本框(Text1)中。
4.编译并运行程序,可以看到一个简单的计算器界面。
MFCCListCtrl控件使用总结整理
MFCCListCtrl控件使用总结整理一、基本操作:1. 创建CListCtrl实例,可以通过对话框资源添加控件或代码创建:```cppCListCtrl m_listCtrl;```2.设置列表样式,例如设置为报表样式:```cppm_listCtrl.Create(WS_VISIBLE , WS_CHILD , LVS_REPORT, CRect(10, 10, 500, 300), this, IDC_LIST_CTRL);```3.设置列表列头:```cppm_listCtrl.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 50);m_listCtrl.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(2, _T("年龄"), LVCFMT_LEFT, 50);```4.添加行数据:```cppint nItemIndex = m_listCtrl.InsertItem(0, _T("1"));m_listCtrl.SetItemText(nItemIndex, 1, _T("张三"));m_listCtrl.SetItemText(nItemIndex, 2, _T("20"));``````cppm_listCtrl.DeleteItem(nItemIndex); // 删除```二、高级操作:1.设置列宽:```cppm_listCtrl.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);m_listCtrl.SetColumnWidth(1, LVSCW_AUTOSIZE);m_listCtrl.SetColumnWidth(2, LVSCW_AUTOSIZE);```2.设置行高:```cppm_listCtrl.SetItemHeight(0, 50);```3.设置行选中状态:```cppm_listCtrl.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);```4.设置行背景色:```cppm_listCtrl.SetItemState(0, LVIS_SELECTED , LVIS_FOCUSED, LVIS_SELECTED , LVIS_FOCUSED);m_listCtrl.SetSelectionMark(0);m_listCtrl.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);```5.设置行图标:```cppm_listCtrl.SetItemImage(nItemIndex, nImageIndex);```6.获取行数和列数:```cppint nItemCount = m_listCtrl.GetItemCount(;int nColumnCount = m_listCtrl.GetHeaderCtrl(->GetItemCount(;```7.获取行数据:```cppCString strItemText = m_listCtrl.GetItemText(nItemIndex, nSubItemIndex);```三、自定义操作:1.列排序:```cpp```2.行拖拽排序:```cppm_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT ,LVS_EX_GRIDLINES , LVS_EX_HEADERDRAGDROP);``````cppm_listCtrl.ModifyStyle(0, LVS_EDITLABELS);```4.行点击事件:```cppON_NOTIFY(NM_CLICK, IDC_LIST_CTRL, OnLButtonDown)```5.自定义绘制:```cppON_WM_DRAWITEM```四、注意事项和优化建议:1. 大量数据时,慎用SetRedraw方法来控制刷新。
MFC程序设计范文
MFC程序设计范文MFC(Microsoft Foundation Class)是微软公司开发的一套用于Windows系统的应用程序框架,它提供了一系列的C++类,用于简化Windows程序的开发过程。
MFC基于面向对象的编程思想,提供了许多封装好的类和函数,使得开发者可以更加方便地进行界面设计、事件处理、数据管理等操作。
1. 创建MFC应用程序项目:在Visual Studio中选择新建项目,选择MFC应用程序向导,按照向导的指引完成项目的创建。
2.设计界面:MFC提供了可视化界面设计工具,开发者可以通过拖拽控件、设置属性等方式设计应用程序的界面布局。
控件包括按钮、文本框、列表框、菜单等等。
3.处理事件:事件是用户操作界面时发生的动作,如按钮被按下、列表框的选项被选中等。
在MFC中,可以通过重载响应函数的方式来处理事件。
每个控件都有一系列的事件处理函数,开发者可以根据需要选择合适的函数进行重载,然后在函数中编写事件处理的代码。
4.数据管理:MFC提供了一些数据管理的类,用于处理数据的读取、存储、处理等操作。
开发者可以使用这些类来操作数据库、读取文件、保存设置等。
除了上述基本流程,MFC还提供了一些其他的功能,如线程管理、消息处理、打印输出等。
开发者可以根据实际需求选择适合的功能进行使用。
然而,MFC程序设计也存在一些缺点。
首先,MFC只能在Windows系统上运行,不具备跨平台的能力。
其次,由于MFC是一套较为庞大的类库,如果没有掌握好MFC的使用方法,可能会导致开发效率低下,代码冗长。
另外,MFC的界面设计工具相对较为简陋,对于一些复杂的界面效果可能无法满足需求。
总体来说,MFC是一套适用于Windows系统的程序框架,可以帮助开发者快速搭建Windows程序的框架。
它提供了丰富的类库和工具,使得开发者能够更加轻松地进行界面设计、事件处理、数据管理等操作。
然而,MFC也有一些缺点,如只能在Windows系统上运行、界面设计工具相对简陋等。
MFC编程基础教程
MFC编程基础教程MFC(Microsoft Foundation Classes)是一套基于C++的应用程序框架,用于开发可视化的Windows应用程序。
MFC提供了丰富的工具和类库,使程序开发人员能够更加轻松地创建Windows应用程序。
一、MFC框架的介绍MFC是一种C++编程框架,用于开发Windows应用程序。
MFC提供了一系列的类和方法,用于处理窗口、消息处理、资源管理等常见的任务。
MFC框架的核心是一个称为CWinApp的类,它是应用程序的入口点。
二、MFC的基本概念1.窗口:MFC使用窗口来显示应用程序的用户界面。
窗口可以是主窗口、对话框、工具栏、菜单等。
2.消息处理函数:MFC使用消息机制来处理用户输入和系统事件。
消息处理函数是在收到特定的消息时执行的代码块。
3.控件:控件是用于用户交互的窗口元素,例如按钮、文本框、列表框等。
4.对象模型:MFC使用面向对象的概念来管理窗口和控件。
每个窗口或控件都是一个C++对象,有自己的属性和方法。
三、MFC应用程序的创建1.创建一个MFC应用程序的步骤:a. 新建项目:在Visual Studio中创建一个MFC应用程序项目。
c.编写代码:编写消息处理函数和其他代码,实现应用程序的功能。
d.编译和运行:编译项目并运行应用程序。
四、MFC消息处理1.应用程序的消息循环:MFC应用程序的消息循环负责接收和处理用户输入和系统事件。
2.消息映射表:消息映射表是一个用于将消息与消息处理函数关联的数据结构。
3.常见的消息类型:MFC提供了大量的消息类型,包括鼠标和键盘消息、窗口消息、菜单消息等。
五、MFC控件的使用1.控件的创建和操作:使用MFC提供的类和方法来创建和操作控件。
2.控件的属性设置:通过设置控件的属性来改变它的外观和行为。
3.控件事件的处理:通过处理控件的事件来响应用户的操作。
六、MFC对话框的使用2.对话框控件的操作:对话框中的控件可以像其他控件一样进行操作。
mfc函数详解
mfc函数详解MFC(Microsoft Foundation Class)是一种面向对象的Windows应用程序框架,它是微软公司在Windows操作系统下的视窗类库,是Visual C++的一些类和函数的集合。
MFC的作用是提供一种高级的、面向对象的编程结构,让程序员更加容易地开发Windows应用程序。
下面是一些常用的MFC函数及其详解:1. AfxMessageBox函数原型:int AfxMessageBox(LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);函数作用:显示一个消息框,包含文本、标题和按钮。
参数解释:lpszText:要显示的消息文本。
nType:消息框类型,包括按钮以及图标等样式。
nIDHelp:帮助ID,用于消息框的帮助文件。
返回值:用户选择的按钮行为,如“取消”、“确定”等。
2. AfxGetMainWnd函数原型:CWnd* AfxGetMainWnd( );函数作用:获取当前线程的主窗口对象指针。
参数解释:无。
返回值:当前线程的主窗口对象指针。
3. CString.Format函数原型:int Format(LPCTSTR lpszFormat, ...);函数作用:根据格式控制符格式化字符串。
参数解释:lpszFormat:格式化字符串,格式控制符用“%”标识。
...:格式控制符中各个参数的值。
返回值:格式化后的字符串长度。
4. CListBox.SetCurSel函数原型:int SetCurSel(int nIndex);函数作用:设置列表框中当前选定项的索引。
参数解释:nIndex:要选定项的索引,从0开始。
返回值:如果设置成功,则返回新选定项的索引;否则,返回LB_ERR。
5. CEdit.SetWindowText函数原型:void SetWindowText(LPCTSTR lpszString); 函数作用:设置编辑框的文本内容。
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 listcontrol 控件使用总结整理
mfc listcontrol 控件使用总结整理MFC List Control控件是MFC框架中的一个常用控件,用于显示和管理列表数据。
以下是对MFC List Control控件使用的一些总结整理:1. 创建控件:通过在对话框资源中添加List Control控件进行创建,或者在代码中使用Create()函数动态创建。
2. 设置风格:可以通过代码设置控件的风格,如设置单选模式、多选模式、网格线等。
3. 设置列头:通过调用InsertColumn()函数来设置控件的列头,可以设置列标题、宽度等属性。
4. 添加项:可以通过调用InsertItem()函数来添加行(项),可以设置每个项的数据、图标等属性。
5. 设置子项:通过调用SetItemText()函数来设置每个项的子项的文本内容。
6. 获取选定项:可以通过调用GetNextItem()函数来获取当前选中项的索引,然后可以通过GetItemText()函数来获取选中项的内容。
7. 删除项:可以通过调用DeleteItem()函数来删除指定的项。
8. 排序:可以通过调用SortItems()函数来对List Control控件的内容进行排序。
9. 自定义绘制:可以通过重写OnCustomDraw()函数来实现对List Control控件的自定义绘制,如改变项的背景颜色、文本颜色等。
10. 列表视图:可以通过设置控件的样式为列表视图,来实现更复杂的数据展示和交互功能,如拖拽、排序、编辑等。
需要注意的是,MFC List Control控件的使用需要注意内存释放和资源管理,例如在动态创建控件时需要手动调用DeleteObject()函数来释放资源。
另外,对于大量数据的操作,可以考虑使用虚拟列表实现数据的延迟加载,以提高性能和响应速度。
MFC六大核心机制
MFC六大核心机制1.消息映射机制:MFC使用明确的消息映射机制来处理用户界面和系统事件。
应用程序通过重写消息映射函数来处理不同的消息事件,如鼠标点击、按键操作等。
消息映射机制使得开发者可以方便地响应和处理不同的用户交互动作。
2. 文档视图(Doc/View)体系:MFC采用了文档视图体系,将应用程序数据(文档)和用户界面(视图)分离。
文档表示应用程序的数据,视图代表用户界面,通过文档视图模式可以实现多视图的显示和操作。
开发者可以自定义文档类和视图类,通过它们来管理和展示数据。
3.对象序列化机制:对象序列化是指将对象的状态转换为可以存储或传输的格式,以便于在不同的环境中恢复对象的状态。
MFC提供了强大的对象序列化支持,可以方便地对应用程序的数据进行存储和加载。
开发者只需将需要序列化的成员变量标记为可序列化,并实现相关的序列化函数即可实现数据的持久化。
4.多线程支持:MFC提供了多线程支持,使得应用程序可以在多个线程中同时执行任务。
开发者可以使用MFC提供的线程类来创建和管理线程,并通过消息机制进行线程间的通信。
多线程支持有助于提高应用程序的性能和响应能力。
MFC的运行时类是一组用于封装常用功能的类,包括字符串操作、容器类、文件I/O等。
这些类提供了方便、高效的操作接口,减少了开发者对底层操作的依赖。
开发者可以直接使用MFC提供的运行时类来简化开发过程。
6.扩展性:MFC提供了丰富的扩展性机制,包括自定义控件、自定义对话框、自定义视图等。
开发者可以通过派生已有的MFC类来创建自定义的控件或界面,以满足特定的应用程序需求。
扩展性机制使得开发者可以充分发挥自己的创造力和想象力,实现更加个性化的应用程序。
总结:MFC六大核心机制为开发者提供了丰富的类和功能,使得开发Windows图形界面应用程序更加简单和高效。
通过消息映射机制、文档视图体系、对象序列化机制、多线程支持、运行时类和扩展性机制,开发者可以轻松地实现各种应用程序的需求,并提供更好的用户体验。
MFC编程总结各种控件使用说明
MFC各种控件的使用说明把整数显示为时间格式的方法:Int minute=5; int sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);定时器的使用方法:在函数BOOL CDingshiqiDlg::OnInitDialog(){SetTimer(1,1000,NULL);}添加语句SetTimer(1,1000,NULL);定时器1秒钟中断一次.然后添加消息WM_TIMER对应的消息函数:void CDingshiqiDlg::OnTimer(UINT nIDEvent){}播放系统声音的方法:在头文件添加这两句#include<mmsystem.h>#pragma comment (lib,"winmm.lib")然后调用函数: PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC);VC++6.0控件工具箱:2 图形控件(picture):常用于显示位图(Bitmap)和图标(Icon)3 静态文本(Static Text):MFC提供了CStatic类支持静态控件。
(1)更改该控件上字体的方法是:该控件的ID为IDC_STATIC1,IDC_STATIC2.CFont * f1;f1 = new CFont;f1 -> CreateFont( 25 , // nHeight15, // nWidth0 , // nEscapement0 , // nOrientationFW_BOLD, // nWeightFALSE , // TRUEbItalicFALSE, // bUnderline0 , // cStrikeOutDEFAULT_CHARSET, //ANSI_CHARSET nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T( " 宋体" )); // lpszFacGetDlgItem(IDC_STATIC1)-> SetFont(f1);GetDlgItem(IDC_STATIC2)-> SetFont(f1);另一种改变字体大小的方法: 在函数外定义CStatic m_static;CFont font;m_static.SubclassDlgItem(IDC_STAT_DIS,this);LOGFONT log;GetObject(::GetStockObject(DEFAULT_GUI_FONT),sizeof(log),&log);log.lfHeight=300; //改log.lfWidth=120; //改log.lfCharSet=GB2312_CHARSET;lstrcpy(log.lfFaceName, _T("宋体"));font.CreateFontIndirect(&log);m_static.SetFont(&font);(2) 把整数显示在该控件的方法:IDC_STAT_DIS为控件IDInt minute=5,sec=5;CString strTime;strTime.Format("%02d:%02d",minute,sec);GetDlgItem(IDC_STAT_DIS)->SetWindowText(strTime);另外一种显示的方法:CStatic*pst=(CStatic *)GetDlgItem(IDC_STAT_DIS);pst->SetWindowText("00:00");4 编辑框(Edit Box):MFC提供了CEdit类支持编辑框控件。
MFC基础教程
MFC基础教程MFC(Microsoft Foundation Classes)是微软公司开发的一组C++类库,用于开发Windows平台的应用程序。
MFC提供了许多用于创建图形用户界面和处理用户输入的类和函数,使开发者能够更轻松地构建Windows应用程序。
对于初学者来说,学习MFC可以帮助他们快速入门Windows编程,并且能够开发出功能丰富的应用程序。
本教程将向初学者介绍MFC的基础知识和使用方法。
1.MFC的概述MFC是构建Windows应用程序的一种开发方式。
它提供了大量的类和函数,包括窗口、对话框、控件、消息处理等,用于简化开发者创建和操作Windows界面的过程。
2.开发环境准备在开始学习MFC之前,需要安装Visual Studio等集成开发环境。
Visual Studio是一个开发Windows应用程序的强大工具,它包含了MFC 类库和丰富的开发工具。
3.创建MFC应用程序在Visual Studio中,可以选择创建一个MFC应用程序项目。
在创建项目的过程中,可以选择使用对话框、单文档或多文档应用程序。
4.MFC应用程序的结构MFC应用程序通常由一个或多个窗口或对话框组成。
窗口是应用程序的主要界面,可以包含菜单、工具栏、状态栏等。
对话框用于收集用户输入或显示特定信息。
5.消息映射和消息处理MFC应用程序通过消息系统与用户交互。
当用户执行一些操作(例如点击按钮、按下键盘)时,应用程序会接收到相应的消息。
通过消息映射和消息处理函数,可以定义应用程序对不同消息的响应。
6.控件的使用7.对话框的使用8.文件操作MFC提供了丰富的文件操作功能,包括打开、保存、读取和写入文件等。
通过MFC类中的方法,可以轻松地进行文件操作,并处理异常情况。
9.资源管理10.调试和错误处理在开发应用程序时,调试和错误处理是非常重要的。
MFC提供了丰富的调试工具和机制,帮助开发者快速定位和修复错误。
通过使用断点、输出调试信息等方法,可以更好地调试应用程序。
MFC开发常用知识点总结
开辟空间cmd_zone=newchar[CMD_LENGH];//指令空间data_zone=newchar[DATA_LENGH];//数据空间ax=newchar[4];bx=newchar[4];cx=newchar[4];sp=newchar[SP_LENGH];//堆栈空间pc=newchar[4];memset(cmd_zone,0,CMD_LENGH);//设置大小memset(data_zone,0,DATA_LENGH);memset(ax,0,4);memset(bx,0,4);memset(cx,0,4);memset(sp,0,SP_LENGH);memset(pc,0,4);srand((unsignedint)(time(0)));//随机数起始分配地址(16位:2,2,4,4,4)cmd_code=*((unsignedshort*)cmd_zone);cmd_nouse=*((unsignedshort*)cmd_zone+2);cmd_arg1=*(unsignedint *)(cmd_zone+4);cmd_arg2=*(unsignedint *)(cmd_zone+8);cmd_arg3=*(unsignedint*)(cmd_zone+12);输出数据(EDITCONTROL)CString bbb;bbb.Format(_T("%d %d %d %d %d"),X,X,X,X,X);UpdateData(true);myedit += bbb + _T("\r\n");UpdateData(false);动态创建按钮static CButton *btn =new CButton();btn->Create(_T("aaa"),WS_CHILD|WS_VISIBLE,CRect(10,50,100,100),this,1); //(按钮的文字,Dword,对角线顶点坐标,父窗口,号码)CMFCButton * button = new CMFCButton;button->Create(_T("Test Button"),WS_VISIBLE,CRect(5, 5, 80, 50),this,IDC_BUTTON_TEST);// 更改文字button->SetWindowTextA(_T("强制更改"));// 更改背景颜色button->SetFaceColor(RGB(153, 217, 234));// 更改字体颜色button->SetTextColor(RGB(255, 255, 255));// 更改高亮颜色button->SetTextHotColor(RGB(63, 72, 204));// 更改位置button->MoveWindow(50, 50, 100, 70);// 鼠标经过时变成手势button->SetMouseCursorHand();// 工具提示button->SetTooltip(_T("俺是提示"));button1->SetImage(IDB_BITMAP1);向数据空间写数据for (int i=0;i<DATA_LENGTH/16-1;i++){cmd_code=*(unsignedshort*)(cmd_zone+0+16*i)=rand()%10;cmd_nouse=*(unsignedshort*)(cmd_zone+2+16*i)=rand()%10;cmd_arg1=*(unsignedint*)(cmd_zone+4+16*i)=rand()%10;cmd_arg2=*(unsignedint*)(cmd_zone+8+16*i)=rand()%10;cmd_arg3=*(unsignedint*)(cmd_zone+12+16*i)=rand()%10;}Comob 控件mycomb1.AddString(“aaa”);mycomb1.GetLBText(mycomb1.GetCurSel(),bbb); //获取控件指示的内容(如:add,sub,div等)mycomb1.GetCurSel() //获取控件指示的第N个数,返回值为(0,1,2…)定时器SetTimer(1,1000,NULL);//定时器1,1000ms间隔,NULL显示菜单程序:放在oninit()函数下HMENU m_hMenu1;m_hMenu1=LoadMenu(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MENU1));//导入资源,创建菜单::SetMenu(this->GetSafeHwnd(),m_hMenu1);//添加到对话框判断数据库是否存在,不存在就还原备份CFile abc;if (!abc.Open(_T(".\\test1.mdb"),CFile::modeRead)){CopyFile(_T(".\\test1.bak"),_T(".\\test1.mdb"),TRUE);}Edit control控件跟踪最后一行显示方法,放在updatedata(false)之后m_editcontrol.LineScroll(m_editcontrol.GetLineCount());设置进度条m_ctrl.SetRange(0,100); //设置起始和结束范围m_ctrl.SetPos(100); //设置当前位置打开帮助文档::WinExec("HH.EXE .\\help.chm",SW_SHOW);获取clistbox内容CString str;m_lstMaterials.GetText(m_lstMaterials.GetCurSEL,str);CString componentname=str;CString aaa;aaa.Format(_T("%s"),componentname);AfxMessageBox(aaa);显示图片void CDlgComponents::OpenBMP(){CFile picFile;if(picFile.Open(BmpName, CFile::modeRead | CFile::typeBinary)) {BYTE* pBuffer = new BYTE[(unsignedint)picFile.GetLength()];if(pBuffer != NULL){picFile.Read(pBuffer, (UINT)picFile.GetLength());//Load the Imagem_picCtrl.Load(pBuffer, (size_t)picFile.GetLength());delete pBuffer;}}}获取路径void CDlgComponents::GetBMPName(){POSITION pos = m_Components.GetFirstSelectedItemPosition();int iSel = m_Components.GetNextSelectedItem(pos);CString strSel = m_Components.GetItemText(iSel, 0); //获取到组件名称CString comid;int len;len=strSel.GetLength();int i;i=strSel.Find(" ");comid=strSel.Mid(i+5,len);BmpName=".//piclib/"+comid+".bmp";}。
VCMFC之ListCtrl控件使用经验总结
VCMFC之ListCtrl控件使用经验总结本文将从创建ListCtrl控件、数据的插入、删除和修改、列表项的选择和排序等方面,总结一些经验和注意事项。
一、创建ListCtrl控件创建ListCtrl控件的方法有很多,下面介绍两种常用的方法。
2. 动态创建ListCtrl控件:可以通过CListCtrl类的Create函数来动态创建ListCtrl控件。
例如:```cppCListCtrl m_listCtrl;m_listCtrl.Create(WS_CHILD , WS_VISIBLE , LVS_REPORT, CRect(0, 0, 500, 300), this, IDC_LIST_CTRL);```此外,还可以通过控件向导创建ListCtrl控件,控件向导在创建ListCtrl控件时会生成相关的代码。
二、数据的插入、删除和修改1.插入数据:可以使用InsertItem函数向ListCtrl控件中插入新的项。
例如:```cppm_listCtrl.InsertItem(0, _T("Item 1"));2.删除数据:可以使用DeleteItem函数删除ListCtrl控件中的其中一项。
例如:```cppm_listCtrl.DeleteItem(0);```3.修改数据:可以通过SetItemText函数修改ListCtrl控件中其中一项的文字。
例如:```cppm_listCtrl.SetItemText(0, 1, _T("Modified Item"));```三、列表项的选择和排序1.列表项的选择:可以使用GetNextItem函数和SetItemState函数来获取和设置ListCtrl控件中的选中项。
例如:```cppint nItem = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);m_listCtrl.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);2.列表项的排序:可以使用SortItems函数对ListCtrl控件中的数据进行排序。
MFC编程入门之二十三(常用控件:按钮控件的编程实例)
MFC编程⼊门之⼆⼗三(常⽤控件:按钮控件的编程实例) 上⼀节讲了按钮控件Button、Radio Button和Check Box的基本⽤法,本节继续讲按钮控件的内容,通过⼀个实例让⼤家更清楚按钮控件在实际的软件开发中如何使⽤。
因为Button控件在前⾯的例⼦中涉及到了,⽐较简单,本⽂就不作深⼊分析了,⽽是重点讲解单选按钮Radio Button、复选框Check Box的使⽤。
按钮控件实例的功能 ⾸先介绍此实例实现的功能。
此实例⽤来根据⽹站类型选择⽹站,并将选择的⽹站的名称显⽰到编辑框中。
⽹站类型有“门户”、“论坛”和“博客”三种,为单选按钮。
⽹站有六个:博客园、新浪、天涯论坛、韩寒博客、⽹易和凤凰⽹论坛,均为复选框。
当选中某种⽹站类型即点了某个单选按钮时,其对应的⽹站的复选框就激活,其他则禁⽤,不允许选择,且为⾮选中状态。
例如,如果选中了“门户”单选按钮,则“新浪”、“⽹易”复选框激活,允许⽤户选择,⽽其他复选框则禁⽤。
按钮控件实例的实现 下⾯为⼤家详细阐述此实例的编写步骤。
1、创建⼀个基于对话框的MFC⼯程,名称设为“MFCButtonDemo”。
2、在⾃动⽣成的主对话框IDD_MFCBUTTONDEMO_DIALOG的模板中,删除"TODO:Place dialog controls here".静态⽂本框,添加两个Group Box,属性Caption分别改为“⽹站类型”、“⽹站”。
3、在Group Box“⽹站类型”中加⼊三个Radio Button,Caption分别设为“门户”、“论坛”和“博客”,ID分别设为IDC_PORTAL_RADIO、IDC_FORUM_RADIO和IDC_BLOG_RADIO。
4、在Group Box“⽹站”中加⼊六个Check Box,Caption分别设为“博客园”、“新浪”、“天涯论坛”、“韩寒博客”、“⽹易”和“凤凰⽹论坛”,ID 分别设置为IDC_CHECK1、IDC_CHECK2、IDC_CHECK3、IDC_CHECK4、IDC_CHECK5和IDC_CHECK6。
MFC代码总结
1.使按钮变灰GetDlgItem(IDC_BUTTON)-> EnableWindow(FALSE)2.显示位图1.CStatic* pStatic=(CStatic*)GetDlgItem(IDC_STATIC5);CDC* pDC=pStatic->GetDC();CBitmap bitmap;bitmap.LoadBitmap(IDB_Red);BITMAP bmp;bitmap.GetBitmap(&bmp);CDC dcCompatible;dcCompatible.CreateCompatibleDC(pDC);dcCompatible.SelectObject(&bitmap);CRect rect;pStatic->GetClientRect(&rect);pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);2.HBITMAP hBitmap;hBitmap = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));m_Bmp.SetBitmap(hBitmap);3.改变按钮文字新建一个基于对话框的MFC应用程序,删除窗口默认控件并添加一个按钮,按钮标题为"请点我",在ClasWard中为按钮绑定变量m_btn,并为按钮添加一个消息响应函数,添加如下代码: m_btn.SetWindowText("我已被点");大功告成。
4.实时监测void CControlDlg::OnPaint(){.................SetTimer(TIMER1,500,0);}void CControlDlg::OnTimer(UINT nIDEvent){switch(nIDEvent){case TIMER1:{...1111...break;}default:break;}CDialog::OnTimer(nIDEvent);}5.获得hdc,画线HDC hdc;hdc=::GetDC(m_hWnd);MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);LineTo(hdc,point.x,point.y);::ReleaseDC(m_hWnd,hdc);6.操作菜单GetMenu()->GetSubMenu(0)->CheckMenuItem(1,MF_BYPOSITION|MF_CHECKED);返回CMenu类指针,CMenu内封装了操作菜单的函数。
MFC学习总结 (67个技巧) dlg 上建立View
MFC学习总结(67个技巧) dlg 上建立View1."属性页的添加:创建对话框的类,该类要从CpropertyPage继承;然后在要添加该对话框为属性页的类(头文件)里创建CpropertySheet类的一个对象m_tabsheet和新创建的对话框类的对象m_skatch;最后,在.cpp文件里的OnInitDialog()之类的函数里实现如下代码:m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, 0);"//使选项卡的按钮在下面"if(m_tabsheet.m_hWnd)"m_tabsheet.ShowWindow(SW_MAXIMIZE);//显示选项卡//加入标签,标签名由各个子对话框的标题栏决定"m_tabsheet.AddPage(&m_skatch);"//用Create来创建一个属性页"m_tabsheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);"RECT rect;"m_tabsheet.GetWindowRect(&rect);"int width = rect.right - rect.left;"int height = rect.bottom - rect.top;""//调整属性页的大小和位置"m_tabsheet.SetWindowPos(NULL, 225, 225, width-82, height,SWP_NOACTIVATE);属性页的添加完成。
如果要添加多个属性页,则只需要增加多个对象,如下:m_tabsheet.AddPage(&m_skatch1);m_tabsheet.AddPage(&m_skatch2);. . . . . .2."List Control中标题栏(Column)的添加:创建一个List Control,其ID为IDC_LIST,在其Styles属性项下的View项里选择Report、Align 项里选择Top、Sort项里选择None.然后在该List所在对话框的类(头文件)里创建ClistCtrl的一个对象m_list然后在.cpp文件的OnInitDialog()之类的函数里实现如下代码:CString strname[3];strname[0]="Screen Name";strname[1]="Form ID";strname[2]="Category Path";for(int i=0;i<3;i++){m_List.InsertColumn(i,strname[i],LVCFMT_LEFT,130);}在这之前也要将List Control的ID与ClistCtrl的对象m_list在DoDataExchange(CDataExchange* pDX)函数里绑定,如下:DDX_Control(pDX, IDC_LIST, m_List);3."ToolBar和StatusBar中控件的添加:方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上).其次,新创建一个类CMainToolBar,要从CToolBar继承(创建过程大概如下:选择工程/增加到工程/新的类;也可以选择工程的根,然后点击右键,选择新的类;或者CTL+W,选择增加类/新的类--- 然后在class type里选择Generic Class,在Name栏里输入新类的名字,Base class 里输入CToolBar),创建成功后在该类里创建要增加的控件的对象,如:CComboBox""m_wndMyCombo;CStatic""m_wndCategory, m_wndCategoryPath;CButton""m_wndOpenButton;Cedit"""m_wndEdit;然后在构造函数里初始化如:m_wndMyCombo.m_hWnd = NULL;m_wndCategory.m_hWnd = NULL;m_wndCategoryPath.m_hWnd = NULL;m_wndOpenButton.m_hWnd = NULL;m_wndEdit.m_hWnd = NULL;接着在CMainframe的头文件里创建CMainToolBar的一个对象m_wndToolBar,最后在.cpp 文件的OnCreate函数的最后实现如下:"int index = 0;"CRect rect;// 可定义在头文件当中"//ComboBox"{""//找到指定的工具项""while(m_wndToolBar.GetItemID(index)!=ID_TOOL_COMBO)"""index++;""//设置指定工具项的宽度并获取新的区域120是宽度""m_wndToolBar.SetButtonInfo(index, ID_TOOL_COMBO, TBBS_SEPARATOR, 120); ""m_wndToolBar.GetItemRect(index, &rect);""""//设置位置""rect.top+=1;""rect.bottom += 200;""""// 创建并显示控件""if(!m_wndToolBar.m_wndMyCombo.Create(WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL|"""CBS_DROPDOWNLIST | CBS_HASSTRINGS , rect, &m_wndToolBar,ID_TOOL_COMBO))""{"""TRACE0("Failed to create combo-box\n");"""return FALSE;""m_wndToolBar.m_wndMyCombo.ShowWindow(SW_SHOW);""""//填充内容"""m_wndToolBar.m_wndMyCombo.AddString("25%");""m_wndToolBar.m_wndMyCombo.AddString("50%");""m_wndToolBar.m_wndMyCombo.AddString("75%");"""//选择默认项""m_wndToolBar.m_wndMyCombo.SetCurSel(0);""""//获取到内容并MSGBOX显示出来""CString strContent;""m_wndToolBar.m_wndMyCombo.GetWindowText(strContent);""index = 0;"}其他控件都类似创建(只需要注意一下各自的Create函数的参数即可)。
MFC中文件操作、查找与选择总结
MFC总结(一):MFC中文件操作、查找与选择总结(1)本文主要涉及以下几个方面,均为在MFC编程中较为常用的:CFile操作、CArchive操作、如何选择文件和文件夹、如何查找文件、获取当前目录、_access函数等。
(一)使用CFile类操作文件CFile类在MFC的文件操作中应该是最常用的了。
主要的成员函数有Open、Close、Write、Read、Seek、SeekToEnd、GetLength、GetPosition,具体用法见MSDN。
(1)文件打开操作:文件打开有两种方式,一种是先定义类对象,在用Open函数打开;一种是在定义类对象时传入文件名和打开方式。
分别如下CFile file;if(!file.Open(lpszFileName, nOpenFlags ))return;或CFile file(lpszFileName, nOpenFlags);(2)文件打开方式:文件打开方式,即上述nOpenFlags的值主要由一些宏定义的值组合而成,具体见MSDN,常用的有如下几种:A. CFile::modeCreate | CFile::modeNoTruncate |CFile::modeWrite,以写文件的方式打开,如果文件不存在,则新建文件,否则打开已有文件进行写入操作,此时不会清空原有文件;B. 将上述CFile::modeWrite更换为CFile::modeRead或者CFile::modeReadWrite可实现读操作或者同时读写。
(3)判断文件结束判断文件是否结束,没有结束则继续读取,否则关闭退出。
这点在编程时常用。
对于CFile常用的判断文件结束的方法是:while(file.GetPosition() < file.GetLength()){ //文件未结束//Add code ....}(4)值得注意的几点:A. 当文件名中包含路径时,要注意使用\\,如C:\\MyFile.DAT,在Unicode下时,需要使用_T("C:\\MyFile.DAT");B. 采用(2)中A方式写文件时,注意使用file.SeekToEnd()将文件指针移至文件尾,再写入,否则会覆盖已有的数据,这点经常被很多初学者忽视;C. 在打开文件后就要紧接着写下Close,养成这样的习惯,避免忘记关闭文件。
mfc中表格控件
MFC(Microsoft Foundation Classes)中的表格控件是一个功能强大的控件,用于在Windows 应用程序中显示和编辑表格数据。
它提供了一组丰富的功能和属性,使开发人员能够轻松地创建和管理表格界面。
以下是MFC中表格控件的一些主要功能:
1.单元格编辑:表格控件允许用户对单元格进行编辑,包括文本、数字和日期等数据类型。
开发人员可以自定义单元格的编辑行为,例如限制输入范围、验证输入数据等。
2.列头和行头:表格控件支持可自定义的列头和行头,开发人员可以设置列宽、列顺序、
列标题等属性,以提供更好的用户体验和数据呈现。
3.排序和筛选:表格控件提供了内置的排序和筛选功能,用户可以根据需要对数据进行排
序和筛选,以便更快地找到所需的信息。
4.数据绑定:表格控件可以与数据源进行绑定,例如数据库、数组或自定义数据结构。
开
发人员可以通过数据绑定来自动更新表格中的数据,而无需手动编写代码。
5.自定义绘制:表格控件允许开发人员自定义单元格、列头和行头的绘制方式。
开发人员
可以使用GDI+或其他图形库来绘制自定义的图形和文本,以满足特定的界面需求。
6.事件处理:表格控件提供了一组事件处理程序,使开发人员能够响应用户的交互操作,
例如单击、双击、拖动等。
开发人员可以根据需要编写事件处理函数来实现自定义的行为。
总的来说,MFC中的表格控件为开发人员提供了一种简单而强大的方式来创建和管理表格数据界面。
通过使用该控件,开发人员可以快速地构建出功能丰富、用户友好的Windows应用程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控件要关联变量。
快捷键CTRL+W
============================================================ 获取控件的内容(如获取edit控件的内容):UpdateData(true)
更新控件的内容():UpdateData(false)
============================================================ 初始化在***Dlg.cpp文件中的BOOL ***Dlg::OnInitDialog()函数中完成。
============================================================ 让控件变为不可用/可用:
GetDlgItem(IDC_BUTTON)->EnableWindow(FALSE);
///////让ID为IDC_ BUTTON的控件变成不可用。
参数改为TRUE则可用============================================================ GetDlgItem(IDC_EDIT)->SetFocus();
////////焦点聚焦到ID为IDC_EDIT的控件上,可以是BUTTON或EDIT或其他============================================================ 获取ENTER键的的办法
覆写以下虚函数
BOOL ***Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN) //此处判断是否按下回车键
return true;
return CDialog::PreTranslateMessage(pMsg);
}
注意要在类***Dlg的定义处对该函数进行声明。
============================================================ 将ID号为IDC_EDIT 的控件显示内容设置为“text”,可以是按钮,EDIT或其他:GetDlgItem(IDC_EDIT)-> SetWindowText("text");
============================================================ 将整形数据转换成CString的对象:将intnum整形数存放在temp中。
CString temp;
temp.Format(_T("%d"),intnum);
============================================================ 向List Box控件中添加内容:此处List Box控件ID为IDC_LIST。
CListBox *pCtrl = (CListBox *)GetDlgItem( IDC_LIST ) ; //获取控件指针
pCtrl->AddString(temp); //向控件添加数据temp
============================================================ 向文件追加内容:filepath_CString为文件路径,类型是CString类型CStdioFile mFile; //定义CStdioFile类对象
mFile.Open(filepath_CString,CFile::modeCreate|CFile::modeWrite|CFile::mode NoTruncate);
if(mFile == NULL)
{////对文件操作之前,先判断文件是否正常打开或新建}
mFile.SeekToEnd(); ////将文件指针移动到文件结尾
mFile.WriteString(temp); /////向该位置写入数据
mFile.WriteString("\n"); /////写入换行
mFile.Close(); ///操作完成后要关闭文件
============================================================ 将CString类型数据转换成C语言中的字符型数组:
在cpath字符数组中存放CString对象path的内容。
for(int i=0;i<path.GetLength();i++)
cpath[i]=path[i];
cpath[i]='\0';
============================================================ fscanf(myfile,"%s %s\n",idnum,readtemp) 格式化读取从文件中
============================================================。