MFC函数简单解释(更新至28日凌晨)

以该博文http://blog.csdn.net/column/details/megogame.html 为基础,涉及到的每个都尽量解释和说明其用法。

以下是流程图,由于太大,请尝试右键另存为查看。关于函数请跳过图的部分继续往下看

————————————————————————

函数或命令:

 

所属类:

 

原型:

 

说明:

 

参考链接:

 

————————————————————————

函数或命令:

DC

所属类:

 

原型:

 

说明:

device context,叫设备环境或者设备描述表,是GDI(图形设备接口)内部保存数据的一种数据结构。此结构中的属性内容和特定的输出设备(显示器、打印机等)相关,属性定义了GDI函数的工作细节。

总之,要使用GDI绘图函数,就需要一个DC句柄。

MFC中把和DC相关的都封装成类。CDC是一个抽象基类,可以访问整个显示器和打印机等,CClientDC类和窗口客户区关联,能用于显示客户区相关内容。

 

DC: Device Context,中文也叫设备上下文,通俗的理解叫窗口显示描述设备也行; CDC: MFC中封装了操作系统窗口输出底层API的封装类,如CDC的派生类CClientDC,用于窗口客户区域的输出。 

HDC: VC++开发环境中的DC句柄类型,32比特的无符号整数类型,用来标识DC设备的句柄。 

设备上下文:看上面解释的第一行。

 

在GDI中,DC(Device context)是一个非常重要的概念。

 

有的书中,将DC翻译为设备描述表(《Windows 程序设计 第五版》作者Charles Petzold),

 

也有的书将DC翻译为设备上下文。

 

到底什么是DC?

 

用现实中的例子来理解可能更容易些。

 

如果你喜欢画画,你得先准备了画布,画笔,颜料……

 

画画的环境搭建好了,你就可以画画了。

 

这个画画的环境,就是DC。

 

在图形环境下,一切都是画出来的,所以,你要准备好一个DC,才能在屏幕上画画。——写字也是画画。

 

在画画的环境中,有哪些对象呢?

 

画布——GDI对象之一:区域

 

画笔——GDI对象之一:画笔

 

颜料盒——GDI对象之一:调色板

 

如果要在画笔上写字的话,写什么样的字体呢?方正字体?徐静蕾字体?——字体也是GDI对象之一。

 

有的画笔比较粗,专用来刷大面积背景色的,这是刷子——GDI对象之一:刷子

 

如果你不想画了,只想把别人画好的画,贴到你的画布上,这也是可以的。——GDI对象之一:位图。

 

所以,这里就有6种GDI对象可以用于DC。

 

现在开始画画了,你拿起了一只笔。——在Windows环境里,这叫选择了一个画笔对象:使用SelectOBject函数。当然,如果你没带笔也没关系,Windows为你准备了几只画笔,你可以这样申请系统提供的缺省画笔:hPen = GetStockObject(WHITE_PEN);

 

如果你画着画着,觉得手中的笔用着不爽,可以换一只啊,没关系的。——依旧是SelectObject()换笔。

 

当然,如果你走出了画室,别完了把你的画笔清除掉,要不画室里全是笔啊,刷子啊,太乱了。——DeleteObject()

参考链接:

http://wenda.so.com/q/1378648861067082?src=140

http://wenda.so.com/q/1365013199066107

 

 

————————————————————————

函数或命令:

CDC

所属类:

 

原型:

 

说明:

①cdc相当于画布,你可以使用笔、刷、位图、字体等在画笔上画图,就这么简单

②是 HDC的封装类   可以理解成这是一个 “画家”   你可以给画家准备好笔、刷子、位图等等东西 画的时候只要告诉画家画什么就行了  它会用你给的装备开始绘画...

 

参考链接:

http://bbs.csdn.net/topics/390636858?page=1

 

 

————————————————————————

函数或命令:

CDC m_cacheDC;

所属类:

CDC

原型:

 

说明:

声明一个CDC对象。

CDC类定义的是设备上下文对象的类。

CDC对象提供处理显示器、或打印机等设备上下文的成员函数,以及处理对象与窗口客户区对应的显示上下文的成员。

通过CDC对象的成员函数进行所有的绘图。

 


类名


说明


CClientDC


窗口客户区的设备描述环境,但应用在WM_PAINT消息之外的消息处理函数中


CMetaFileDC


图元文件的设备描述环境,在创建可以回放的图像时使用


CPaintDC


窗口用户区的设备描述环境,在OnDraw()函数中来处理WM_PAINT消息


CWindowDC


在整个窗口内(不只是用户区)绘图的设备描述环境

 

专门用于在应用程序窗口客户区绘图的CPaintDC,是所有CDC子类中最常用的一个类。为了防止程序设计人员误把绘图代码写到其他位置,MFC规定,CPaintDC对象只在CView类(不过好像在windows的MFC里面,是CChildView类)的OnDraw()函数中有效。

 

系统每次创建应用程序窗口,及窗口需要刷新时,就会产生WM_PAINT消息,系统接收到这个消息就会自动调用OnDraw()函数。应用程序也可以调用相关函数来激活OnDraw(),因此程序中所有对窗口客户区进行绘图的代码,都应该写再这个函数中(指OnDraw())。

 

参考链接:

http://blog.csdn.net/cto_51/article/details/8828088

http://blog.csdn.net/akof1314/article/details/5439866(内含大量CDC成员及其作用说明)

 

————————————————————————

函数或命令:

WM_PAINT

所属类:

 

原型:

 

说明:

应用程序通过处理该消息,来实现在窗口上的绘制工作。

(1)系统何时发送WM_PAINT消息?

①第一次创建一个窗口时;

②改变窗口大小时;

③当把窗口从另一个窗口背后移出时;

④当最大化或者最小化窗口时;

⑤其他。

这些动作由系统管理,应用只是被动的接受该消息,在消息处理函数中进行绘制操作,大多数的时候应用也需要能够主动引发窗口动作中的绘制操作,比如当窗口显示的数据改变的时候,这一般是通过InvalidateRect 和 InvalidateRgn函数来完成的。

 

参考链接:

http://blog.sina.com.cn/s/blog_5344089201009whk.html

 

————————————————————————

函数或命令:

m_bg.CreateCompatibleDC(NULL);

所属类:

CDC

原型:

 

说明:

创建一个兼容的DC。他的参数是*CDC类型的,即是一个DC的指针,函数会绘制一个与参数提供的DC相兼容的DC。

如果参数为NULL,函数会自动创建和当前程序DC兼容的内存DC。


说明


创建一个与特定设备场景一致的内存设备场景


返回值


Long,新设备场景句柄,若出错则为零


参数表


参数


类型及说明


hdc


Long,设备场景句柄。新的设备场景将与它一致。也可能为0以创建一个与屏幕一致的设备场景


注解


在绘制之前,先要为该设备场景选定一个位图。不再需要时,该设备场景可用DeleteDC函数删除。删除前,其所有对象应回复初始状态

BitBlt( //图形拷贝

HMDC0, //目标设备场景

x0, y0 //目标左上角坐标

w, h //目标图形宽、高

HMDC1, //源设备场景

x1, y1 //源左上角坐标

SRCCOPY //拷贝方式,这里是直接拷贝

);

 

 

参考链接:

http://blog.csdn.net/ghevinn/article/details/28641219

 

————————————————————————

函数或命令:

CBitmap m_bg;

所属类:

CBitmap

原型:

 

说明:

类CBitmap封装了Windows GDI中的位图,并且提供了操纵位图的成员函数。

使用CBitmap对象之前,要先构造CBitmap对象,调用其中的一个初始化成员函数设置位图对象的句柄。此后,就可以调用其他成员函数了。

 

这句命令的意思就是,声明一个位图对象(位图对象名是m_bg),之后可以用CBitmap的成员函数,例如“.LoadBitmap(资源名)”可以用来加载某个资源(资源通过右键资源文件—添加—资源—Bitmap 来添加)。

 

参考链接:

 

————————————————————————

函数或命令:

m_bg.LoadBitmap( 资源名 )

所属类:

CBitmap

原型:

.LoadBitmap( )

说明:

资源名,实际上是资源的ID,在资源视图下的Bitmap那一栏可以看到。是一个整型(int id),也可以被修改。

貌似还有一种LoadImage()的方法,不懂。

另外,LoadBitmap()不能加载文件,只能加载资源。LoadImage貌似也是。

 

参考链接:

 

 

————————————————————————

函数或命令:

m_cacheBitmap.CreateCompatibleBitmap(cdc, m_client.Width(), m_client.Height());

所属类:

CBitmap

原型:

函数原型:HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);

说明:

该函数创建与指定的设备环境(DC)相兼容的位图。

cdc是句柄;

m_client.Width()是位图的宽度(x)

m_client.Height()是位图的高度(y)

当位图绘制时:

位图的尺寸如果比窗口DC(客户区,也就是绘制图的区域)小,那么DC有一部分就没图。

如果位图的尺寸比窗口DC大,那么一部分位图就没办法显示出来。

也就是说,和cdc->BitBlt(0, 0, m_a.Width(), m_a.Height(), &m_cacheDC, 0, 0, SRCCOPY);相比。

都是显示一部分图片。个人发现,影响内存占用的,是在cdc->BitBlt(xxx)这一步。不要覆盖绘制。例如:

cdc->BitBlt(0, 0, m_a.Width(), m_a.Height()/2, &m_cacheDC, 0, 0, SRCCOPY);

cdc->BitBlt(0, m_a.Height()/2, m_a.Width(), m_a.Height(), &m_cacheDC, 0, 0, SRCCOPY);

实测来看,这2个放一起。第二行第4个参数/2,会少占用一点内存(貌似)。

如果第一行第4个参数不除以2,那么第二行绘制的图会闪烁(确定)。

但实测来看,每次调试占用的内存量会有浮动(即使没修改任何程序代码),不理解。

但具体我还是不是很明白。

附一个我自己写的理解吧:

m_cacheCBitmap.CreateCompatibleBitmap(cdc, m_a.Width(), m_a.Height()/2);

//创建一个位图,参数1:当前窗口的句柄,参数2:位图的宽度,参数3:位图的高度

....

cdc->BitBlt(0, 0, m_a.Width(), m_a.Height(), &m_cacheDC, 0, 0, SRCCOPY);

//这部分是绘制缓冲区(m_cacheDC)的图片,宽度和高度是窗口(m_a获取的是窗口)的宽度和高度

//不过宽度和高度换成更大的貌似也行(但如果更小的话,就绘制的是一部分了,其他就空出来了)

//个人觉得,这个和上面的m_cacheCBitmap.CreateCompatibleBitmap(cdc, m_a.Width(), m_a.Height());的区别在于

//这里的是绘制缓冲DC的尺寸,上面的缓冲DC指向的位图的尺寸。然后在这里,把缓冲DC的位图(通过&m_cacheDC)绘制在这里,绘制的窗口部分是m_a.Width()宽和m_a.Height()高

//也就是说,先有个位图(他有一定尺寸),然后把这张位图绘制在某个DC上,这个DC如果比这个位图大,那么DC大于位图的部分是没法显示的。如果位图比DC小,那么位图大出来的部分也是没法显示的。

//推测,如果DC大于位图,那么DC可以在多出来的部分(设定坐标),再绘制其他位图。

//如果DC小于位图,那么DC如果绘制其他位图的话,就覆盖了之前的部分了(也就是前者是空的然后填充,后者是有然后覆盖)

//理解为一张纸(位图)在一个木板(DC)上的映射。

 

参考链接:

http://baike.so.com/doc/6084306-6297408.html

 

————————————————————————

函数或命令:

m_cacheDC.SelectObject (&m_cacheCBitmap);

所属类:

CDC

原型:

 

说明:

该函数选择一对象到指定的(调用该函数的对象)DC中,该新对象替换先前相同类型的对象(如果不相同呢?)

理解为给DC选择画笔(画什么,用什么画,例如这里就是用位图对象来绘制)。

 

参考链接:

http://wenda.so.com/q/1365013199066107

 

————————————————————————

函数或命令:

m_bg.Draw(m_cacheDC, m_client);

所属类:

CImage

原型:

 

说明:

绘制图片,第一个参数是在哪绘制(CDC类对象m_cacheDC),第二个参数是绘制的相对坐标(CRect类对象,实际上有四个坐标left, right, top, bottom)。

第一个参数也可以用*cdc(假如CDC *cdc=this->GetDC();的话,cdc指针就是指向当前窗口)

第二个参数是第一个参数(提供的DC对象)的相对坐标。分别是left, right, top, bottom。也就是其上下左右四个坐标的位置(假如和当前窗口的尺寸一样,那么就和当前窗口一样大),可以是负数(于是就只能显示部分),也可以left比窗口的宽还大(于是就在窗口右边的外面了)。总之,通过控制相对于DC的坐标,控制这张图出现在哪里。

1. m_hero.Draw(*cDC,100,400,60,60);  

Draw函数有多个重载类型,这里给出的是最常用的,参数分别表示要绘制的DC,起始x,起始y,宽度,高度。

 

参考链接:

 

 

————————————————————————

函数或命令:

cdc->BitBlt(0, 0, m_a.Width(), m_a.Height(), &m_cacheDC, 0, 0, SRCCOPY);

所属类:

CDC

原型:

1. BOOL BitBlt(            

2.     int nXDest,       //目的DC的起始x  

3.     int nYDest,       //起始y  

4.     int nWidth,       //宽度  

5.     int nHeight,      //高度  

6.     HDC hdcSrc,       //源DC  

7.     int nXSrc,        //源DC起始x  

8.     int nYSrc,        //起始y  

9.     DWORD dwRop       //贴图方式,大家设置为SRCCOPY就可以了  

10. );  

 

说明:

大概就是说,绘制图,先定绘制的范围(前4个参数),

然后绘制的DC(第5个参数),

然后绘制DC的起始坐标(就是说从DC的哪个x、y坐标开始画图,例如从1,1开始画,于是x坐标<1或者是y坐标是<1的DC的那部分就不会显示了)(第6,7个参数),

最后是贴图方式(第8个参数),关于第八个参数如下:

dwRop:光栅操作代码


 

dwRop有如下选择:


BLACKNESS           使用黑色填充目标区域

DSTINVERT              目标矩阵区域颜色取反

MERGECOPY            使用与运算组合原设备矩形区域的颜色和目标设备的画刷

MERGEPAINT           使用或运算将反向的源矩形区域的颜色和目标矩形区域的颜色合并

NOTSRCCOPY          复制源设备区域的反色到目标设备中

NOTSRCERASE        使用或运算组合源设备区域与目标设备区域的颜色,然后对结果颜色取反

PATCOPY                  复制源设备当前选中的画刷到目标设备

PATINVERT               使用异或运算组合目标设备选中的画刷和目标设备区域的颜色

PATPAINT                 通过或运算组合目标区域当前选中的画刷和源设备区域反转的颜色

SRCAND                   使用与运算组合源设备和目标设备区域的颜色

SRCCOPY                 直接复制源设备区域到目标设备中

SRCERASE               使用与运算组合目标设备区域的反色与源设备区域的颜色

SRCINVERT              使用异或运算组合源设备区域颜色和目标设备区域颜色

SRCPAINT                 使用或运算组合源设备区域颜色和目标设备区域颜色

WHITENESS             使用白色填充目标区域

 

 

参考链接:

http://blog.sina.com.cn/s/blog_7590da790101br23.html

 

————————————————————————

函数或命令:

ValidateRect(&m_client);

所属类:

 

原型:

 

BOOL ValidateRect(

HWND hWnd,          // 窗口的句柄  

CONST RECT *lpRect  // 指向RECT结构的指针  

);

说明:

InvalidateRect(HWND)   使窗口无效   产生消息WM_PAINT; 
ValidateRect(HWND)使窗口有效   清除消息队列中的WM_PAINT消息 

该函数更新指定窗口的无效矩形区域,使之有效。

InvalidateRect是将窗口中的一块矩形区域标注为“无效”,系统会不断向窗口发送WM_PAINT消息令其重绘。在响应WM_PAINT消息时,需要调用BeginPaint获取DC来进行重绘。该函数会合并所有“无效”区域,对DC进行裁剪,将整个窗口标注为“有效”,清除WM_PAINT消息。DC经裁剪之后,在进行绘制时,超出DC范围的操作将不被处理,所以即使在响应WM_PAINT消息时绘制的是整个窗口,而实际上绘制的也只是“无效”区域。恰当地使用InvalidateRect进行刷新比刷新整个窗口的效率要高。在WM_PAINT消息时,应尽量根据PAINTSTRUCT结构中rcPaint指定的矩形来处理重绘,减少执行不必要的代码,从而提高效率。

个人感觉,大概就是如果某些地方需要重画(比如说移动了窗口就是全部重画,遮挡的窗口不被遮挡了,就是遮挡部分需要重画),会被标记为无效区域,然后系统就触发了WM_PAINT消息,这个消息的作用就是说告诉DC,要重画啦。

然后函数BegainPaint(系统自己调用),就把所有无效区域合并到一起,在标注有效之后,进行重画。而无效区域如果超出DC范围(比如说图比窗口大),超出的部分就不会被处理。

因为无效区域比全部窗口通常来说要小,因此只画无效区域(也就是指定某区域要重画),要比重画整个窗口来说效率更高。

因此这里的有效,就是说不要去重画(因为在缓冲位图加载后已经重画了,因此不需要让某区域无效从而发送WM_PAINT消息去重画)。

在OnPaint函数中释放DC即ReleaseDC之前要加上ValidateRect(&m_client);这个函数的作用是使绘图区变得有效。在windows中,如果我们的窗口被遮挡了什么的,窗口那部分就变得无效,就会产生WM_PAINT消息,当绘制完毕后,必须要使窗口变得有效,否则系统将周而复始的产生WM_PAINT消息,使得CPU占用率非常高,而且还会出现很多莫名其妙的问题,比如使用MessageBox会导致程序失去响应等。

参考链接:

http://blog.csdn.net/danxuezx/article/details/5088998

 

————————————————————————

函数或命令:

cacheDC.DeleteDC();

所属类:

CDC

原型:

BOOL DeleteDC(HDC hdc);

说明:

注释:如果一个设备上下文环境(DC)的句柄是通过调用GetDC函数得到的,那么应用程序不能删除该设备上下文环境,它应该调用ReleaseDC函数来释放该设备上下文环境。

由 CreateDC、CreateCopatibleDC 函数创建的设备上下文环境,只能使用DeleteDC来释放。

在程序里,和上面的m_cache.CreateCompatibleDC(NULL);相对应,类似new和delete的关系。

参考链接:

http://blog.csdn.net/angussl/article/details/6527050

 

 

————————————————————————

函数或命令:

cacheCBitmap.DelectObject();

所属类:

CBitmap

原型:

BOOL DeleteObject(HGDIOBJ hObject);

说明:

函数功能:该函数删除一个逻辑笔、画笔、字体、位图、区域或者调色板,释放所有与该对象有关的系统资源,在对象被删除之后,指定的句柄也就失效了。

和上面的

m_cacheCBitmap.CreateCompatilbeBitmap(cdc, m_client.Width(), m_client.Height() )

相对应。

也就是说,CBitmap类对象创建一个兼容的画笔(这里的画笔是位图),在用完后就要释放掉他。

参考链接:

 

 

 

————————————————————————

函数或命令:

ReleaseDC(cdc);

所属类:

CChildView

原型:

 

说明:

如果一个DC的句柄,是通过getDC() 得到的,只能通过ReleaseDC()来释放。

在本程序中,也就是指和CDC* cdc=this->GetDC(); 相呼应。

每个进程的GDI句柄数是有上限的

(MSDN: The number of DCs is limited only by available memory. ),貌似是10000个,超过上限后,进程再GetDC就会失败。

getdc用户向系统申请,用户获得了一个dc,同时,系统内部必然会记录其资源已经做了什么样的分配,你不释放dc,并且放弃对该dc的控制(比如dc记录在函数变量上,函数退出后,你的应用就失去了对该dc控制),那么,该dc变成了一个被占有而不可以用的资源,你不断的申请dc,这样资源就不断被你占用,直到系统资源不足,大家完蛋。

 

也就是说,你问系统要一个DC,那么就用完后就得还回去,否则如果你丢掉(但系统记着你还借着呢),等你从系统那里借光了你的余额,你就再也不能借了。

参考链接:

http://bbs.csdn.net/topics/390537124

 

————————————————————————

函数或命令:

m_cacheDC.SetBkMode(TRANSPARENT);

所属类:

CDC

原型:

WINGDIAPI int   WINAPI SetBkMode(__in HDC hdc, __in intmode);

hDC是句柄,mode是设置的模式。

不输入第一个参数应该默认的是当前dc吧(不确定)

说明:

该命令表示将文字背景设为透明。

当在一个已有的图像上面输出文字时,有个很重要的问题是,文字不像手写的文字那样,单单是一个文字,而是一个矩形的图像(观察所得),输入一串文字,其实就是把多个文字的图像放一起。

这个图像由两部分组成,文字,和其背景。如果不输入这行(设置为TRANSPARENT模式),则文字的背景不会变的透明(因此会遮挡背景图像)。只有设置为TRANSPARENT模式后,才会只显示文字。

模式分为两种:TRANSPARENT和OPAQUE,前者是设置为透明,后者为用当前背景的画刷输出显示文字的背景。

①在TRANSPARENT模式下(文字颜色已设置为红色),图像为:

②在OPAQUE模式下,背景画刷不设置。则为:

③OPAQUE模式下,设置背景画刷,目前无(因为我还不会设置背景画刷)

参考链接:

 

 

————————————————————————

函数或命令:

m_cacheDC.SetTextColor(RGB(255, 0, 0));

所属类:

CDC

原型:

 

说明:

设置输出的文字的颜色。通过RGB三个参数(红绿蓝)控制颜色。范围0~255,具体设置为多少在使用的时候查看相关的文章。

参考链接:

 

————————————————————————

函数或命令:

 m_cacheDC.TextOut(0,0,"发生碰撞");

所属类:

CDC

原型:

 

说明:

该行命令在屏幕左上角(0,0)的位置输出文字。

TextOut (hdc, x, y, psText, iLength) ;

hdc指的是窗口句柄,x,y指的是字符串在显示区域的开始位置,psText参数是指向该字符串的指针,iLength是字符串的长度。

另外,按照查看的来看,可以将其设置为输出文字+字符变量的形式,不过我没看懂怎么做。等搞明白了来补充。

参考链接:

 

————————————————————————

函数或命令:

mciSendString("open res\\我在人民广场吃炸鸡.mp3 alias bgMusic",
NULL, 0,
NULL);

mciSendString("playbgMusic repeat",
NULL, 0,
NULL);

所属类:

 

原型:

 

说明:

mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等

需要头文件#include<mmsystem.h>。

需要导入声音文件库#pragmacomment(lib,"winmm.lib")//导入声音头文件库

第一行命令:

①open表示打开媒体文件,媒体文件的地址是后面的res\\我在人民广场吃炸鸡.mp3 ;

②alias bgMusic表示将这个媒体文件的别名bgMusci,于是之后只需要调用别名就可以播放这个媒体文件了。

第二行命令:

①play表示播放某个媒体文件(bgMusic就是这个被播放的);

②repeat表示循环播放。

两行命令后面的NULL,0,NULL表示什么尚不清楚。

参考链接:

http://baike.so.com/doc/6951002-7173403.html

————————————————————————

函数或命令:

CString

所属类:

 

原型:

 

说明:

是一种数据类型。很大程度上简化了MFC中的很多操作,使得MFC在做字符串操作的时候方便了很多。

位于头文件<afx.h>中(但貌似MFC无需引用)。其作用包括以下:

①拼合字符串,可以像string类那样,通过加号运算符,将两个CString类对象之和赋值给某个CString类对象;

②格式化字符串。CString类对象的Format()方法。首先声明一个CString类对象(例如CString m),然后m.Format(_T("Total is%d"),total); 这样,可以不必担心存放格式化或数据的缓冲区是否足够大(例如total假如是个很大的数字,每多一位都要多占一个char大小的内存)。格式化也是一种将非字符串类型(例如int)的数据转化为
CString类型的最常用技巧。例如将一个整数转化为CString类型,可用如下方法:CString m; m.Format(_T("%d"),total);此时,m就是total的字符串类型了(例如1就成为了字符串的1,得记住,字符1的ASCNII码,并不是1)

③转换为int型。把CString类型的数据转换为整数类型最简单的方法就是使用标准的字符串到整数转换例程(不懂)——具体看后面的参考链接;

④同char*类型转化。在把字符串类型赋值给CString类型时,使用加号运算符中,至少加号左边的是CString类型(或者对其使用强制转换),或者两个都是CString类型,才能将其结果赋值给另一个CString类型(因为此过程已使用加号运算符的重载函数)。或者,使用_T(字符串,带双引号);
,并将其赋值给CString类型(此时是Unicode字符),不使用_T也可以直接赋值。(更多请查看参考链接)

⑤⑥⑦请查看参考链接,我目前还没接触到其涉及到的知识,因此暂不深入。

参考链接:

http://baike.so.com/doc/5034329-5260837.html

 

————————————————————————

函数或命令:

AfxMessageBox和MessageBox

所属类:

 

原型:

 

说明:

AfxMessageBox的函数原型
int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
int AFXAPI AfxMessageBox( UINT nIDPrompt, UINT nType = MB_OK, UINT nIDHelp =(UINT) –1 );

根据说明,MFC情况下,应尽量使用AfxMessageBox()函数,因为这个全局的对话框最安全,也最方便。(在WIN32 SDK的情况下,只能使用MessageBox)

MFC中,能使用后者的情况下,都能使用前者(afx...)。

AfxMessageBox是MFC的全局函数,提供了多种重载形式(虽然我就看会了一种)。

以AfxMessageBox(bufpos,MB_OKCANCEL);为例:

这行代码可以有三个参数,第一个参数为字符串,可以是CString类型的变量(字符串变量),也可以直接是字符串。这第一个字符串为输出的内容。

第二个参数为按钮(例如这里是按钮是确定和取消),如果不填写,则只有一个“确定”按钮。如何利用不同的按钮来做不同的事,还不太清楚,以后待补充。

第三个参数还没搞懂怎么用。

参考链接:

http://blog.csdn.net/xhhjin/article/details/6456205

 

————————————————————————

函数或命令:

 

所属类:

 

原型:

 

说明:

 

参考链接:

 

 

时间: 2024-10-01 02:57:25

MFC函数简单解释(更新至28日凌晨)的相关文章

lol8月28日更新内容 3131版本英雄联盟纳尔上线

lol8月28日更新内容 3131版本http://www.aliyun.com/zixun/aggregation/6717.html">英雄联盟纳尔上线 lol8月28日更新公告出来了哦,更新后lol客户端版本将更新至3131版本,同时更新完毕新英雄迷失之牙纳尔就开放购买了哦,一起来看看吧! 亲爱的召唤师: 我们将于8月28日早上8点不停机更新客户端3131版本,本次更新内容为"迷失之牙 纳尔"的最终版资源,更新后,将在10点上架新英雄,欢迎购买体验;更新包约35.

苹果发布会1月28日召开新浪科技全程直播

北京时间1月27日晚间消息,苹果将在北京时间1月28日凌晨2点在美国旧金山召开产品发布会,该公司CEO史蒂夫·乔布斯 (Steve Jobs)将在会上发布一款重要的新产品,很可能是长久以来为市场所期待的平板电脑. 苹果本周一发出邀请函,邀约各界记者出席27日在旧金山前卫艺术中心(Yerba Buena Center for the Arts)召开的发布会来"关注我们最新创造的产品"(Come see our latest creation).本月早些时候曾有消息人士透露,苹果计划发布一

【IOS-COCOS2D游戏开发之七】在COCOS2D中添加/删除系统组件,并解决VIEW设置透明会影响VIEW中的其他组件的问题!【11月28日更新解决添加组件COCOS2D动画停止播放的BUG】

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/455.html 11月28日:-----------      有的童鞋说添加嘞组件(UIScrollView)后操作组件时Cocos2d的动画停止不懂嘞,我测试下,果然是,下面是解决方法: 首先大家在项目中搜索:CCDirectorIOS,找到CCDirectorIOS.m类,然后找到如下代码: 1 2 3

2012年6月28日百度快照不更新解决办法

相信从2012年6月22日开始到现在这段时间站长界很多朋友都很苦恼,因为百度算法进行了调整.导致的结果大面积的低质量网站被k,很多网络公司甚至因 为百度调整面临倒闭现象--而tui56-王宝臣发现一些没有被k的网站其百度快照都是15天-20天以前的.很多交换友情链接的朋友更是因为百度快照太 慢而换不来链接,昨天tui56论坛-王宝臣发现了一个方法可以快速的解决百度快照问题: 一.百度快照不更新恢复办法 昨天也是偶尔想到之前似乎那位朋友提到过那句一句说是百度有阁反馈中心,是可以进行反馈提交的.昨天

PSP版如龙《黑豹:如龙新章》5月28日起正式更新启用游戏官网

由日本Sega公司预定于2010年9月22日发售推出,定价UMD光碟版6279日元,下载版5600日元,与之前系列同样以神室钉为舞台的这款"如龙"系列最新作动作冒险游戏<黑豹:如龙新章>,如今官方特地宣布从5月28日即日起正式更新启用游戏官网让玩家们来使用. 本作为人气系列作"如龙"系列完全新作的最新续作,在这次除了将平台转移到系列首次登场的PSP平台之外,同时还收录了超过300分钟的全语音事件动画,并如之前系列一样邀请豪华声优配音阵容参与演出,配合全新

LOL8月28日不停机更新客户端版本公告

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;       [科技讯]8月28日信息,LOL将于8月28日早上8点不停机更新客户端3131版本,本次更新内容为"迷失之牙 纳尔"的最终版资源,更新后,将在10点上架新英雄,欢迎购买体验:更新包约35.75MB,8点以后登录的玩家需要先进行更新后才能进入游戏,同时8点以前登录的广大召唤师也建议您重新登录游戏进行更新,以保证您的新英雄资源保持最新.

百度6.28日K站到底是什么原因

最近很多站长都投稿分析了6.28日百度大K站的文章,我也发发牢骚吧,其实我的站也没多少被K掉,也免不了一些擦边的站被和谐掉了,但不是这次百度大K站中消失的,也许是我频繁的修改导致的吧,再回到正题,百度又不是第一次K站了,还记得去年的5.20日那天吗?还不是很多站长被K,有恢复,也恢复不回来的,我就分析下百度这次的动作原因吧: 1.站群泛滥导致采集众多 无用户体验可言 站群是个研究的话题,靠着庞大的网站数量霸占了首页,甚至是垄断了某个行业,但内容确实是公认的垃圾内容,没什么可读性(对于访客来说),

解读诸多网站百度快照停留10月28日的原因

最近想必很多站长朋友都看到很多网站的百度快照时间都停留在了10月28日,包含大的门户站点网易.新浪.腾讯等,甚至是百度自己的快照都停留在了这天,此外,还包括卫视媒体湖南卫视.交易平台猪八戒.当当网等,而且小站很多也同样是如此,都是停留在了这天.想必很多站长都纳闷了,这些站点更新都很频繁,而且网站知名度高,外链资源也很丰富,怎么会出现百度快照不更新的事情呢?今天凡凡就解读下这个百度快照1028的原因. 在很多的论坛.网站上都在介绍着各种让百度快照天天更新的方法,无非都是内容原创.经常更新.外链要强

【阿里云大学LIVE】2月28日晚8点,借你双黑客眼 透视小贝邮件门、FBI大战IOS背后的网络安全真相

秘密是个有意思的东西. 多少人可以怀揣秘密安稳过一生我们并不知道,但至少小贝是没能做到.       讲真,小贝今年挺不顺利.前些天铺天盖地的邮件门大家也都看到.简单总结,泄露邮件的主要内容有两点,一是封爵失败后爆粗,二是不愿为慈善花钱.这一记重磅炸弹让我们万人迷小贝的完美人设瞬间崩塌,众多迷妹哀嚎男神幻灭,各国键盘侠更是火力全开狂喷不止.       事实上,邮件泄露早已不是什么新鲜事儿.       去年参与美国总统竞选的希拉里更是欲哭无泪:逃过了FBI,逃过了维基解密,最终却输给了一个钓鱼