MFC常用函数

合集下载

mfc getcount()使用方法

mfc getcount()使用方法

MFC GetCount()使用方法1. 简介MFC(Microsoft Foundation Class)是一套由微软公司开发的C++类库,用于快速开发Windows应用程序。

MFC库提供了各种类和函数,方便开发人员进行窗口、对话框、图形、文本等元素的操作。

其中,GetCount()是MFC中常用的函数之一,用于获取某个对象中元素的数量。

本文将介绍MFC GetCount()函数的使用方法,帮助开发人员更好地理解和应用这一函数。

2. GetCount()函数的定义在MFC中,GetCount()函数通常用于获取容器类(如数组、链表、映射表等)中元素的数量。

该函数的定义如下:```cppint GetCount() const;```其中,函数返回一个整数值,表示容器中元素的数量。

该函数是一个成员函数,通过对象调用,但不会修改对象的状态,因此被声明为const成员函数。

3. 使用示例下面通过一个简单的数组示例来演示GetCount()函数的使用方法:```cpp#include <afx.h> //包含MFC头文件void TestGetCount(){CArray<int, int> arr; //声明一个整型数组对象arr.Add(1); //向数组中添加元素arr.Add(2);arr.Add(3);int count = arr.GetCount(); //使用GetCount()函数获取数组中元素的数量TRACE("数组中元素的数量为:d\n", count);}```在上面的示例中,首先通过`#include <afx.h>`包含MFC的头文件,然后声明一个整型数组对象arr,并向数组中添加了3个元素。

接着使用GetCount()函数获取数组中元素的数量,并通过TRACE宏输出到调试输出窗口。

4. 注意事项在使用GetCount()函数时,需要注意一些事项:- GetCount()函数只能用于MFC提供的容器类(如CArray、CList、CMap等),对普通的数组或STL容器(如vector、list、map)无效。

mfc invalidate函数

mfc invalidate函数

mfc invalidate函数MFC中的invalidate函数是一种用于更新窗口或视图区域的函数,它可以告诉操作系统强制重绘指定的矩形区域。

invalidate函数是MFC和Windows API中最常用的函数之一,它可以实现许多不同的功能,包括绘制图形、更新文本、改变控件状态等。

invalidate函数的使用非常灵活,可以根据需要选择不同的参数。

最常用的参数是invalidateRect函数,它需要传递一个CRect类型的参数来指定需要更新的矩形区域。

该矩形区域由左上角和右下角坐标指定,可以是整个窗口或视图区域,也可以是一个特定的控件或文本框。

在使用invalidate函数之前,应该先了解Windows系统的绘图机制。

在Windows中,绘图分为两个部分:用户接口和设备接口。

用户接口是指应用程序和屏幕之间的接口,设备接口是指操作系统和显示设备之间的接口。

invalidate函数是通过用户接口向操作系统发送指令,告诉它需要进行重绘操作。

在MFC中,invalidate函数的调用方式也非常简单。

只需要在需要更新的地方调用invalidateRect函数,并传递一个CRect类型的参数即可。

此时,操作系统会收到重绘指令,并在需要的时候重新绘制该区域。

MFC还提供了其他一些invalidate函数,包括invalidateRgn函数、invalidateRect函数的重载等。

这些函数可以根据需要选择不同的参数来实现不同的功能。

另外,需要注意的是,invalidate函数只是发出了重绘指令,并不直接进行绘图操作。

实际的重绘操作由操作系统和显示设备完成,因此需要合理地使用invalidate函数,以避免出现绘图错误或效率低下等问题。

同时,invalidate函数的调用也需要考虑到程序的运行状态和需要更新的区域,以避免出现过多无效的重绘操作和闪烁等问题。

综上所述,MFC中的invalidate函数是一种非常有用的函数,它可以实现窗口或视图区域的更新操作,同时也需要注意合理使用,以避免出现不必要的问题。

mfc函数详解

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消息处理函数总结解读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函数

MFC函数

MFC常用函数(为整理完全,待续)华东理工大学张耀2012年8月1.消息结构体typedef struct tagMSG {HWND hwnd;UINT message;WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;} MSG;2. int WINAPI WinMain(HINSTANCE hInstance, // handle to current instanceHINSTANCE hPrevInstance, // handle to previous instanceLPSTR lpCmdLine, // pointer to command lineint nCmdShow // show state of window)3. typedef struct _WNDCLASS {UINT style; 窗口样式 CS_HREDRAW等CS_WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HANDLE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;} WNDCLASS;要是想要改变窗口样式可以自己定义一个窗口类并且注册;在PreCreateWindow()中将cs结构中的lpszClass改为自定义的窗口类名字.4. HICON LoadIcon(HINSTANCE hInstance, // handle to application instanceLPCTSTR lpIconName // icon-name string or icon resource// identifier);加载系统图标时第一个参数为NULL,如果加载自定义图标则要调用全局函数AfxGetInstanceHandle()来获取当前应用程序实例;或者定义外部声明theApp.m_hInstance的当前应用程序实例;还有通过AfxGetApp()先获取theApp 指针.5. HCURSOR LoadCursor(HINSTANCE hInstance, // handle to application instanceLPCTSTR lpCursorName // name string or cursor resource identifier );使用方法与LoadIcon是相同的.6.CWnd::ShowWindowBOOL ShowWindow(int nCmdShow);相关参数SW_NORMAL ; SW_HIDE7. LRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam // second message parameter);可以通过SetWindowLong();修改当前的窗口过程实现对窗口性质的修改.8.CButton::CreateBOOL Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );通过该函数可以创建一个按钮.创建后需要调用成员函数ShowWindow();或者在第二个参数或上SW_VISIBLE.9.CWnd::MessageBoxint MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp =0 );第二个为全局API函数.10. HDC GetDC(HWND hWnd // handle to a window);获取当前窗口的DC.调用是要加上::,使用完后要调用::ReleaseDC()释放DC.11.BOOL MoveToEx(HDC hdc, // handle to device contextint X, // x-coordinate of new current positionint Y, // y-coordinate of new current positionLPPOINT lpPoint // pointer to old current position);)把坐标原点移动到当前点.实际绘图比较少用.12. BOOL LineTo(HDC hdc, // device context handleint nXEnd, // x-coordinate of line's ending pointint nYEnd // y-coordinate of line's ending point );从原点做线条到当前坐标.13.CDC::MoveToCPoint MoveTo( int x, int y );CPoint MoveTo( POINT point );把坐标原点移动到当前点.实际绘图比较少用.14.CDC::LineToBOOL LineTo( int x, int y );BOOL LineTo( POINT point );从原点做线条到当前坐标.注:该对象使用完成后也要调用CWnd::ReleaseDC();lientDC由CDC继承而来,区别在于不要调用GetDC();和ReleaseDC(CDC*),但是实例化对象时需要提供窗口指针.可以使用this,GetParent()或者是GetDesktopWindow();16CPen::CPenCPen( );CPen( int nPenStyle, int nWidth, COLORREF crColor );CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );//不常用笔迹样式有PS_SOLID,PS_等.17.COLORREF RGB(0~255,0~255,0~255);18.CRect::CRectCRect( );CRect( int l, int t, int r, int b );CRect( const RECT& srcRect );CRect( LPCRECT lpSrcRect );CRect( POINT point, SIZE size );CRect( POINT topLeft, POINT bottomRight );定义一个矩形区域.19.CDC::FillRectvoid FillRect( LPCRECT lpRect, CBrush* pBrush );确定一个由画刷填充的矩形区域.20.CBrush::CBrushCBrush( );CBrush( COLORREF crColor );CBrush( int nIndex, COLORREF crColor );CBrush( CBitmap* pBitmap );创建各种形式的画刷.21.CBitmap::LoadBitmapBOOL LoadBitmap( LPCTSTR lpszResourceName );BOOL LoadBitmap( UINT nIDResource );创建和加载位图资源.22.HGDIOBJ GetStockObject(int fnObject // type of stock object);GetStockObject函数检索的一个句柄,一个预定义的股票笔、刷子、字体、或调色板。

mfc中gdiplusstartup函数

mfc中gdiplusstartup函数

MFC(Microsoft Foundation Class)是微软公司推出的面向Windows评台的一种C++程序设计框架,旨在简化Windows应用程序的开发过程。

在MFC中,GDI+(Graphics Device Interface Plus)是用于创建和操作2D图形和图像的API,提供了更丰富的绘图功能和更好的性能。

在实际开发中,我们经常会使用到GDI+库来进行图形绘制和处理。

在MFC中,GdiplusStartup函数是为了初始化GDI+库而存在的。

以下是关于MFC中GdiplusStartup函数的相关内容:1. GDI+的初始化GDI+是一个用于图形绘制和处理的强大工具,但在使用之前,我们需要先对其进行初始化。

在MFC中,可以通过调用GdiplusStartup函数来实现GDI+的初始化工作。

2. GdiplusStartup函数的参数GdiplusStartup函数包含了多个参数,其中最常用的参数包括输入的指向一个GdiplusStartupInput结构的指针,以及一个指向GdiplusStartupOutput结构的指针。

这些参数用于指定GDI+的初始化配置和获取初始化的状态信息。

3. GDI+的初始化配置GdiplusStartupInput结构用于指定GDI+的初始化配置,包括扩展的版本号、GDI+库的管理模式以及其他相关信息。

通过配置这些参数,我们可以灵活地控制GDI+的初始化过程,以适应不同的开发需求。

4. 初始化结果的获取GdiplusStartupOutput结构用于获取GDI+的初始化结果,包括GDI+库的版本号、Token值以及其他相关信息。

这些信息对于后续的图形操作和资源管理非常重要,因此能够准确获取初始化结果是非常关键的。

5. GDI+的释放除了初始化之外,GDI+的释放同样是一个重要的工作。

在MFC中,我们可以通过调用GdiplusShutdown函数来释放GDI+库所占用的资源,确保程序运行的稳定性和高效性。

mfc延时函数

mfc延时函数

mfc延时函数MFC(Microsoft Foundation Class)是在Windows平台下编写应用程序的一种基础类库。

在MFC中,我们常常需要使用延时函数来控制程序运行的时间,以此达到某些特定的目的。

本文将从三个方面来讲述MFC延时函数的使用。

一、Sleep函数Sleep函数是Windows系统提供的一种延时函数,也是MFC中最常用的延时函数之一。

它的参数为等待时间,单位为毫秒。

可以通过Sleep 函数来实现持续一定时间的等待。

例如,我们可以通过以下代码来实现等待1秒钟的功能:```Sleep(1000);```其中1000表示等待时间为1000毫秒(即1秒钟)。

需要注意的是,Sleep函数会将当前线程挂起,也就是说,当前线程将无法执行其他操作,直到延时时间结束才会被重新唤醒。

二、OnTimer函数OnTimer函数是MFC消息机制中一个比较常用的函数,它可以实现定时器的功能。

通过定时器,我们可以实现在一定时间段内反复执行某些操作,例如定时更新UI界面、定时采集传感器数据等等。

要实现定时器功能,我们需要在MFC消息函数中添加以下代码:```SetTimer(nIDEvent, nElapse, NULL);```其中nIDEvent为定时器ID,nElapse为定时周期,单位为毫秒,NULL 为定时器处理函数,如果不需要处理函数可以传入NULL。

接下来,我们需要在消息函数中添加以下代码:```void CDialogExExampleDlg::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值if (nIDEvent == 1) //定时器ID{//定时器处理函数内容}CDialogEx::OnTimer(nIDEvent);```其中,OnTimer函数中nIDEvent为定时器ID,需要与SetTimer函数中的nIDEvent对应,以便程序能够识别定时器并执行相应的操作。

MFC中文档视图框架和文档模板之间的关系 四个类常用的成员函数

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中。

你可以在你需要的时候选择使用这种方式。

你可以完成一个只有视图没有文档的程序,例如一个基于对话框的应用。

哪什么时候需要呢?当你想将你的数据层和界面层分开的时候。

通常我们对数据的操作放在文档类中,例如存取,打开,关闭。

在这里你可以尽情的对你的数据进行操作,如果你需要,在对数据进行了改变后,对视图做一下更新,那么程序会将你对数据所做的改变呈现给你的程序的用户。

mfc 时间转换函数

mfc 时间转换函数

mfc 时间转换函数MFC 时间转换函数在MFC 编程中,时间转换函数是非常常用的一个功能。

它可以将不同的时间格式相互转换,方便开发者在不同场景下使用。

一、将字符串转换为时间格式在实际开发中,我们经常会遇到将字符串转换为时间格式的需求。

比如,从用户输入的日期字符串中获取具体的年、月、日等信息。

这时,可以使用 MFC 提供的函数 CString::Format 进行转换。

例如,我们有一个日期字符串"2021-01-01",我们想要获取其中的年份。

可以使用以下代码实现:```cppCString strDate = "2021-01-01";int nYear = 0;sscanf_s(strDate, "%d", &nYear);```这样,变量nYear 就存储了字符串中的年份值。

同样的道理,我们也可以获取月份和日期的值。

二、将时间格式转换为字符串除了将字符串转换为时间格式,有时我们还需要将时间格式转换为字符串,以便于展示给用户或保存到文件中。

MFC 提供了一系列的格式化输出函数,可以方便地实现这个功能。

例如,我们有一个时间变量dt,表示当前的日期和时间。

我们可以使用以下代码将其转换为字符串:```cppCTime dt = CTime::GetCurrentTime();CString strDate = dt.Format("%Y-%m-%d");```这样,strDate 就存储了当前日期的字符串表示,格式为"2021-01-01"。

三、其他时间转换函数除了上述的字符串转换函数,MFC 还提供了一些其他的时间转换函数,用于处理更复杂的时间操作。

比如,CTimeSpan 类可以用来计算两个时间之间的时间间隔,CTime 类提供了一些日期和时间的基本操作。

四、总结MFC 时间转换函数是开发中经常使用的功能之一,能够方便地实现字符串和时间格式之间的相互转换。

mfc读写注册表函数

mfc读写注册表函数

mfc读写注册表函数摘要:1.MFC 简介2.注册表简介3.MFC 中的注册表操作函数4.读写注册表的实例代码正文:一、MFC 简介MFC(Microsoft Foundation Class)是微软提供的一套用于开发Windows 应用程序的类库。

它提供了许多方便的类和函数,使开发者能够简化编程过程,快速地开发出功能强大的应用程序。

二、注册表简介注册表是Windows 操作系统中的一个核心组件,用于存储系统和应用程序的配置信息。

它由一系列键值对组成,可以存储各种数据类型,如字符串、整数、布尔值等。

注册表具有较高的安全性和稳定性,可以确保应用程序和系统配置的正确性。

三、MFC 中的注册表操作函数MFC 提供了一系列用于操作注册表的函数,包括读取、写入和删除注册表键值等。

以下是一些常用的MFC 注册表操作函数:1.RegOpenKeyEx:打开注册表键2.RegCloseKey:关闭注册表键3.RegSetValueEx:写入注册表键值4.RegGetValueEx:读取注册表键值5.RegDeleteValue:删除注册表键值6.RegEnumValue:枚举注册表键的值7.RegCreateKey:创建注册表键四、读写注册表的实例代码下面是一个使用MFC 读写注册表的简单示例:```cpp#include <afx.h>#include <iostream>void ReadRegistration(void){// 打开注册表键HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMyApp", 0, KEY_READ, &hKey)!= ERROR_SUCCESS){MessageBox("打开注册表键失败!");return;}// 读取注册表键值DWORD dwValue;if (RegGetValueEx(hKey, "key_name", 0, &dwValue,sizeof(dwValue))!= ERROR_SUCCESS){MessageBox("读取注册表键值失败!");RegCloseKey(hKey);return;}// 输出读取到的值std::cout << "读取到的值:" << dwValue << std::endl;// 关闭注册表键RegCloseKey(hKey);}void WriteRegistration(void){// 打开注册表键HKEY hKey;if (RegOpenKeyEx(HKEY_CURRENT_USER, "SoftwareMyApp", 0, KEY_WRITE, &hKey)!= ERROR_SUCCESS){MessageBox("打开注册表键失败!");return;}// 写入注册表键值DWORD dwValue = 12345;if (RegSetValueEx(hKey, "key_name", 0, &dwValue, sizeof(dwValue))!= ERROR_SUCCESS){MessageBox("写入注册表键值失败!");RegCloseKey(hKey);return;}// 输出写入到的值std::cout << "写入到的值:" << dwValue << std::endl;// 关闭注册表键RegCloseKey(hKey);}int main(){// 读取注册表值ReadRegistration();// 写入注册表值WriteRegistration();return 0;}```以上代码示例首先打开注册表键,然后分别读取和写入键值。

mfc 时间转换函数

mfc 时间转换函数

mfc 时间转换函数
MFC(Microsoft Foundation Class)是微软公司提供的用于开
发Windows应用程序的类库。

在MFC中,时间转换函数用于将时间
表示的不同格式相互转换,常用的时间转换函数包括以下几种:
1. COleDateTime类的相关函数,COleDateTime是MFC中表示
日期时间的类,它提供了一系列函数用于时间的转换,比如GetYear、GetMonth、GetDay等用于获取年、月、日,Format用于
将时间格式化成字符串,ParseDateTime用于将字符串解析成时间等。

2. CTime类的相关函数,CTime是MFC中表示时间的类,它也
提供了一些函数用于时间的转换,包括GetYear、GetMonth、
GetDay等用于获取年、月、日,Format用于将时间格式化成字符串,GetTime和SetTime用于获取和设置时间等。

3. 使用CStdioFile类中的相关函数,CStdioFile类提供了一
些用于文件操作的函数,其中包括一些用于读取和写入时间格式的
函数,可以通过这些函数将时间转换成字符串或者从字符串中解析
出时间。

总的来说,MFC提供了丰富的时间转换函数,可以满足不同场景下的时间操作需求。

开发者可以根据具体的需求选择合适的时间转换函数来完成时间的格式化、解析和转换操作。

同时,MFC还提供了一些与系统时间相关的函数,比如获取当前系统时间、设置系统时间等,这些函数也可以帮助开发者进行时间的转换操作。

在使用这些时间转换函数时,开发者需要注意参数的传递和返回值的处理,以确保时间转换操作的准确性和可靠性。

MFC常用的类及其成员函数简介

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类派生而来,主要用来掌管一个窗口。

其对象是一个框架窗口,包括边界、标题栏、菜单、最大化按钮、最小化按钮和一个激活的视图。

format mfc用法

format mfc用法

在MFC(Microsoft Foundation Class)中,format函数是一个非常常用的函数,用于格式化字符串输出。

它可以根据指定的格式将不同类型的数据转换为字符串,并将其输出到屏幕、文件或其他输出设备上。

format函数的基本用法如下:
```cpp
CString str;
str.Format(_T("%lf"),num); //str="1.5"(.1表示小数点后留1位,小数点后超过1位则四舍五入)
str.Format(_T("%.1lf"),num); //str="1.4600" (.1表示小数点后留1位)
str.Format(_T("%.4f"),num); //str=" 1.4600"(前面有1个空格)
str.Format(_T("%7.4f"),num); //float转换为CString的方法也同上面相似,将lf%改为f%就可以了。

```
以上是关于MFC中format函数用法的一些基本信息,如果想要了解更多信息,建议查阅官方文档或相关书籍。

mfc的setwindowlong函数 -回复

mfc的setwindowlong函数 -回复

mfc的setwindowlong函数-回复mfc的SetWindowLong函数是一种非常常用的函数,它用于设置窗口的特定属性。

该函数在Windows操作系统中的MFC(Microsoft Foundation Class)框架中提供,它可以对窗口进行广泛的自定义和调整。

本文将一步一步地回答关于这个函数的问题,并详细介绍其使用和功能。

下面我们来回答一些关于mfc的SetWindowLong函数的常见问题:1. SetWindowLong函数是用来做什么的?SetWindowLong函数用于设置指定窗口的扩展风格或者用户数据,以便进行自定义操作。

它可以改变窗口的外观、行为和特性。

2. SetWindowLong函数的参数有哪些?SetWindowLong函数的参数包括hWnd 、nIndex 、dwNewLong 。

其中hWnd 是指明具体要设置的窗口的句柄;nIndex 是一个可以指定特定属性的常量;dwNewLong 是要设置的新属性值。

3. SetWindowLong函数可以设置哪些属性?SetWindowLong函数可以设置的属性包括窗口的扩展风格、用户数据、窗口过程等。

通过设置不同的属性,我们可以自定义窗口的各种行为和特性。

4. SetWindowLong函数如何使用?首先,我们需要获取要进行设置的窗口的句柄。

然后,我们使用SetWindowLong 函数来设置窗口的属性。

具体使用方法如下:HWND hWnd = GetMyWindowHandle();LONG_PTR newValue = GenerateNewValue();LONG_PTR previousValue = SetWindowLong(hWnd,GWL_STYLE, newValue);在这个例子中,我们使用GetMyWindowHandle 函数获取窗口的句柄,然后使用GenerateNewValue 函数生成要设置的新的属性值。

mfc的cbinary的用法

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拆分字符串

mfc拆分字符串

mfc拆分字符串MFC是一种Microsoft Foundation Class的缩写,是一种用于Windows操作系统的应用程序框架。

它提供了一系列的类和函数,方便开发者进行Windows图形界面的应用程序开发。

本文将以MFC拆分字符串为主题,探讨如何使用MFC的相关函数来实现字符串的拆分操作。

一、引言在开发过程中,经常会遇到需要对字符串进行拆分的情况。

例如,我们有一个包含多个单词的字符串,需要将它们分别提取出来进行处理。

而MFC提供了一些函数来实现字符串的拆分操作,使得我们能够更加方便地处理字符串。

二、MFC中的字符串拆分函数MFC中提供了一些用于字符串拆分的函数,其中最常用的是Split 函数和Tokenize函数。

这两个函数都可以将字符串按照指定的分隔符进行拆分,并将拆分后的子串存储在一个容器中。

1. Split函数Split函数是C++字符串类CString的成员函数,它可以按照指定的分隔符将字符串拆分成多个子串,并将这些子串存储在一个字符串数组中。

下面是一个使用Split函数拆分字符串的示例代码:```cppCString str = "Hello,World,MFC";CStringArray arr;str.Split(',', arr);```在上面的示例代码中,我们首先定义了一个CString对象str,并将其初始化为"Hello,World,MFC"。

然后,我们定义了一个CStringArray对象arr,并调用Split函数将字符串str按照逗号分隔符拆分成多个子串,并将这些子串存储在arr中。

2. Tokenize函数Tokenize函数是CString类的一个静态成员函数,它可以按照指定的分隔符将字符串拆分成多个子串,并将这些子串存储在一个字符串数组中。

与Split函数不同的是,T okenize函数是通过一个迭代器来访问拆分后的子串。

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 cstring拆分函数

mfc cstring拆分函数

mfc cstring拆分函数CString是MFC中的一个字符串类,提供了一系列的成员函数用于字符串的操作。

其中也包含了拆分字符串的函数。

本文将介绍CString 中的拆分函数,包括Split、Tokenize以及自定义的拆分函数。

一、Split函数Split函数是CString中最常用的拆分字符串的函数之一。

它的原型如下:int Split(CStringArray& sa, LPCTSTR lpszStr, LPCTSTR lpszDelimiters);参数说明:sa:用于存储拆分结果的CStringArray对象。

lpszStr:需要拆分的字符串。

lpszDelimiters:用于拆分字符串的分隔符字符串。

Split函数会按照分隔符字符串将源字符串拆分成若干个子字符串,并将结果存储在CStringArray对象中。

下面是一个使用示例:CString str = "Hello,World";CStringArray strArray;str.Split(strArray, ",");Split函数将以逗号为分隔符,将字符串str拆分成两个子字符串"Hello"和"World",并将结果存储在strArray中。

二、Tokenize函数Tokenize函数是CString中另一个拆分字符串的函数。

它的原型如下:int Tokenize(CString& strToken, int& iStart, LPCTSTR lpszSeparators);参数说明:strToken:用于存储拆分结果的CString对象。

iStart:指示拆分起始位置的索引,拆分完成后会自动更新为下一次拆分的起始位置。

lpszSeparators:用于拆分字符串的分隔符字符串。

Tokenize函数会按照分隔符字符串将源字符串从起始位置开始拆分成两个子字符串,并将结果存储在strToken中。

mfc setprocessdpiawarenesscontext用法

mfc setprocessdpiawarenesscontext用法

mfc setprocessdpiawarenesscontext用法MFC(Microsoft Foundation Class)中SetProcessDPIAwarenessContext 函数是用来设置应用程序的DPI(Dots Per Inch)感知上下文的。

这个函数允许应用程序更好地适应高DPI设置,特别是在高分辨率显示器上。

SetProcessDPIAwarenessContext函数的用法如下:void SetProcessDPIAwarenessContext(UINT32 context);参数context是一个标识符,用于指定DPI感知上下文。

DPI感知上下文是一种指示应用程序如何处理DPI更改的方式。

不同的上下文值具有不同的行为,例如禁用缩放、应用缩放等。

下面是一些常用的DPI感知上下文值:●DPI_AWARENESS_CONTEXT_UNAWARE: 应用程序不知道DPI更改。

●DPI_AWARENESS_CONTEXT_SYSTEM_AWARE: 应用程序知道DPI更改,但使用系统的默认缩放设置。

●DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE: 应用程序知道DPI更改,并使用每个显示器的缩放设置。

要使用SetProcessDPIAwarenessContext函数,你需要在应用程序中包含相应的头文件,并在适当的位置调用该函数。

请注意,该函数是Windows 平台上的特定功能,不适用于其他操作系统。

总结:SetProcessDPIAwarenessContext函数用于设置应用程序的DPI 感知上下文,以适应高DPI设置。

通过使用不同的上下文值,你可以控制应用程序如何处理DPI更改,从而提供更好的用户体验。

请注意,该函数是特定于Windows平台的,并且在使用之前需要包含相应的头文件。

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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★//这一页的代码最重要了,呵呵……什么都在这里面呢;单文档新建:CWinApp_________docManager->docSingleTemplate的OpenDocumentFile函数参数为空,此函数完成了大部分东西,包括新建文档类框架类等______________然后是调用CDocument就没什么意思了,当然我们要是重载了CDocument的新建函数就是调用子类虚函数。

多文档新建:CWinApp_________docManager->docMultTemplate的OpenDocumentFile函数参数为空,此函数完成了大部分东西,包括新建文档类框架类等______________然后是调用CDocument就没什么意思了,当然我们要是重载了CDocument的新建函数就是调用子类虚函数。

单文档打开:CWinApp_________docManager中经过一个打开对话框传递参数,中途还调用了APP的OpenDocumentFile,当然如果我们的APP重载了这个函数也要调用我们的但是我们的函数一定别忘记最后返回是调用父类的此函数___________docSingleTemplate的OpenDocumentFile函数参数不为空,此函数完成了大部分东西,包括新建文档类框架类等______________然后是调用CDocument就没什么意思了,当然我们要是重载了CDocument的新建函数就是调用子类虚函数。

多文档打开:CWinApp_________docManager中经过一个打开对话框传递参数,中途还调用了APP的OpenDocumentFile,当然如果我们的APP重载了这个函数也要调用我们的但是我们的函数一定别忘记最后返回是调用父类的此函数___________docMultTemplate的OpenDocumentFile函数参数不为空,此函数完成了大部分东西,包括新建文档类框架类等______________然后是调用CDocument就没什么意思了,当然我们要是重载了CDocument的新建函数就是调用子类虚函数。

他们两个只有在docMultTemplate和docSingleTemplate的OpenDocumentFile函数中的动作不同,单文档负责新建框架类和视类但是如果存在了我们就不重建了,只是给其赋值。

而多文档无论如何都会新建一个视类和框架类文档类,这也就是为什么他是多文档结构的原因。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★接下来介绍这个最重要的函数,它基本什么都干了,不管是新建还是打开都得调用它,呵呵……//CDocument* CMultiDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,BOOL bMakeVisible){//下面调用的是CDocTemplate::CreateNewDocument()CDocument* pDocument = CreateNewDocument();//这里面调用了AddDocument(pDocument);//添加了一个CMyMultiTestDoc : public CDocument//CMultiDocTemplate::m_docList保存的所有该种文档的//文档实例的指针列表。

if (pDocument == NULL){TRACE0("CDocTemplate::CreateNewDocument returned NULL.\n"); AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);return NULL;}ASSERT_VALID(pDocument);BOOL bAutoDelete = pDocument->m_bAutoDelete;pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrongCFrameWnd* pFrame = CreateNewFrame(pDocument, NULL);//创建了一个新的CChildFrame框架pDocument->m_bAutoDelete = bAutoDelete;if (pFrame == NULL){AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);delete pDocument; // explicit delete on errorreturn NULL;}ASSERT_VALID(pFrame);if (lpszPathName == NULL){// create a new document - with default document nameSetDefaultTitle(pDocument);// avoid creating temporary compound file when starting up invisibleif (!bMakeVisible)pDocument->m_bEmbedded = TRUE;if (!pDocument->OnNewDocument())//刚打开时新建的文档。

add by ralf {// user has be alerted to what failed in OnNewDocumentTRACE0("CDocument::OnNewDocument returned FALSE.\n");pFrame->DestroyWindow();return NULL;}// it worked, now bump untitled countm_nUntitledCount++;}else{// open an existing documentCWaitCursor wait;if (!pDocument->OnOpenDocument(lpszPathName))//这里是打开一个文档。

add by ralf{// user has be alerted to what failed in OnOpenDocumentTRACE0("CDocument::OnOpenDocument returned FALSE.\n");pFrame->DestroyWindow();return NULL;}pDocument->SetPathName(lpszPathName);}InitialUpdateFrame(pFrame, pDocument, bMakeVisible);return pDocument;}要了解文档、视图、框架窗口、文档模板之间的相互关系,关键要理解他们的结构1、首先应该对CWinApp类有充分的了解它包含并管理着应用程序的文档/视窗的所有信息。

它有一个成员变量CDocManager * m_pDocManager,此变量是文档/视窗的管理器,m_templateList是CDocManager里的一个列表,此列表里保存了所有文档模板的指针,当用户调用CWinApp::AddDocTemplate( pDocTemplate ) 后该pDocTemplate 存入了CWinApp::m_pDocManager::m_templateList里。

CWinApp::GetFirstDocTemplatePosition()CWinApp::GetNextDocTemplate(POSITION& pos)是遍例所有的文档模板指针。

2、上面我们提到了文档模板(CMultiDocTemplate(我们主要针对对文档)),这是一个极重要的类。

CMultiDocTemplate::m_docList保存的所有该种文档的文档实例的指针列表。

下面两个函数用于维护CMultiDocTemplate::m_docList数据CMultiDocTemplate::AddDocument(CDocument* pDoc);CMultiDocTemplate::RemoveDocument(CDocument* pDoc);而CMultiDocTemplate::GetFirstDocPosition() const;CMultiDocTemplate::CDocument* GetNextDoc(POSITION& rPos) const;用于遍例该文档类型所有文档实例。

3、上面提到文档(CDocument)CDocument 我们最熟悉不过了。

每一个文档实例可有多个视与之相对应。

CDocument::m_viewList用来保存所有与此文档实例相关的View★★★★这里我拉鲁夫说一下:CDocument::AddView函数用来维护m_viewList 数据但我们一般不用★★★★void CDocument::AddView(CView* pView)//★★★MFC源码{ASSERT_VALID(pView);ASSERT(pView->m_pDocument == NULL); // must not be already attachedASSERT(m_viewList.Find(pView, NULL) == NULL); // must not be in list m_viewList.AddTail(pView);ASSERT(pView->m_pDocument == NULL); // must be un-attachedpView->m_pDocument = this;OnChangedViewList(); // must be the last thing done to the document }CDocument::GetDocTemplate 可获得CMultiDocTemplate;4、CView 他是放在CMDIChildWnd里的,每一个CMDIChildWnd有一个ViewCView::GetDocument可获得与此视相关的CDocumentCView::GetParentFrame() 可获得CMDIChildWnd;通过以上分析可见CWinApp,CMDIChildWnd,CView,CDocument,CMultiDocTemplate之间知道其中一个实例必可知道其他所有几个实例,CWinApp统领全局,任何时候,只要获得CWinApp实例,则所有的文档模板,文档实例,视,Frame窗口均可被枚举出来。

相关文档
最新文档