MFC常用的类及其成员函数简介
MFC类库的基本类
MFC类库是一个层次结构,主要有CObject类、应用程序类、可视对象类、绘图和打印类、通用类、数据库类、Internet和网络类、OLE类。
(1)CObject类CObject类是MFC的抽象基类,MFC中的大多数类是从CObject类派生出来的。
它是MFC 中多数类和用户自定义的根类,该类为程序员提供了希望融入所编写程序的许多公共操作,包括对象的建立和删除、串行化支持、对象诊断输出、运行时信息以及集合类的兼容等。
CObject类的声明在Afx.h中。
(2)应用程序结构类该类主要用于构造框架应用程序的结构,提供了多数应用程序公用的功能.编写程序的任务是填充框架,添加应用程序专有的功能。
1.应用程序和线程支持类CWinThread类是所有线程的基类,窗口应用程序类CWinApp类就是从该类中派生来的。
每个应用程序有且只有一个应用程序对象,在运行程序中该对象和其他对象相互协调,该对象从CWinApp中派生出来。
该类封装了初始化、运行、终止应用程序的代码。
2.命令相关类CCmdTarget类是CObject的子类,它是MFC所有具有消息映射属性的基类。
消息映射规定了当一对象接收到消息命令时,应调用哪个函数对该消息进行处理。
程序员很少需要从CCmdTarget类中直接派生出新类,往往都是从它的子类中派生出新类。
如窗口类(CWnd)、应用程序类(CWinApp)、文档模板类(CDocTemplate)、视类(CView)及框架窗口类(CFrameWnd)等。
3.文档类文档对象由文档对象模板创建,用于管理应用程序的数据。
视图对象表示一个窗口的客户区,用于显示文档数据并允许读者与之交互。
有关文档/视结构的类如下:①CDocTemplate类:文档模板的基类。
文档模板用于协调文档、视图和框架窗口的创建。
②CSingleDocTemplate类:单文档界面(SDI)的文档模板。
③CMultiDocTemplate类:多文档界面(MDI)的文档模板。
MFC消息处理函数总结解读
MFC消息处理函数总结解读MFC(Microsoft Foundation Classes)是Windows编程中常用的框架之一,它提供了一组面向对象的类库,帮助开发人员更轻松地构建Windows应用程序。
在MFC中,消息处理函数是非常重要的一部分,它们用于处理窗口消息,包括按键事件、鼠标事件等,可以响应用户的操作。
消息处理函数的基本格式如下:```afx_msg LRESULT OnMessage(WPARAM wParam, LPARAM lParam);```其中afx_msg是一个宏定义,用于指示该函数为一个MFC消息处理函数。
LRESULT是一个32位整数,用于返回消息处理结果。
OnMessage是函数名,可以根据实际需求进行命名。
wParam和lParam是消息的参数,根据不同的消息类型可以传递不同的值。
下面是对常见的消息处理函数的解读。
1. OnCreateOnCreate消息处理函数在窗口创建时被调用,可以进行一些初始化操作。
例如创建子窗口、加载资源等。
可以通过返回-1来取消窗口的创建。
2. OnDestroyOnDestroy消息处理函数在窗口销毁时被调用,可以进行一些资源的释放操作。
例如关闭文件、释放内存等。
3. OnPaintOnPaint消息处理函数在窗口需要重绘时被调用,可以进行绘图操作。
通常会使用GDI(图形设备接口)函数进行绘图,例如绘制文本、绘制图形等。
4. OnSizeOnSize消息处理函数在窗口大小改变时被调用,可以根据新的窗口大小进行调整。
例如重新设置子窗口的位置和大小。
5. OnKeyDownOnKeyDown消息处理函数在键盘按键被按下时被调用,可以响应用户的按键操作。
可以根据不同的按键进行不同的处理,例如响应回车键、删除键等。
6. OnMouseMoveOnMouseMove消息处理函数在鼠标移动时被调用,可以获取鼠标的当前位置。
可以根据鼠标位置进行一些操作,例如绘制跟随鼠标的图形、显示鼠标所在位置的坐标等。
MFC各类库详解
1.MFC概述1.MFC是一个编程框架MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。
Microsoft Visual 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常用类介绍
MFC常用类介绍(一)C++学习 2010-06-27 11:43:05 阅读332 评论0 字号:大中小订阅CStaticCObject└CCmdTarget└CWnd└CStaticCStatic类提供了一个Windows静态控件的性能。
一个静态控件用来显示一个文本字符串,框,矩形,图标,光标,位图,或增强的图元文件。
它可以被用来作为标签,框,或用来分隔其它的控件。
一个静态控件不接收输入,也不提供输出;但是,如果它是用SS_NOTIFY风格创建的,则它可以通知其父有关设备点击的消息。
创建一个静态控件分两步。
首先,调用构造函数来构造此CStatic对象,然后调用Create成员函数来创建此静态控件并将它与该CStatic对象连接。
如果你是在一个对话框中创建了一个静态控件(通过一个对话框资源),则当用户关闭这个对话框时,此CStatic对象被自动销毁。
如果你是在一个窗口中创建了一个CStatic对象,则必须由你来销毁它。
在一个窗口的堆栈中创建的CStatic对象将自动被销毁。
如果你是使用new函数在堆中创建CStatic对象,则当你使用完后,必须调用delete来销毁这个CStatic 对象。
#include<afxwin.h>请参阅:CWnd,CButton,CComboBox,CEdit,CListBox,CScrollBar,CDialogCStatic类成员构造CStatic构造一个CStatic对象初始化Create创建Windows静态控件并将它与该CStatic对象连接操作符SetBitmap指定要在此静态控件中显示的位图GetBitmap获取先前用SetBitmap设置的位图的句柄SetIcon指定一个要在此静态控件中显示的图标GetIcon获取先前用SetIcon设置的图标的句柄SetCursor指定要显示在此静态控件中的光标图像GetCursor获取先前用SetCursor设置的光标图像的句柄SetEnhMetaFile指定要显示在此静态控件中的增强的图元文件GetEnhMetaFile获取先前用SetEnhMetaFile设置的增强图元文件的句柄CEditCObject└CCmdTarget└CWnd└CEditCEdit类提供了Windows编辑控件中的功能。
MFC中文档视图框架和文档模板之间的关系 四个类常用的成员函数
文档对象:是用来保存数据的。
视图对象:是用来显示和编辑数据的。
应用程序框架:框架是用来管理不同文档显示界面的。
例如你有一个数据网格显示界面,还有一个图形显示界面,它们的数据可能都来自你的文档,但是视图不同,怎么办用框架。
为什么不用视图?为的是把界面管理独立的拿出来。
文档模板:MFC把文档/视图/框架视为一体,只要你创建文档/视图框架结构的程序,必定会为你创建这三个类。
这个工作在在应用程序初始化时完成,如下:[cpp]view plaincopy1.BOOL CMyHtmlApp::InitInstance()2.{3. CSingleDocTemplate* pDocTemplate;4. pDocTemplate = new CSingleDocTemplate(5. IDR_MAINFRAME,6. RUNTIME_CLASS(CMyHtmlDoc),7. RUNTIME_CLASS(CMainFrame), // main SDI frame window8. RUNTIME_CLASS(CMyHtmlView));9. AddDocTemplate(pDocTemplate);10. }单文档:就是一次只能打开一个文件,和你的文档类型支持的多少无关。
你完全可以做一个单文档的支持所有图象格式的程序,只不过它一次只能打开一个文档罢了。
多文档:就是你可以打开多个文件,和文档类型也无关。
你也可以作一个可以同时打开多个文档的程序,但它只支持一种文档类型。
何时需要文档/视图框架结构?首先你可以不使用文档视图这种框架结构,即便是在MFC中。
你可以在你需要的时候选择使用这种方式。
你可以完成一个只有视图没有文档的程序,例如一个基于对话框的应用。
哪什么时候需要呢?当你想将你的数据层和界面层分开的时候。
通常我们对数据的操作放在文档类中,例如存取,打开,关闭。
在这里你可以尽情的对你的数据进行操作,如果你需要,在对数据进行了改变后,对视图做一下更新,那么程序会将你对数据所做的改变呈现给你的程序的用户。
mfc2019 类库参考手册
mfc2019 类库参考手册MFC 2019 类库参考手册一、概述MFC(Microsoft Foundation Class)是微软公司为了简化Windows 应用程序开发而开发的类库。
本手册将详细介绍MFC 2019类库的各个模块,包括类的定义、成员函数、属性和示例等内容,为开发人员提供全面且准确的参考。
二、基础类1. CObject类CObject类是MFC类库的基类,所有MFC类都从该类派生。
本节将介绍CObject类的成员函数、构造函数和析构函数。
2. CWnd类CWnd类封装了Windows窗口的操作。
本节将介绍CWnd类的常用成员函数,如Create、ShowWindow和SendMessage等。
3. CWinApp类CWinApp类是一个应用程序对象类,每个MFC应用程序都必须拥有一个CWinApp类的派生类。
本节将介绍CWinApp类的初始化、消息循环和资源管理等功能。
三、窗口和控件类1. CFrameWnd类CFrameWnd类是MFC应用程序的主框架窗口类,它提供了标题栏、菜单、工具栏和状态栏等功能。
本节将介绍CFrameWnd类的创建和布局等操作。
2. CDialog类CDialog类是MFC应用程序中常用的对话框类,用于创建模态或非模态对话框。
本节将介绍CDialog类的创建和消息处理等方法。
3. CButton类CButton类封装了Windows中的按钮控件,提供了按钮的创建、属性设置和消息处理等功能。
本节将介绍CButton类的常用成员函数,如Create、SetCheck和EnableWindow等。
4. CEdit类CEdit类封装了Windows中的编辑框控件,可用于接受用户的输入和显示文本内容。
本节将介绍CEdit类的创建、文本操作和消息处理等方法。
四、绘图和界面类1. CDC类CDC类提供了对设备上下文的封装,用于进行绘图和界面操作。
本节将介绍CDC类的绘图函数,如LineTo、Rectangle和TextOut等。
mfc项目中使用三角函数
mfc项目中使用三角函数MFC(Microsoft Foundation Classes)是一种基于C++的开发框架,用于开发Windows应用程序。
在MFC项目中,我们经常需要使用三角函数来进行各种数学计算和图形绘制。
三角函数是数学中的重要概念,包括正弦函数、余弦函数和正切函数。
在本文中,我们将介绍在MFC项目中如何使用三角函数,并结合实际案例详细说明其应用。
我们来了解一下三角函数的基本概念。
正弦函数(sine function)是一个周期函数,表示一个角的对边与斜边的比值;余弦函数(cosine function)也是一个周期函数,表示一个角的邻边与斜边的比值;正切函数(tangent function)是一个周期函数,表示一个角的对边与邻边的比值。
在数学中,我们通常用sin、cos和tan 来表示这三个函数。
在MFC项目中,我们经常需要使用三角函数来进行角度转换、图形变换和动画效果等计算。
例如,我们可以使用正弦函数来模拟物体的上下抖动效果,通过改变正弦函数的参数来控制抖动的幅度和频率。
同样地,余弦函数可以用来模拟物体的左右摆动效果,而正切函数则可以用来实现物体沿着曲线运动的效果。
三角函数还可以用来进行图形绘制。
在MFC中,我们可以使用GDI(Graphics Device Interface)来绘制各种图形,包括直线、矩形、圆形等。
而三角函数可以帮助我们计算出图形的坐标点,从而实现各种复杂的图形效果。
例如,我们可以使用正弦函数来绘制波浪线,通过改变正弦函数的参数来控制波浪的振幅和周期。
同样地,余弦函数可以用来绘制螺旋线,而正切函数则可以用来绘制椭圆曲线。
除了图形绘制,三角函数在计算机图形学中还有许多其他应用。
例如,我们可以使用正弦函数来模拟光线的折射和反射效果,通过改变正弦函数的参数来控制折射和反射的角度。
同样地,余弦函数可以用来计算两个向量之间的夹角,而正切函数则可以用来计算两个点之间的斜率。
MFC中常用函数
1.IsEmpty()函数判断一对象是否初始化,返回布尔值.表达式 IsEmpty(expression)实例: <%Dim iresponse.write IsEmpty(i)%>返回结果: true2. GetAt函数原型:TCHAR GetAt( int nIndex ) const;函数返回值:字符中第nIndex个字符(从0开始).Header: atlcoll.h注意:nIndex的最大值可由GetUpperBound()得到。
若nIndex小于0或大于最大值,将返回错误。
3. isdigitisdigit原型:extern int isdigit(char c);用法:#include <ctype.h>功能:判断字符c是否为数字说明:当c为数字0-9时,返回非零值,否则返回零。
附加说明此为宏定义,非真正函数。
相关函数:isalnum,isalpha,isxdigit,iscntrl,isgraph,isprint,i spunct,isspace4. isalnum原型:extern int isalnum(int c);用法:#include <ctype.h>功能:判断字符变量c是否为字母或数字说明:当c为数字0-9或字母a-z及A-Z时,返回非零值,否则返回零。
5. isalpha函数:isalpha原型:int isalpha(int ch)用法:头文件加入#include <cctype>(旧版本的编译器使用<ctype.h>)功能:判断字符ch是否为英文字母,当ch为英文字母a-z或A-Z时,在标准c中相当于使用“isupper(ch)||islower(ch)”做测试,返回非零值,否则返回零。
PS:{isupper原型:extern int isupper(int c);头文件:<cctype>(旧版本的编译器使用<ctype.h>) 功能:判断字符c是否为大写英文字母说明:当参数c为大写英文字母(A-Z)时,返回非零值,否则返回零。
MFC常用的类及其成员函数简介
MFC常用类及其成员函数CRuntimeClass结构在CRuntimeClass结构中定义了类名、对象所占存储空间的大小、类的版本号等成员变量及动态创建对象、派生关系判断等成员函数。
每一个从CObject 类派生的类都有一个CRuntimeClass结构同它关联,以便完成在运行时得到对象的信息或基类的信息。
要使用CRuntimeClass结构,必须结合使用RUNTIME_CLASS()宏和其他有关运行时类型识别的MFC宏。
CCmdTarget类(1)消息发送MFC应用程序为每个CCmdTarget派生类创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。
(2)设置光标BeginWaitCursor() 将光标改为沙漏形状;EndWaitCursor() 将光标改回到之前的形状;RestoreWaitCursor()用于将光标还原为等待状态。
(3)支持自动化CCmdTarget类支持程序通过COM接口进行交互操作,自动翻译COM接口的方法。
CWinThread类由CCmdTarget派生,主要工作是创建和处理消息循环。
CWinApp类从CWinThread类派生,成员函数InitApplication()、InitInstance()、Run()。
在InitInstance()函数中,创建了一个单文档模板类或多文档模板类(CDocTemplate)的对象,并且在文档模板的构造函数中,系统定义的宏RUNTIME_CLASS创建了文档类对象,框架窗口类对象和视图类对象.在MFC应用程序中有且仅有一个CWinApp派生类的对象,代表程序运行的主线程,代表应用程序本身。
CWnd类由CCmdTarget类直接派生,是MFC中最基本的GUI对象。
公共变量m_hWnd 用于存放供API函数调用的窗口句柄。
CframeWnd类从CWnd类派生而来,主要用来掌管一个窗口。
其对象是一个框架窗口,包括边界、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。
MFC常用类-链表类
MFC常用类-链表类MFC的链表类模板类Clist CTypedPtrList非模板类CObList CPtrList CStringListMFC链表类的常用成员函数——以Clist为例1.CList(int nBlockSize = 10 );2.TYPE GetHead()const;3.TYPE GetTail()const;4.RemoveHead()5.RemoveTail()6.原型1:POSITION AddHead(ARG_TYPE newElement );原型2:void AddHead(CList* pNewList );7.原型1:POSITION AddTail(ARG_TYPE newElement );原型2:void AddT ail(CList* pNewList );8.RemoveAll()9.POSITION GetHeadPosition()const;10.POSITION GetTailPosition()const;11.TYPE GetNext(POSITION& rPosition )const;12.TYPE GetPrev(POSITION& rPosition )const;13.TYPE GetAt(POSITION position )const;14.void SetAt(POSITION pos, ARG_TYPE newElement );15.void RemoveAt(POSITION position );16.POSITION InsertBefore(POSITION position, ARG_TYPE newElement );17.POSITION InsertAfter(POSITION position, ARG_TYPE newElement ); 18.POSITION Find(ARG_TYPE searchValue, POSITION startAfter = NULL)const;19.POSITION FindIndex(int nIndex )const;20.int GetCount()const;21.BOOL IsEmpty()const;例题struct CStudent{CString m_strName;int m_nScore;};CPtrList m_List;向添加链表中添加元素CStudent* m_pStudent = new CStudent;m_pStudent->m_strName = m_strName;m_pStudent->m_nScore = m_nScore;m_List.AddTail(m_pStudent);删除节点int nNumber;CStudent* m_pStudent = NULL;if (m_List.IsEmpty())MessageBox("结点已经全部删除!");else{if (m_nRadio == 0)m_pStudent = (CStudent*)m_List.RemoveHead(); else if(m_nRadio == 1)m_pStudent = (CStudent*)m_List.RemoveTail(); else{if(nNumber < m_List.GetCount()){POSITION pos = m_List.FindIndex(m_nNumber); POSITION pos1 = pos;m_pStudent = (CStudent*)m_List.GetNext(pos1);m_List.RemoveAt(pos);}else{MessageBox("指定结点超出范围!");}}if(m_pStudent)delete m_pStudent;}遍历链表POSITION pos = m_List.GetHeadPosition();while (pos != NULL){CStudent* m_pStudent = (CStudent*) m_List.GetNext(pos); char s[81];wsprintf(s, " 的成绩是%d.",m_pStudent->m_nScore); CString m_string=m_pStudent->m_strName+s;}// 声名一个CStringListCStringList list;// 初始化两个CStringCString str1 = "Good morning ";CString str2 = "李逍遥";// 添加到列表中list.AddTail( str1 );list.AddTail( str2 );// 获得长度int length = list.GetCount();// 获得尾部位置POSITION posTail = list.GetTailPosition();// 输出所有元素for (POSITION pos = list.GetHeadPosition(); pos != NULL;) { CString str = list.GetNext(pos);TRACE0(str);}。
MFC数据类型
/*以上为winnt.h的部分内容*/
#define __T(x) x tchar.h // ndef _UNICODE
#define _T(x) __T(x) tchar.h
#define _TEXT(x) __T(x) tchar.h
typedef unsigned char UCHAR; windef.h
YTE; windef.h
typedef wchar_t WCHAR; //声明一个16位的UNICODE字符,用来表示世界上所有已知的书写语言的符号winnt.h
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制
// tchar.h
#ifdef _UNICODE
typedef wchar_t _TCHAR;
typedef wchar_t TCHAR;
#else /* ndef _UNICODE */
typedef char _TCHAR;
typedef char TCHAR;
#define __TEXT(quote) L##quote winnt.h // r_winnt
//以上的_T、__T、_TEXT、__TEXT、L宏使字符串会自动根据工程的版本(ANSI还是UNICODE)进行转化. 使代码不需修改自动适应ASNI和UNICODE版本
typedef WCHAR OLECHAR; wtypes.h
MFC函数大全
Detach p53
FromHandle p53
GetSafeHwnd p54
SetThreadPriority
SuspendThread
ExitInstance
InitInstance
IsIdleMessage
OnIdle
PreTranslateMessage
ProcessMessageFilter
ProcessWndProcExcetion
PumpMessage
Run
CWinApp
AddDocTemplate
AddToRecentFileList
CreatePrinterDC
GetFirstDocTemplatePosition
GetNextDocTemplate
GetProfileBinary
GetProfileInt
class CPerson : public CObject
{
protected:
CString m_strName;
float m_salary;
public:
#ifdef _DEBUG
// Override
virtual void AssertValid() const;
CenterWindow p63
ChildWindowFromPoint p63
FindWindow p63
MFC常用控件
MFC常用控件
2021/7/1
1
对话框的组成
在VC++中,对话框主要是由对话框资源和对话框类组 成:
1. 对话框资源
对话框资源中描述的是对话框的大小、风格等特性, 以及对话框中控件的类型和它们的位置。定义对话框 资源最简单、最有效的方法就是使用Visual C++中的 资源编辑器。
2. 对话框类
10数据交换mfc类库使用数据交换ddx机制在对话框的控件和对话框类的数据成员之间交换数据updatedatatrue将数据从对话框的控制传递到对话框对象的数据成员缺省的调用在对话框的onokupdatedatafalse将数据传送到对话框中缺省的调用发生在对话框的oninitdialog创建一个有模式对用户可以在任何时候调用updatedata进行数据交换该函数参数缺省值为true
静态文本控件(Static Text Control); 静态图片(Picture Control);属性有:Center,image,Real
size,Type,Image和Color
2021/7/1
11
按钮
常见的按钮有如下几种类型:命令按钮、单选按钮和复选 按钮。
➢ 命令按钮(button):命令按钮适用于消息的发送,通常用于执行某个命 令。
2021/7/1
21
mfc的cbinary的用法
mfc的cbinary的用法
CBinary是MFC(Microsoft Foundation Classes)中的一个类,用于处理二进制数据。
它提供了一些功能来读取、写入和操作二进制数据。
CBinary类的一些常用的成员函数和方法包括:
1.构造函数和析构函数:使用CBinary的构造函数进行初始化,并使用析构函数进行清理。
2. SetData和GetData:SetData方法用于设置二进制数据,GetData方法用于获取二进制数据。
3. GetSize:获取二进制数据的大小。
4. Load和Save:Load方法从文件或流中加载二进制数据,Save 方法将二进制数据保存到文件或流。
5. Append和Insert:Append方法用于在二进制数据末尾追加新的数据,Insert方法用于在指定位置插入数据。
6. Remove和Clear:Remove方法用于删除指定位置处的数据,Clear方法用于清空所有数据。
7. Find和FindLast:Find方法用于在二进制数据中查找指定的
字节序列,FindLast方法查找最后一个匹配的字节序列。
拓展:
除了上面提到的基本功能,CBinary还可以用于处理二进制文件的读写、数据加密和解密等应用。
可以使用CBinary在内存中创建一个
二进制数据块,然后通过读取/写入文件或发送/接收网络数据等方式,对二进制数据进行读写操作。
此外,CBinary还有一些其他与二进制数据处理相关的功能,如截取子数据块、合并多个二进制数据块等。
总之,CBinary是MFC中用于处理二进制数据的一个类,提供了许多用于读取、写入和操作二进制数据的方法和功能。
MFC线程间通信方法和相关类,api函数的详细介绍和例子
2、线程的管理和操作
(一)线程的启动
创建一个用户界面线程,首先要从类CwinThread产生一个派生类,同时必须使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE来声明和实现这个CwinThread派生类。第二步是根据需要重载该派生类的一些成员函数如:ExitInstance()、InitInstance()、OnIdle()、PreTranslateMessage()等函数。最后调用AfxBeginThread()函数的一个版本:CWinThread*
//The Thread Function;
UINT ThreadFunction(LPVOID pParam)//线程函数
{
while(!bend)
{
Beep(100,100);
Sleep(1000);
}
return 0;
}
/////////////////////////////////////////////////////////////
线程被分为两种:用户界面线程和工作线程(又称为后台线程)。用户界面线程通常用来处理用户的输入并响应各种事件和消息,其实,应用程序的主执行线程CWinAPP对象就是一个用户界面线程,当应用程序启动时自动创建和启动,同样它的终止也意味着该程序的结束,进程终止。工作线程用来执行程序的后台处理任务,比如计算、调度、对串口的读写操作等,它和用户界面线程的区别是它不用从CWinThread类派生来创建,对它来说最重要的是如何实现工作线程任务的运行控制函数。工作线程和用户界面线程启动时要调用同一个函数的不同版本;最后需要读者明白的是,一个进程中的所有线程共享它们父进程的变量,但同时每个线程可以拥有自己的变量。
VS2010和MFC编程入门之43(MFC常用类:CTime类和CTimeSpan类)
VS2010MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)理解了MFC常用类CString类的用法,这里继续讲另外两个MFC常用类-日期和时间类CTime类和CTimeSpan类。
日期和时间类简介CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。
CTimeSpan类的对象表示的是时间间隔。
CTime类和CTimeSpan类一般不会被继承使用。
两者对象的大小都是8个字节。
CTime表示的日期上限是3000年12月31日,下限是1970年1月1日 12:00:00 AM GMT。
CTime类的主要成员函数下面列出CTime类的主要成员函数,并加以讲解。
CTime();构造一个未经初始化的CTime对象。
此构造函数使我们可以定义一个CTime对象的数组,在使用数组前需要以有效的时间值为其初始化。
CTime(__time64_t time);以一个__time64_t(注意:最前面的下划线有两条)类型的数据来构造一个CTime对象。
参数time是一个__time64_t类型的值,表示自GMT时间1970年1月1日零点以来的秒数,这里要注意的是,参数time代表的时间会转换为本地时间保存到构造的CTime对象中。
例如,我们传递参数0构造一个CTime对象,然后调用CTime对象的GetHour成员函数将返回8,因为参数0代表的GMT时间转换为北京时间后为1970年1月1日 8:00:00。
CTime(intnYear,intnMonth,intnDay,intnHour,intnMin,intnSec,intnDST = -1);以本地时间的年、月、日、小时、分钟、秒等几个时间分量构造CTime对象。
参数nYear、nMonth、nDay、nHour、nMin、nSec分别表示年、月、日、小时、分钟、秒,取值范围如下:时间分量取值范围nYear1970-3000nMonth 1-12nDay 1-31nHour 0-23nMin 0-59nSec 0-59参数nDST指定是否实行夏令时,为0时表示实行标准时间,为正数时表示实行夏令时,为负数时由系统自动计算实行的是标准时间还是夏令时。
c++ mfc en_killfocus函数详解
c++ mfc en_killfocus函数详解在MicrosoftFoundationClass(MFC)库中,EN_KILLFOCUS消息是一种常见的用户交互事件,它在控件的焦点消失时触发。
这通常意味着用户已经点击了另一个控件或者Tab键改变了焦点。
对于这种事件,MFC提供了一个处理函数——EN_KILLFOCUS消息处理函数。
一、EN_KILLFOCUS消息详解EN_KILLFOCUS消息是一种嵌入在控件的消息,当控件的焦点失去时触发。
这对于跟踪用户的行为和响应用户的交互非常有用。
一般来说,这个消息用于控制焦点变化的程序逻辑,比如在失去焦点时执行某些操作。
二、EN_KILLFOCUS处理函数——CWnd类的En_KillFocus成员函数对于EN_KILLFOCUS消息,MFC提供了一个默认的处理器——En_KillFocus成员函数。
这个函数通常被控件的窗口类(CWnd派生类)覆盖,以执行特定的逻辑。
三、En_KillFocus函数的实现En_KillFocus函数通常接受一个指向MESSAGE_RESULT结构体的指针,该结构体包含了处理消息的结果。
这个函数通常会检查是否需要执行特定的逻辑,比如保存输入状态、更新界面等。
四、使用En_KillFocus函数的示例下面是一个使用En_KillFocus函数的简单示例:1.首先,需要在相应的控件类中覆盖En_KillFocus函数:```cppBEGIN_MESSAGE_MAP(CMyControl,CWnd)ON_MESSAGE(WM_EN_KILLFOCUS,OnEnKillfocus)END_MESSAGE_MAP()LRESULTCMyControl::OnEnKillfocus(WPARAMwParam,LPARAMlParam){//执行一些逻辑,比如保存输入状态或更新界面return0;//返回0表示继续处理消息队列中的其他消息}```2.然后,在需要处理焦点丢失的代码中,可以通过发送相应的消息给控件来触发焦点丢失:```cpp//触发焦点丢失GetParent()->PostMessage(WM_CHILD_KILLFOCUS,0,0);//GetParent()返回控件的父窗口对象```五、总结EN_KILLFOCUS消息是MFC库中用于处理控件焦点丢失的一种常见机制。
MFC编辑框、静态文本框相关的常用函数
《1》GetDlgItemText(ID ,str)作用:从对话框中获取文本第一个参数为要获取的编辑框(或者静态文本框、单选按钮等可以显示内容的控件)的ID,第二个参数为字符串(Cstring 类型)的变量,获取的文本存储在str中。
《2》SetDlgItemText(ID,str)作用:将字符串显示在控件中第一个参数为要显示的编辑框(或者静态文本框、单选按钮、组合框等可以显示内容的控件)的ID,第二个参数为字符串(Cstring 类型)的变量,显示的文本存储在str中。
如果要显示的变量的类型不是Cstring,则通过Format函数强制转换。
通常还要加一个UpDateData(FALSE)。
《3》UINT nID=GetCheckedRadioButton(IDC1, IDC2);作用:获取单选框的选项的ID第一个参数为该组合框中第一个单选按钮的ID,第二个参数为该组合框中最后一个按钮的ID。
《4》CheckRadioButton(IDC1, IDC2, IDC3);作用:初始化单选按钮第一个参数为该组合框中第一个单选按钮的ID,第二个参数为该组合框中最后一个按钮的ID,第三个参数为为缺省选项的ID。
《5》m_scrollBar.SetScrollRange(0, 500) ;作用:设置水平滚动条的取值范围,m_scrollBar为水平滚动条的控制类型的变量,0为设置最小值,500为设置的最大值。
《6》m_nAmount = m_slider.GetPos() ;作用:获取滑块的当前位置。
《7》m_slider.SetRange(0,1000) ;作用://设置滑块取值范围第一个参数为设置的最小值,第二个参数为设置的最大值。
《8》double Volum = atof(strCtrl);作用:将字符串strCtl转换成浮点型的Volum《9》int Volum = atof(strCtrl);作用:将字符串strCtl转换成整型的Volum《10》MessageBox(str) ;(局部函数)作用:输出字符串str《11》AfxMessageBox(str) ;(全局函数)作用:输出字符串str《12》tempt = m_time2.Format("%H:%m:%S") ;作用:将时间转化成字符型(时、分、秒)m_time2为日历时间选取器的变量,tempt为CString型变量《13》tempt = m_time.Format("%Y-%m-%d") ;//将时间转化成字符型作用:将时间转化成字符型(年、月、日)m_time2为日历时间选取器的变量,tempt为CString型变量《14》m_time = CTime::GetCurrentTime();作用:获取系统当前时间m_time为Ctime类型的变量。
MFC基本介绍
MFC基本介绍MFC的类层次结构:如上图所⽰:CObject:是MFC提供的绝⼤多数类的基类。
该类完成动态空间的分配与回收,⽀持⼀般的诊断、出错信息处理和⽂档序列化等。
CCmdTarget:主要负责将系统事件(消息)和窗⼝事件(消息),发送给响应这些事件的对象,完成消息发送、等待和派遣调度等⼯作,实现应⽤程序的对象之间协调运⾏。
CWinApp:是应⽤程序的主线程类,它是从CWinThread类派⽣⽽来的。
CWinThread类⽤来完成对线程的控制,包括线程的创建、运⾏、终⽌和挂起等。
CDocument:是⽂档类,包含了应⽤程序运⾏期间所⽤到的数据。
CWnd:是⼀个通⽤的窗⼝类,⽤来提供Windows中的所有通⽤特性、对话框和控件。
⼀个MFC程序,必须包含⼀个派⽣⾃CWinApp的线程类,即C*App类,每⼀个MFC框架程序中都有且只有⼀个C*App的全局变量(对象)即theApp。
MFC正是利⽤类的这种"⾃动调⽤相应的构造函数"特性,使得WinMain()函数的调⽤变成了应⽤程序框架内部的调⽤,所以我们在代码中看不到每个Windows程序所必须有的WinMain()函数。
C++规定,全局对象的构建将⽐程序进⼊点(在dos环境下为main,在Windows环境为WinMain)更早。
所以theApp的构造函数将更早与main。
C++中⼦类的构造函数执⾏在⽗类之后。
系统执⾏theApp的够造函数时,先调⽤基类(CObject-->....CWinApp)的构造函数,进⾏⼀系列的内部初始化操作,然后⾃动调⽤C*App的虚函数InitInstance(),该函数会进⼀步调⽤相应的函数来完成主窗⼝的构造和显⽰⼯作。
下⾯来看看上述程序中InitInstance的执⾏过程。
⾸先执⾏的是:m_pMainWnd = new CMainFrame;该语句⽤来创建从CFrameWnd类派⽣⽽来的⽤户框架窗⼝CMainFrame类对象,继⽽调⽤该类的构造函数,使得Create函数被调⽤,完成了窗⼝创建⼯作。