MFC绘制自定义按钮大全

时间:2019-05-15 10:52:53下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《MFC绘制自定义按钮大全》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《MFC绘制自定义按钮大全》。

第一篇:MFC绘制自定义按钮大全

VC++ MFC界面技巧--按钮

★ 5--2--1 图标按钮

图标按钮可谓是按钮控件使用图像最简单的方式,除此之外图标按钮的优点还在于显示在按钮上的图标能够使用透明色,因而不必再去为处理非矩形图像在按钮颜色发生变化时边缘颜色的处理而费心。不过也正是使用图标导致了图标按钮的天生弱点。图标太小了,仅仅才 32×32 像素大小,在有的场合仅靠使用这么小的图像就有些显得力不从心了。

在讲图标按钮如何使用之前,先得告诉读者句柄的概念。句柄是什么?很多教科书上都这样定义:句柄是一个用于代表对象的 32 位整型值。不过这对于很多初学者而言,并不是太好理解。其实也可以将未赋值的句柄理解为一个指向“空白”(void *)的指针,事实上也如此,在 Winnt.h 中,句柄就是如此被声明的:typedef void *HANDLE;当句柄被赋值之后,它就成为指向某个特定位置的指针,即代表了某个特定的对象。之所以在现在提及句柄,是因为句柄是 Windows 编程中的一个关键性概念。尽管在前面除第三章外的内容中很少涉及它,不过在下面的学习中我们将会很频繁的使用到句柄。

技术概要:

使用图标按钮很简单,大的步骤仅仅就三步:

①.从外部导入一个图标或自己创建一个图标作为资源。②.从资源中载入所要使用的图标。③.在要使用图标的按钮上设置图标。

具体实现:

■第一步导入图标没有什么特别之处,同前面 2.2 节中使用静态图像控件导入位图是非常类似的。无非就是使用 Insert 菜单上的 Resource 命令,导入或创建一个图标即可。

■第二步载入图标就涉及到一些细节问题了。使用函数 LoadIcon()载入图标。因为LoadIcon()是类 CWinApp 的成员函数,同时函数 LoadIcon()返回所载入图标的句柄。所以我们采用以下方法来调用函数 LoadIcon(): h_Icon = AfxGetApp()-> LoadIcon(IDI_Icon);当然,在该语句之前还必须要有对图标句柄 h_Icon 的定义: HICON h_Icon;

■第三步为按钮设置图标了,这通过调用函数 SetIcon()来实现。同时不要忘记,还须在使用图标的按钮的 Properties 设置中设置 Icon 属性,指明该按钮是一个图标按钮。因为函数 SetIcon()为类 CButton 的成员函数,可以通过两种方法来调用该函数。一是通过 CButton 类对象来调用 SetIcon(),如下面代码:

m_BtonIcon.SetIcon(h_Icon);// m_BtonIcon 为一个 CButton 类对象。

二是先由函数 GetDlgItem()获得一个指向 CWnd 对象的指针,再通过强制类型转换将该指针转换为一个指向 CButton 类对象的指针。进而通过该指针来调用函数 SetIcon()。具体实现代码如下:

CWnd *pWnd = GetDlgItem(IDC_RADIO2);

CButton *pBton =(CButton *)pWnd;pBton-> SetIcon(h_Icon2);既然有第一种较为简便的方法为按钮设置图标,为何还要提及第二种方法呢?因为并不是在任何情况下都会有 CButton 类对象的,例如对于一组单选按钮。只能为它们定义一个 CButton 类对象,如果使用该对象来调用函数 SetIcon(),则只能在设置了 Group 属性的那个单选按钮上设置图标。所以要达到在一组单选按钮中分别设置不同图标的目的,就只有使用第二种方法。

尽管在现在的 Windows 编程中,资源句柄数多得相对于我们而言几乎是无限的,但最好在使用完资源句柄后及时的把它们删除掉。上面所讲述的方法不仅适用于 Push Button,而且同样适用于 Radio Button、Check Box 和 Group Box。

★ 5--2--2 位图按钮

图标按钮虽有着种种优点,但它能显示的图像实在是太小了。在有的场合显然就不适用了。位图按钮可以在按钮表面显示一幅位图而不再是一个小小的图标。但是因为在位图中不能使用透明色,因而当显示的位图不为矩形时,就得为位图中非矩形部分的背景色动一番脑筋了。因为存在着用户改变按钮表面颜色,也就是位图背景色的可能性。可以用透明位图的技术来解决这一难题,这将在后面 5.7 实现具有透明性的位图中讲述。

技术概要:

位图按钮的使用的大致步骤同图标按钮基本相似,也是以下三个步骤: ① 从外部导入一个位图或自己创建一个位图作为资源。② 从资源中载入所要使用的位图。③ 在要使用位图的按钮上设置位图。

具体实现:

■第一步从外部导入一个位图作为资源同使用图标按钮时是完全一致的,在此就不详细讲述了。

■第二步中,利用函数 LoadBitmap()从资源中载入位图。函数 LoadBitmap()为一个 API 函数,定义如下: HBITMAP LoadBitmap(HINSTANCE hInstance, // handle of application instance LPCTSTR lpBitmapName // address of bitmap resource name);所以,为达到载入位图的目的,不仅要定义一个位图句柄 hBitmap: HBITMAP hBitmap;而且还要定义一个应用程序实例句柄 hInstance;: HINSTANCE hInstance;并调用函数 AfxGetInstanceHandle()以获得当前的应用程序实例句柄,代码如下: hInstance = ::AfxGetInstanceHandle();只有在声明并获得了当前的应用程序句柄后,才能使用以下语句载入位图: hBitmap = ::LoadBitmap(hInstance,“BMP1”);注意,在函数 LoadBitmap()中的第二个参数为资源名,而非资源 ID。因为资源名是一个字符串,而资源 ID 则是一个整型量。所以在创建或导入位图后,为该位图资源命名时要加上双引号以表示这是一个资源名。如右图 5-2:

■在第三步中,为要使用位

图的按钮设置位图,方法与图标按钮完全相同。首先是要在使用位图的按钮的 Properties 设置中设置 Bitmap 属性,指明该按钮是一个位图按钮。然后再调用 CButton 类函数 SetBitmap()为按钮设置位图。代码如下:

// m_BtonBmp 为一个 CButton 类对象。m_BtonBmp.SetBitmap(hBitmap);或

pWnd = GetDlgItem(IDC_Check);pBton =(CButton *)pWnd;pBton-> SetBitmap(hBitmap);

同图标按钮一样,使用位图不局限于 Push Button,而且同样适用于 Radio Button、Check Box 和 Group Box。同时,最好在使用完位图句柄后及时的将它删除掉。

★ 5--2--3 CBitmapButton 类位图按钮

前面所讲述的图标及位图按钮最大的不足在于,无论当按钮控件处于何种状态,按钮上所显示的图案总是一成不变的,相比之下那些随着操作而实时改变图案的按钮就具有更加生动的效果。MFC 库为我们捉供了一个这样的类 CBitmapButton。利用这个类,我们可以为一个按钮设计四幅不同位图、分别用于正常状态、按下状态、获得输入焦点和无效时。这样,随着按钮状态的改变,位图也随之切换,这样就使按钮呈现出很强的动感效果。令人高兴的是,类 CBitmapButton 将很多操作的细节都封装了起来,因而我们能够很方便的达到上述目的。由于以上原因,CBitmapButton 类位图按钮有着比图标按钮和位图按钮更为广阔的使用范围。在一般情况下,都将 CBitmapButton 类位图按钮称作是位图按钮,而将真正的位图按钮给忽略了。

CBitmapButton 类位图按钮的缺点同位图按钮是一致的,都是在对透明色的处理上。还有一个比较严重的问题是 CBitmapButton 类位图按钮是将位图按原始大小绘制在按钮上,而不是随按钮大小而缩放位图。这在平时不会导致任何问题,但若是在 Windows 中更改了显示字体的大小,则对话框及上面的按钮控件大小也随之改变,但位图按钮上的位图却保持原有大小不变,这样就会在外观上造成严重的问题。尽管有以上问题的存在,CBitmapButton 类位图按钮还是具有很大的实用价值,因为付出很少的代码就可以得到生动形象的图形效果。、下面就讲述 CBitmapButton 类位图按钮的使用方法(以下均简称为位图按钮)。绝大数情况下,使用位图按钮只需四个步骤:

● 第一步:在要使用位图的按钮的 Properties 设置中设置 Owner Draw 属性

● 第二步:创建或从外部导入至少一幅至多四幅位图。位图按钮所使用的位图颜色最多可达 256 色,但对于 256 色的位图不能通过剪贴的的方式来创建。而必须使用导入的方式来创建。若该按钮控件的 Caption(标题)为 BmpBton,则将这四幅位图的 ID 分别设定为 “BMPBTONU”、“BMPBTOND”、“BMPBTONF”、“BMPBTONX

”分别对应于按钮的正常状态、按下状态、获得输入焦点状态和无效状态。注意,只有在正常状态显示的位图是必须的,其它状态的位图都是可选的;还有就是代表位图的 ID 都必须加上双引号并且大写(如下图 5-3)。实际上,加上双引号就表示该资源是以字符串常量来标识。

● 第三步:在使用位图按钮的类的类定义文件中声明 CBitmapButton 类对象:CBitmapButton m_BtonSet;

● 第四步:在对话框的 OnInitDialog()函数中通过 CBitmapButton 类对象调用函数 AutoLoad()自动加载位图: m_BtonSet.AutoLoad(IDC_BtonSet,this);

经过以上四个步骤,一个位图按钮就创建好了。在运行中,CBitmapButton 类会自动根据按钮的状态显示对应的位图。利用位图按钮技术,再加上一点鼠标感应技术,就很容易做出像网页按钮那样的在鼠标经过时加亮的动态效果。也能轻易的实现像 Word 中那样的平面按钮。这些将在后面的章节中讲述。

需要说明的是,CBitmapButton 类位图按钮仅限于在 Push Button 使用。在默写情况下,我们可能需要动态创建位图按钮,在动态创建位图按钮时,不能使用函数 AutoLoad()加载位图,而要使用函数 LoadBitmaps()来加载位图。动态创建位图按钮主要有以下几个步骤: ●第一步:为要创建的控件分配一个 ID 值。●第二步:定义一个 CBitmapButton 类对象。

●第三步:由该对象调用函数 Create()创建位图按钮,并调用函数 LoadBitmap()加载位图。在调用函数 SizeToContent()调整按钮控件的大小以适应位图。● 第四步:加入对新创建按钮的消息处理。第三步实现代码如下:

m_BmpBtonExit.Create(“EXIT”,BS_PUSHBUTTON|WS_VISIBLE|BS_OWNERDRAW, rcBtonExit,this,IDOK);m_BmpBtonExit.LoadBitmaps(“EXITU”,“EXITD”);

★ 5--2--4 按钮的自绘制

前面讲述的三种在按钮上显示图像的方法或多或少的存在着不足之处,图标按钮太小,位图按钮无法设置透明色,CBitmapButton 类位图按钮位图大小不能随按钮控件变化。使用按钮的自绘制技术是解决以上问题的最佳途径。当然,按钮的自绘制技术的作用不仅仅局限于按钮表面显示图像,利用它可以充分发挥自己的创造力从而创建出各式各样的按钮控件。例如动画按钮等。如果说利用按钮自绘制技术在按钮上显示图像唯一有一点不足的话,那就是实现略为复杂了一些。但利用按钮自绘制技术,在配合以 DIB 文件读取技术,就完全能够实现象 Winamp 中那样的 Skin 技术。

概念解释:

先解释一下什么叫做按钮的自绘制,准确的说应该是控件的自绘制技术。Windows 能够向控件的父窗口发送消息以让父窗口定制控件的外观和行为。MFC 则更近了一步,它能够译解

自绘制参数并将消息发回控件本身。因为绘制控件的代码实在控件类中实现,而不是在拥有控件的窗口中,因而称为“自绘制”。除按钮控件可以自绘制外,列表框、组合框以及菜单都支持自绘制。

在基于对话框的应用程序框架的基础上创建一个自绘制的按钮,主要有以下步骤: ■ 第一步:

在对话框上放置一个按钮,并在其 Properties 中设置 Owner Draw 属性。■ 第二步:

用 ClassWizard 从 CButton 类中派生出一个新类。进入 ClassWizard,点击 Message Maps 标签下的 New 按钮,在弹出的菜单中选择 New 命令进入 New Class 对话框。在 New Class 对话框中填入新创建类的名称 CownerDrawBton,以及选择所创建类的父类为 CButton(如下图 5-4):

■ 第三步:

为新创建的 COwnerDrawBton 类增加一个成员函数 DrawItem()。在 WorkSpace 窗口中的 Class View 标签下,右键单击类 COwnerDrawBton,在随后的菜单中选择 Add Virtual Funtion„命令(如左下图 5-5)进入 New Virtual Override for class COwnerDrawBton 对话框(如右下图 5-6),在该对话框的 New Virtual Function 栏中选择函数 DrawItem,再点击 Add and Edit 按钮就超越了函数 DrawItem,并进入其内部处于待编辑状态。

概念解释:

函数 DrawItem():该函数在当自绘制按钮的外观需要重绘时调用。其定义如下: virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);参数 lpDrawItemStruct 为指向结构 DRAWITEMSTRUCT 的一个长指针。结构DRAWITEMSTRUCT 定义如下:

typedef struct tagDRAWITEMSTRUCT { UINT CtlType;UINT CtlID;UINT itemID;UINT itemAction;UINT itemState;HWND hwndItem;HDC hDC;RECT rcItem;DWORD itemData;} DRAWITEMSTRUCT;该结构中部分成员变量作用如下:

CtlType:表示控件类型,当为常量 ODT_BUTTON 表示为自绘制按钮。CtlID :表示控件的 ID。ItemAction:绘制动作。

ItemState:在当前绘制动作完成后,确定控件所处状态。HwndItem:控件窗口的句柄。HDC:设备环境句柄。

RcItem:确定自绘制控件大小的矩形。

通过DRAWITEMSTRUCT结构中的各成员变量,就可以为控件的自绘制提供必要的条件。

■ 第四步:

利用 ClassWizard 中定义一个 COwnerDrawBton 类对象 m_BtonOD(如下图 5-7):注意在 VC++ 中,必须采用这种方式来定义对象 m_BtonOD,如果是在类定义文件中手工定义该对象的话,则不会执行超越的虚函数 DrawItem()。同样,如果是不定义该对象的话,则不会执行函数DrawItem()。

■ 第五步:

向函数 DrawItem()中加入以下代码:

void COwnerDrawBton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){ // TODO: Add your code to draw the specified item CDC *pDC;CRect rcBton;CDC dcMem;

BITMAP s_

Bmp;CBitmap m_Bitmap;CBitmap *pOldBitmap;

pDC = CDC::FromHandle(lpDrawItemStruct-> hDC);// 将设备环境句柄转换为指向设备环境的指针

rcBton = lpDrawItemStruct-> rcItem;// 获取按钮控件大小

m_Bitmap.LoadBitmap(IDB_Bmp);// 载入位图

dcMem.CreateCompatibleDC(pDC);// 创建于内存设备环境相兼容的设备环境

pOldBitmap = dcMem.SelectObject(&m_Bitmap);// 将位图对象选入到内存设备环境中

m_Bitmap.GetBitmap(&s_Bmp);// 获取位图信息

pDC-> StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(), &dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);// 将位图从内存设备环境拷贝到显示设备环境

dcMem.SelectObject(pOldBitmap);// 删除刚才选入到内存设备环境的位图对象 }

在上面的代码只是为了说明如何进行按钮控件的自绘制,它距实用要求还有一段距离。因为在对话框上每个自绘制的按钮控件都会调用 DrawItem()函数。所以在 DrawItem()函数内部,还必须根据结构 DRAWITEMSTRUCT 的成员变量 CtlID 来区分不同的按钮控件,进而再采取不同的操作。同时还需根据按钮控件的不同状态,进行不同的操作。

在上一节中讲述的 CBitmapButton 类实际上也是通过对按钮控件进行自绘制而实现的。但是在向按钮上绘制图像时它是采用函数 BitBlt(),而不是使用函数 StretchBlt(),因而造成 CBitmapButton 类位图按钮上的位图大小不会随控件大小改变而改变。根据这一原理,我们自己创建一个与 CBitmapButton 作用和使用方法相似类 CBmpBton,它也可以使用四幅不同的位图来表示按钮不同的状态,位图的命名原则同 CBitmapButton 完全一致。不同的是,它无需使用诸如 AutoLoad()一类的函数来加载位图。的其他部分同上面的 COwnerDrawBton 完全一致,只不过是函数 DrawItem()的实现不同,下面就是类 CBmpBton 的 DrawItem()函数的实现代码:

void CBmpBton::DrawItem(LPDRAWITEMSTRUCT lpDIS){ CRect rcBton;CDC *pDC;

UINT action;UINT CtrID;CString strCaption;

CBitmap m_Bitmap;CBitmap *pOldBitmap;CDC dcMem;BITMAP s_Bmp;

rcBton.CopyRect(&lpDIS-> rcItem);pDC = CDC::FromHandle(lpDIS-> hDC);state = lpDIS-> itemState;action = lpDIS-> itemAction;CtrID = lpDIS-> CtlID;

GetWindowText(strCaption);// GetDlgItemText(CtrID,strCaption);

dcMem.CreateCompatibleDC(pDC);

if(state == 16){ if(m_Bitmap.LoadBitmap(strCaption + _T(“F”))){ pOldBitmap = dcMem.SelectObject(&m_Bitmap);m_Bitmap.GetBitmap(&s_Bmp);pDC-> StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(), &dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);} else { if(m_Bitmap.LoadBitmap(strCaption + _T(“U”))){ pOldBitmap = dcMem.SelectObject(&m_Bitmap);m_Bitmap.GetBitmap(&s_Bmp);pDC->StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(), &dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);} else { TRACE(“必须载入一副位图”);} } } else if(state == 4){ if(m_Bitmap.LoadBitmap(strCaption + _T(“X”))){ pOldBitmap = dcMem.SelectObject(&m_Bitmap);m_Bitmap.GetBitmap(&s_Bmp);pDC-> StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(), &dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);} } else if(state & ODS_SELECTED){ if(m_Bitmap.LoadBitmap(strCaption + _T(“D”))){ pOldBitmap = dcMem.SelectObject(&m_Bitmap);m_Bitmap.GetBitmap(&s_Bmp);pDC-> StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(), &dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);} } else { if(m_Bitmap.LoadBitmap(strCaption + _T(“U”))){ pOldBitmap = dcMem.SelectObject(&m_Bitmap);m_Bitmap.GetBitmap(&s_Bmp);pDC-> StretchBlt(rcBton.left,rcBton.top,rcBton.Width(),rcBton.Height(), &dcMem,0,0,s_Bmp.bmWidth,s_Bmp.bmHeight,SRCCOPY);} else { TRACE(“必须载入一副位图 U”);} }

dcMem.SelectObject(pOldBitmap);} ★ 5--4--1 在对话框上使用图像

本节的知识,在前面的内容中其实已基本涉及到了,现就总结归纳一下。在对话框上使用图像,可采用以下几种方法:

① 使用静态图像控件。采用这种方式时,既可以在对话框上显示小幅图像作为装饰,又可在必要时显示整幅图像作为对话框的背景。但在设计对话框时要首先象对话框上加入静态图像控件,否则其它控件就会被所显示的图形遮挡。这是在对话框上使用图像最简单的方法。② 使用 CBitmapButton 类位图按钮在对话框上显示图像。一般很少采用这种方式来显示图案。但在某些特殊情况下时,例如要求对鼠标指针的移动具有感应功能时,这是最简单易行的方法。示例可见 P112 5—2—3 CBitmapButton 类位图按钮。③ 重载对话框的 OnPaint()函数。在 OnPaint()函数中进行所需的绘图操作。这通常是在对话框上显示作为背景的位图的最好方式,不会出现背景图案将对话框上的其它控件遮挡住的情况。同使用 CBitmapButton 类位图按钮一样,利用这种方法能够实现像“金山词霸”那样有限的 Skin 效果。示例可见 P108 5—5—1 从资源中读取位图。

④ 使用 Microsoft Forms 2.0 Image ActiveX 控件。这是在对话框上显示真彩色图像最简单的方式。但也不要认为这种方法尽善尽美,使用该方法有可能在这台机器上显示的图像精美绝伦,而在那台机器上就一塌糊涂。

在上述的方法中,只有最后两种具有显示真彩色图像的能力,使用方法④并不是太可靠;使用方法③因为涉及到 DIB 文件的读取又显得略为复杂。实际上,并不是只有采用真彩色图像才能取得华丽的界面效果,而且大量的采用真彩色图像会导致程序过于庞大。一种很好解决方法是使用经过色彩抖动的 256 色图像来代替真彩色图像。作为对读者的一个建议,抓图工具 HyperSnap-DX 其实是进行色彩抖动及图像缩放的一个极好工具。

第二篇:MFC实践总结

mfc编程实验总结报告 知识总结+个人心得 2011年暑期mfc编程实验报告 mfc编程实验个人总结报告

一、mfc类、函数等知识小结:

1、settimer(1, m_intlevel, null);在mfc程序中settimer被封装在cwnd类中,调用就不用指定窗口句柄了于是settimer函数的原型变为: uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,yint ,dword))当使用settimer函数的时候,就会生成一个计时器。函数中nidevent指的是计时器的标识,也就是名字。nelapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为null,也就是使用系统默认的回调函数,系统默认认的是ontime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成ontime函数:在classwizard里,选择需要计时器的类,添加wm_time消息映射,就自动生成ontime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。例: settimer(1,1000,null);1:计时器的名称;

1000:时间间隔,单位是毫秒; null:使用ontime函数。

当不需要计时器的时候调用killtimer(nidevent);例如:killtimer(1);killtimer(1);

2、typedef struct{};(1)struct{ int x;int y;}test1;好,定义了 结构 test1,test1.x 和 test1.y 可以在语句里用了。(2)struct test {int x;int y;}test1;定义了结构 test1,test1.x 和 test1.y 可以在语句里用了。

与(1)比,省写 了 test(3)typedef struct test {int x;int y;}text1,text2;此处时说了这种结构体(类型)别名 叫 text1 或叫 text2,而不是定义了结构体变量.真正在语句里用,还要写: text1 test1;//定义结构体变量

然后好用 test1.x test1.y 或写 text2 test1;//定义结构体变量

然后好用 test1.x test1.y

3、invalidate();//让客户区无效,即时重新绘制客户区 void invalidate(bool berase = true);该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时windows会在应用程序的消息队列中放置wm_paint消息。mfc为窗口类提供了wm_paint的消息处理函数onpaint,onpaint负责重绘窗口。视图类有一些例外,在视图类的onpaint函数中调用了ondraw函数,实际的重绘工作由ondraw来完成。参数berase为true时,重绘区域内的背景将被擦除,否则,背景将保持不变。

4、cdc::rectangle(左上x,左上y,右下x,右下y);使用该函数画一个矩形,可以用当前的画笔画矩形轮廓,用当前画刷进行填充。

函数原型:bool rectangle(hdc hdc, int nleftrect, int ntoprect, int nrightrect, int nbottomrect);

hdc:设备环境句柄。

nleftrect:指定矩形左上角的逻辑x坐标。ntoprect:指定矩形左上角的逻辑y坐标。nrightrect:指定矩形右下角的逻辑x坐标。nbottomrect:指定矩形右下角的逻辑y坐标。

5、cbrush:: cbrush//画刷类 eg:cbrush brushstick(rgb(127, 127, 127));四种构造函数: cbrush();cbrush(colorref crcolor);cbrush(int nindex, colorref crcolor);cbrush(cbitmap* pbitmap);参数说明: crcolor指定画刷的前景色(rgb方式)。如果画刷是阴影线型的,则指定阴影线的颜色。nindex指定画刷阴影线采用的风格,取值如下: hs_bdiagonal45度的向下影线(从左到右)hs_cross水平和垂直方向以网格线作出阴影 hs_diagcross 45度的网格线阴影 hs_fdiagonal 45度的向上阴影线(从左到右)

hs_horizontal 水平的阴影线 hs_vertical 垂直的阴影线 pbitmap指向cbitmap对象的指针,该对象指定了画刷要绘制的位

图。

构造函数说明:

6、messagebox(game over!);messagebox(null,text,title,button);参数title:string类型,指定消息对话框的标题。text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值。icon:icon枚举类型,可选项,指定要在该对话框左侧显示的图标。button:button枚举类型,可选项,指定显示在该对话框底部的按钮。default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么messagebox()函数将使用缺省值返回值integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为null,messagebox()函数返回null。

函数原型:

messagebox.show(text,title,messageboxbuttons,messageboxicon ,messageboxdefaultbuttons)参数说明:

(1)text:必选项,消息框的正文。

(2)title:可选项,消息框的标题。(3)messageboxbuttons:可选项,消息框的按钮设置,默认只显示【确定】按钮。ok――确定 okcancel――确定和取消 abortretryignore――终止、重试和忽略 yesnocancel――是、否和取消 yesno――是和否 retrycancel――重试和取消

(4)messageboxicon:对话框中显示的图标样式,默认不显示任何图标。

question――问号 information、asterisk――i号 error、stop、hand――错误号 warning、exclamation――!号 none――不显示任何图标

(5)messageboxdefaultbuttons:可选项,对话框中默认选中的按钮设置。

defaultbutton1――第1个button是默认按钮 defaultbutton2――第2个button是默认按钮 defaultbutton3――第3个button是默认按钮

7、memcpy(拷贝目的地,拷贝对象,拷贝长度);包含在头文件#include

函数原型:

extern void *memcpy(void *destin, void *source, unsigned n);功能:

由source指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。eg: int a=5,b=9;memcpy(a,b,sizeof(a));//将b按位拷给a;说明:

1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。2.与strcpy相比,memcpy并不是遇到就结束,而是一定会拷贝完n个字节。篇三:mfc个人心得体会 mfc个人心得体会 06a13526 余思远

时间过得很快,历时一个月的短学期即将结束,我们小组的mfc课题也基本完成。虽然只有短短的一个月,但却带给我很多。在小组成员的共同努力下,基本解决了计划中的一个个问题,要实现一个功能并不算复杂的计算器,也没有想象中那么简单。mfc涉及的概念很多,语法也与以前有些许不同,在c++基础上新增的内容也有许多。从开始编辑一个简单的界面,通过这段时间的学习,终于感到掌握了些许了,但想更加熟练的使用,也必须付出更多的时间吧。我发现在编程过程中,并不能只想着眼前所负责的这一块,许多对许多综合多方面进行考虑,需要与自己队友进行配合,作出合理的计划和安排。

实践是检验真理的唯一标准,这次mfc的实践活动,让我学习到了很多知识,弥补了很多漏洞。这个看似简单对我们来说却付出了很多时间和精力的程序,让我体会到了mfc相比与单纯的c++的优越性。程序编译过程中的有些困难虽然我们的能力范围内也无法解决,但是在网上资料的参考,读懂他人资料、相关程序的基础上,我们也完成了这个程序。相信这个经历能对以后的编程有很大的帮助。我也从此次课程设计中体会到了团队合作的乐趣和力量。在一个团队中扬长避短,发挥自己应有的作用,能让我们更加容易地去克服一个又一个难关。篇四:c++(mfc)程序设计实践报告

中南大学

本科生课程设计(实践)任务书、设计报告

(c++语言程序设计)题 目 学生姓名 指导教师 学 院 专业班级 学生学号

计算机基础教学实验中心

年 月 日

目 录

设计任务书?3 课程实践报告4

一、实践内容??4

二、实践成果??4

三、程序功能??4

四、设计思路??5

五、源程序???7

六、运行情况??13

七、实践心得??16

八、实践收获与不足???18 c++语言程序设计任务书

指导老师:李力

课程编号:

一、学时与学分

学时:40 学分:2

二、实践目的计算机实践是本科计算机基础教学的一个重要环节。它对于巩固学生的计算机基础知识,增强学生的计算机应用水平,改善学生的知识结构,具有重要意义。

三、实践任务与要求

用c++语言编程。编程题目如下:

(一)统计一个班(最多有35人)的学生成绩,要求能实现如下功能:(1)输入每个学生的学号和6门课程的成绩。(2)计算每个学生的平均分和总分。(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学号、各科成绩、平均分和总分。(4)根据用户要求输出某门课程(从键盘输入课程号)成绩在90分以上(含90分)且总分在前5名的学生情况,包括学号、各科成绩、平均分和总分。(5)根据统计,绘制总成绩五分制百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类来实现,学生学号和成绩采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(二)统计商品销售数据,要求能用菜单实现如下功能:(1)输入每件商品的名称,编号,入库日期,标价,成本。(2)输入每件商品的售价,出售日期。(3)按总销售量从高到低排出每种商品的名称,售出件数,销售额。(4)根据用户要求输出某商品某月(从键盘输入商品名称和月份)的平均售价、售出件数、总利润。(5)根据统计,绘制商品销售利润百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(三)统计足球比赛数据,要求能用菜单实现如下功能:(1)输入每场比赛的主队名称,客队名称,比赛日期,主队得分,客队得分。(2)按总得分从高到低排出每个队的名称,总得分,胜,和,负的次数。(3)根据用户要求输出某队某月(从键盘输入队名和月份)的所有比赛数据。(4)根据用户要求输出某队主场总得分,客场总得分(5)根据用户输入,绘制某队成绩历史趋势图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采

用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(四)统计稿件管理数据,要求能用菜单实现如下功能:(1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。(2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。(4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。(5)根据用户输入,绘制稿件按省份的百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

(五)统计用电管理数据,要求能用菜单实现如下功能:(1)输入每个电表的用户名,楼栋号,抄表日期,电表读数。(3)按作者的用电量,从高到低排出每个用户的总用电量。(3)根据用户要求输出某用户某月(从键盘输入用户名和月份)的总用电量。(4)统计某楼栋从某月到某月(从键盘输入)的总用电量(5)绘制按的楼栋的用电百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。

以上五题任选一题。

四、实践纪律

学生除了要遵守实践期间学院的基本规定外,还要求做到: 1.必须在规定的时间、地点,独立完成以上任务; 2.不得迟到、早退。尤其不得擅自缺席。

五、设计报告要求

1. 任务书必须作为报告第一页 2. 报告不得少于3000字:主要总结实践心得、实践成果、程序功能、设计思路(程序流程图)、源程序(加上必要的注释)、运行情况、课程设计的收获与不足等

六、时间安排

两周时间

七、成绩评定规则

成绩分为优、良、中、及格、不及格五等。

优:程序功能完备,报告有深度, 遵守实践纪律。

良:程序功能满足要求,报告有内容, 遵守实践纪律。

中:程序和报告基本满足要求, 遵守实践纪律。

及格:程序有错误但大体能运行,有报告书,基本遵守实践纪律。

不及格:程序完全错误或严重违反实践纪律。c++语言程序设计报告

一、实践内容

统计稿件管理数据,要求能用菜单实现如下功能:(1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。(2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。(4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。(5)根据用户输入,绘制稿件按省份的百分比饼图。(自学利用c++提供的库函数绘制曲线图)。

二、实践成果

灵活运用《c++程序设计》课程所学的基础知识,独立设计大型程序的能力;该程序必须用户界面友好、操作简洁方便,大大提高工作效率。

此程序先由用户输入数据,并存储。再作各种功能处理。整个程序基本可以实现稿件管理数据系统的统计。

三、程序功能 a)录入功能:可以写入关于稿件的基本信息,并进行以下几项功能。b)排序功能:用户可按作者的省份,将每个省的总发表篇数进行排序,并

输出。

c)查询功能:用户可根据作者与月份查出某作者某月的稿件数据,没找到的给予提示。d)绘制饼状图功能:系统根据输入的数据绘制高价男生份的百分比饼图。e)各项退出功能:在每个环节里都设有退出功能。

四、设计思路

统计稿件管理数据系统程序框图篇五:mfc心得 mfc学习心得

时光如梭,不知不觉短学期已经结束一个月左右了。对于mfc,这种c++的高级应用,从陌生到熟悉,从茫然到大致了解,从不屑一顾到很感兴趣,在编写飞行棋这个游戏的过程中感触良多,也收获了许多。mfc跟以前的控制台编程有比较大的差异,实现了部分可视化编程。对于其中复杂的类和函数,刚开始的时候感到相当的恐慌。虽然在暑假的时候有看过一些书,但到真正做起来却仍然觉得很吃力。第一次上mfc的课,老师一下子讲了很多东西,主要是控件,对于如此繁复的知识感觉一片茫然。整个理论课上了四节,虽然老师也讲了一些东西,但是对于我们要做的系统却是远远不够的。所以,很多东西都需要我们自学,到图书馆借书,到网上查找资料,问同学,问老师……我们使用各种方法获取知识。

必须学会自学,这是短学期的编程课带给我的一大感触。虽然我们需要做的只是一个小型的游戏,但对于初次接触窗口编程的我们难度依然是非常大了。但是,我们克服了,通过我们的团结协作。

要学会团结协作是我另一大感触。小组中各个组员的通力合作是编程工作能够顺利进行的一大关键,我们进行了明确的分工,却又能互相合作,互相参考,互相帮助。只有这样,才会有最后的飞行棋游戏新鲜出炉。

在编程过程中,我主要负责的部分是图形设计和界面美化部分。这部分的特点是:既与大一所学的控制台编程紧密联系,又必须要和现在所学的窗口程序编程相衔接。代码基本上靠逐行输入,考验的是自己的逻辑思维能力和严谨态度。其实,这部分的代码并不是特别多,所以编写代码的工作也并不是很难的。最磨练人的耐性的是将写好的代码进行调试。由于程序长度相对于原来的编程根本不属于同一个数量级,所以调试理所当然地变得痛苦起来。并且,这些代码基本上在编译时都能够一次通过,但在实际运行时却老是出错,检查算法和语法又不得要领。这个时候,就不得不耐着性子,用调试工具逐行调试了。学会了一些调试技巧,这不得不说是编程过程中我的一大收获。很久以前,我认为程序就是在头脑中思考一下就立即ok,而且程序先写出来再说, 然后再改就是,人的认识总是慢慢前进的!经过了短学期的编码和试验,彻底打破了以前的一些思维,其实程序只是人的思维的体现而已,因而重要的是思想,所以在构架整体框架的时候,先写一些程序验证是很必要的,而在程序开发的过程中,其如果对工程不是很了解的阶段,也只能算是在为整体框架做必要的验证,所以一般的工程的周期长于我们想象的那样!尽管mfc这门课程已经结束了,但是我还会继续学习下去,希望自己将来能够对编程有更加深入的了解。

第三篇:MFC个人心得

MFC个人心得

在四周时间里完成一个MFC的一个项目,个人觉得还是比较宽裕的,我们在第一周确立了项目的软件功能和名称,我们借鉴手机上RSS软件的广泛应用,想要通过MFC编写一个PC端的RSS应用,用户可以通过我们的软件获取到各大网站的新闻,科技精选,人文精选等等,总之,就是可以通过我们的软件得到每天想要获得资讯消息。

之后我们确定了各小组成员在整个团队中的分工。想要完成这样一个RSS软件的开发,思路还是比较明确的,首先要通过后台获取到各大资讯网站的网页源代码,再从这些源代码中间解析出有用的信息,之后将这些信息传递给前台,前台通过一个友好的界面将信息有条有序的展现给用户。我的主要工作就是开发后台,通过解析HTML代码获取各类资讯。由于先前我在Java平台下对于HTML解析的开发有一定的经验,所以我着手开始编写程序是的第一件事就是搜索看是否有已经写好的解析HTML的C++类库,经过我两天的搜索,我发现在C++环境下并没有比较完好的HTML解析类库,于是我暂时放弃了寻找现成的HTML解析类库,通过MFC中的CSting类中的函数操作来自己编写HTML解析类库。我采用DOM型的方式解析HTML,通过两天时间的编写基本实现了HTML的解析功能并且获取了大量网站的有用信息。由

于要求写在参与MFC项目的心得体会,我就贴上具体的C++代码了。在编写程序的过程中,我还是觉得一个优秀的程序员在于提升代码的重用性与可维护性,在理解别人代码的基础上使用网上现有代码是一个比较好的习惯,这样既能够了解其他人在编写程序时的思路理解,开拓自己的编程理念,同时也大量节省了时间,时间的优秀使用在编写程序的过程中是极其重要的。

另外,在编写MFC程序的过程中我也着实体验到了MFC编写程序的局限性。MFC虽然给开发者提供了一个现成的框架,着实便利的开发者的开发。但同样也造成了一个巨大的问题,开发者很难开发出具有个人特色的软件,想要重新改写程序整体的外观就比较困难,并且C++在编写程序时需要开发者自己定义变量的空间开辟和回收,这点上没有JAVA开发时来的方便,尤其是C++当中的指针机制,一不注意还是很容易造成程序错误的。

最后一点就是一个团队在一个项目中的重要意义。如果这样一个软件完全由我一个人进行开发,可能需要耗费大量时间,但是如果合理地分配给各个组员进行完成,便能取得事半功倍的效果,亦能听取各方面的意见,是的程序更加的完善。

第四篇:MFC编程学习心得

//

1、将C语言变量简单重新定义 UINT、INT(32位,4字节)

LONG、DWORD(32位,4字节)WPARAM、LPARAM(32位,4字节)SHORT、WORD(16位,2字节)LONG、LRESULT BOOL(TRUE、FALSE)PINT

PSTR、LPSTR、LPCSTR(字符串指针,只读和可写)

//

2、H开头,Windows句柄类型变量 HANDLE of Windows =>HWND HANDLE of Instance =>HINSTANCE HANDLE of Icon =>HICON

//3结构体类型

SIZE、POINT、RECT

MFC所有封装类一共有200多个,但是MFC的内部技术不只是简单地封装。MFC内部总共有六大关键技术,构架起了整个MFC开发平台。

一、MFC的六大关键技术包括: a)MFC程序的初始化过程: b)消息映射机制;

c)运行时类型识别(RTTI); d)动态创建; e)永久保存; f)消息传递;

六大关键技术的目的是为了提高开发效率,开发者只需要在局部做简单的修改,即可处理大部分窗口事物。

二、SendMessage和PostMessage函数的功能:

a)能够向指定的窗口内发送窗口消息,既可以是本进程内窗口也可以是其他进程的; b)既可以发送系统内部消息,消息编号的范围是:1-WM_USER-1; 例如:WM_LBUTTONDONW,WM_MOUSEMOVE等; c)也可以发送非系统消息(开发者定义的消息),范围是WM_USER-0x7FFF。

三、SendMessage和PostMessage两个函数的区别是:

a)SendMessage是阻塞型函数,PostMessage是非阻塞型函数:

SendMessage用于调用指定窗口的内部程序,直到窗口程序处理完成以后再返回: PostMessage是将一个消息寄送到一个窗口内的消息队列后就立即返回。b)两个函数的返回值不同:

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM,lParam);BOOL PostMessage(HWND hWnd,UNIT Msg,WPARAM wParam,LPARAM,lParam);SendMessage的返回值依赖于消息处理函数

c)跨线程或者跨进程发送消息,推荐使用PostMessage函数。

一、更具主窗口类型,MFC软件工程可以分为以下几种构架模型:

1、SDI(Single Document Interface):单文档界面,一个主框架窗口下只能编辑一份文档。例如:记事本和画笔等。

2、MDI(Multiple Document Interface):多文档界面,一个主框架窗口下可以同时编辑多份文档。

例如:VC++6.0,Photoshop等软件。

3、基于对话框的软件模型:主窗口是通过资源管理器,在对话框模板内摆放控件编辑而成的。

多数用于开发小规模软件,例如:任务管理器。

4、其他自定义窗口做主窗口:主窗口既不是框架也不是对话框,而是直接开发通用窗口类CWind而成。

例如:输入法窗口、QQ和360软件等,有时这类软件都可以使用框架和对话框模式来代替开发而成。

对话框常用消息映射函数:

二、对话框初始化消息:

1、WM_CREATE:通用窗口初始化消息

窗口还未显示出来,只有父窗口,子窗口还没创建

2、WM_INITDIALOG:对话框窗口专用消息

子窗口已经全部创建完成,可以调用和操作子窗口

三、对话框关闭过程消息:

1、WM_SYSCOMMAND:管理所有系统菜单和系统按钮消息 包括通过最大化、最小化、移动、大小和关闭等

2、WM_CLOSE:是WM_SYSCOMMAND消息的一个专用关闭的分支 再次消息处理过程可以取消本次关闭任务

3、IDCANCEL按钮消息:不但用于按钮回调消息,也是系统按钮关闭窗口的回调 执行真正关闭对话框函数是EndDialog,在此消息处理过程可以取消本次关闭任务

4、WM_DESTROY:通用窗口销毁消息

窗口已经在屏幕中消失了,但是自身窗口和窗口内的控件都还可以调用 在此消息处理过程可以取消本次关闭任务

四、非模式对话框:

1、在调用EndDialog函数关闭时,非模式对话框只是隐藏没有真正关闭;

2、在调用DestroyWindow函数关闭时,只是隐藏没有真正关闭;

3、DestroyWindow函数是通用摧毁窗口的函数,适用于对话框、控件、框架和视图等。

一个MFC软件工程由至少一个CWind派生类和一个CWinApp派生类,因此这两个类是MFC工程中最重要的两个类。

一、CWind成员函数:主要就是一个核心成员变量m_hWnd。

1、DestroyWindow:摧毁窗口。

2、Create和CreateEx:创建窗口,CreateEx创建时可以指定扩展风格。

3、获取窗口句柄:

a)pWnd->m_hWnd:直接调用前最好判断一下指针是否为空。b)operator HWND():自动类型转换,将对象转换为句柄。

c)GetSafeHwnd():可以避免的a方法,因为指针为空造成软件崩溃。

4、由句柄转化为CWnd对象:

a)CWnd::FromHandle:生成一个临时性窗口类指针

b)Attach和Detach:为一个CWnd对象嫁接和移除窗口句柄; c)SubclassWindow和UnsubclassWindow:子类化和反子类化; d)SubclassDlgItem:子类化指定ID对应的控件窗口。

5、获取和设置窗口信息:

a)GetWindowText和SetWindowText:获取和设置窗口的标题文字。b)GetStyle和ModifyStyle:获取和设置窗口的基础风格。c)GetExStyle和ModifyStyleEx:获取和设置窗口的扩展风格。

6、计时器: a)SetTimer: b)KillTimer:

7、窗口操作: a)ShowWindow: b)EnableWindow: c)MoveWindow: d)CenterWindow:

二、CWinApp类成员变量:

三、CWinApp类成员函数:

//匈牙利命名法: //变量:

int long定义:int nSel;long nTel HANDLE hInst;CString szName,szPass;CString strAddr;LPCSTR pszName;DWORD dwID;//如果是成员变量,以“m_”开头 //如果是全局变量,以“g_”开头

第五篇:Mfc个人心得体会

Mfc个人心得体会

06a13526

余思远

时间过得很快,历时一个月的短学期即将结束,我们小组的mfc课题也基本完成。虽然只有短短的一个月,但却带给我很多。在小组成员的共同努力下,基本解决了计划中的一个个问题,要实现一个功能并不算复杂的计算器,也没有想象中那么简单。

Mfc涉及的概念很多,语法也与以前有些许不同,在c++基础上新增的内容也有许多。从开始编辑一个简单的界面,通过这段时间的学习,终于感到掌握了些许了,但想更加熟练的使用,也必须付出更多的时间吧。我发现在编程过程中,并不能只想着眼前所负责的这一块,许多对许多综合多方面进行考虑,需要与自己队友进行配合,作出合理的计划和安排。

实践是检验真理的唯一标准,这次mfc的实践活动,让我学习到了很多知识,弥补了很多漏洞。这个看似简单对我们来说却付出了很多时间和精力的程序,让我体会到了mfc相比与单纯的c++的优越性。程序编译过程中的有些困难虽然我们的能力范围内也无法解决,但是在网上资料的参考,读懂他人资料、相关程序的基础上,我们也完成了这个程序。相信这个经历能对以后的编程有很大的帮助。我也从此次课程设计中体会到了团队合作的乐趣和力量。在一个团队中扬长避短,发挥自己应有的作用,能让我们更加容易地去克服一个又一个难关。

下载MFC绘制自定义按钮大全word格式文档
下载MFC绘制自定义按钮大全.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    第七章 自定义数据类型

    第七章 用户自定义数据类型 7.1 结构体类型 7.1.1 结构体的概述一个学生的学号、姓名、性别、年龄、成绩、家庭住址 num name sex age score addr 10010 Li Fun M 18 87.......

    自定义动画学案

    《自定义动画》学案 一、学习目标 1.掌握PowerPoint演示文稿自定义动画设置的一般方法。 2.培养实践操作能力、自学能力。 3.养成严谨的学习态度。 二、认识自定义动画的功......

    uap63自定义参照

    自定义参照开发,例如栏目管理中信息员,就是自定义参照开发,它的开发步骤如下: 1. 参照开发 1. 开发一个页面,像开发一般页面开发时一样的的,这个参照的主要功能是,可以选择组织,部......

    自定义动画教案

    一、教材分析 《制作多媒体演示作品—设置演示文稿的放映效果》一课是八年级《信息技术》第二册上的第三章第三节教学内容的一部分,这节课的内容相对比较独立。本课书的内容......

    MFC规则DLL总结

    MFC规则DLL总结 1、 创建MFC规则DLL工程,生成XX.h, XX.cpp, XX.def文件,插入资源(对话框),生成类。 2、 在XX.cpp 中添加ShowDlg函数,在该函数中定义对话框,显示对话框,对话框所需要......

    MFC 对话框编程 -- 总结

    MFC 对话框编程 -- 总结一、创建对话框对象 1.首先利用资源编辑器创建对话框资源,并针对该对话框资源定义一个对话框类:classCTestDlg :public CDialog 2.创建话话框对象 模态......

    MFC处理绘图(5篇)

    (一)简单的图形输出 1 、点: pDC->SetPixel(Cpoint(200,200),RGB(255,0,0,)); // 在 [200 , 200] 的位置画一个红点2 、线: pDC->MoveTo(0,0); // 直线起点的坐标为( 0 , 0 ) pDC->L......

    MFC音乐播放器(实验报告)

    音乐播放器大型实验报告 一、实验目的 通过动手制作基于VC++的音乐播放器,了解播放器的原理。并通过自己动手,在windows播放器组件的基础上,用自己的算法,去实现自己的界面和自......