ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:20.75KB ,
资源ID:19482590      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19482590.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中南大学数学院大三年级面向对象实验报告Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中南大学数学院大三年级面向对象实验报告Word格式文档下载.docx

1、dc.MoveTo(p1);dc.LineTo(p2);OnLButtonUp(nFlags, point);OnMouseMove(UINT nFlags, CPoint point) static int n=0;switch(+n)case 1: p2=point; break;case 2: p1=p2; n=0;if(m=1)OnMouseMove(nFlags, point);实验二,创建菜单用MFC创建菜单按钮具体的制作过程:首先,生成一个MFC AppWizard EXE 工程生成一个以CButton为基类的新类,名为CMenuButton,然后用ClassWizard为其添加

2、两个成员函数:DrawItem()和PreSubclassWidnow();手工为CMenuButton类添加BOOL类型m_bDrawFocusRect成员变量,用于决定是否在按钮上画焦点矩形,添加SetDrawFocusRect()函数用于设置这个标志,默认为画焦点矩形;添加两个枚举类型的变量m_ArrowType和m_PopupPos,用于决定所画的箭头的类型和菜单弹出的位置。箭头可为右箭头、下箭头、小右箭头、小下箭头、上箭头和左箭头;菜单的弹出位置可以为按钮的左上角、右上角、左下角和右下角。最后手工添加两个函数,SetArrowType()和SetMenuPopupPos(),用于设置

3、以上各种风格,其默值分别为画右箭头和在左下角弹出。如果只需要菜单而不需要画箭头,只需置空BS_OWNERDRAW标志位即可,添加一个SetStyle()函数,用于设置是画箭头还是显示文本,其默认值是画箭头。为方便处理按钮的BN_CLICKED通知消息,为CMenuButton类创建一个公有的成员函数OnClick(),以便在BN_CLICKED的消息处理器中调用。它有两个参数,第一个是菜单资源的ID,第二个参数为子菜单的ID,默认为0。如果只有一组子菜单,则可使用其默认值0。OnClick()函数的返回值为所选的菜单项的命令ID,若未作任何有效选择,则返回0。下面是程序代码。头文件:#if !

4、defined(_EWAY_MEMUBUTTON_H_INCLUDED_)#define _EWAY_MEMUBUTTON_H_INCLUDED_#if _MSC_VER = 1000#pragma once#endif / _MSC_VER / MenuButton.h : header file/class CMenuButton : public CButtonpublic:CMenuButton();virtual CMenuButton();DECLARE_DYNAMIC( CMenuButton )enum ArrowTypearrowRight,/向右的箭头;arrowDown,

5、 /向下的箭头;arrowSmallRight, /向右的小箭头;arrowSmallDown, /向下的小箭头;arrowUp, /向上的箭头;arrowLeft/向左的箭头;m_ArrowType;enum PopupPos/名称为TopLeft等等,遵守英文习惯;posTopLeft, /左上角;posBottomLeft, /左下角;posTopRight, /右上角;posBottomRight, /右下角;m_PopupPos;virtual UINT OnClick(UINT nIDMenuResource,UINT nSubMenu=0);void SetArrowType(C

6、MenuButton:ArrowType type=CMenuButton:arrowRight);void SetDrawFocusRect(BOOL bDrawFocusRect=TRUE);void SetMenuPopupPos(CMenuButton:PopupPos pos=CMenuButton:posBottomLeft);void SetStyle(BOOL bDrawArrow=TRUE);/ Overrides/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CMenuButton)virtual

7、 void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);protected:virtual void PreSubclassWindow();/AFX_VIRTUALBOOL m_bDrawFocusRect;/AFX_MSG(CMenuButton)/AFX_MSGDECLARE_MESSAGE_MAP();/AFX_INSERT_LOCATION/ Microsoft Developer Studio will insert additional declarations immediately before the previous line.

8、#endif / !实现文件:/ MenuButton.cpp : implementation file#include stdafx.hMenuButtonTest.hMenuButton.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMenuButtonIMPLEMENT_DYNAMIC( CMenuButton, CButton )CMenuButton:CMenuButton()SetArrowType();SetDrawFocusRect();Se

9、tMenuPopupPos();CMenuButton()BEGIN_MESSAGE_MAP(CMenuButton, CButton)/AFX_MSG_MAP(CMenuButton)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMenuButton message handlersvoid CMenuButton:DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)/使用FromeHandle()创建临时的对象,若使用Attach()则必需在最后使用Detach()CDC *pDC= CDC:FromHandle(lpDrawItemSt

10、ruct-hDC);/得到画笔的颜色;CPen pen;if( (lpDrawItemStruct-itemState&ODS_DISABLED) )pen.CreatePen(PS_SOLID, 0, :GetSysColor(COLOR_GRAYTEXT) );elseGetSysColor(COLOR_BTNTEXT) );CPen * pOldPen = pDC-SelectObject(&pen);CFont font;font.CreateFont(12, 0, 0, 0, FW_NORMAL, 0, 0, 0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS

11、,CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS, Marlett);CFont * pOldFont=pDC-font);CSize size=pDC-GetTextExtent(4,1);/决定箭头的样子,具体的值可在“字符映射表”中查得;CString strArrow;switch (m_ArrowType)case CMenuButton:arrowRight:strArrow=;break;arrowDown:6arrowSmallRight:8arrowSmallDown:9arrowUp:5arrowLef

12、t:3default:ASSERT(FALSE);/计算座标值,用于绘制箭头;int x=(lpDrawItemStruct-rcItem.right-lpDrawItemStruct-rcItem.left-size.cx)/2;int y=(lpDrawItemStruct-rcItem.bottom-lpDrawItemStruct-rcItem.top-size.cy)/2;/画按钮与箭头;ODS_SELECTED) )pDC-DrawFrameControl(&lpDrawItemStruct-rcItem, DFC_BUTTON, DFCS_BUTTONPUSH|DFCS_PUSH

13、ED);/在按钮被按下时,上面的字符要有一个向右和向下的偏移;TextOut(+x,+y,strArrow);rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);TextOut(x,y,strArrow);/如果需要,画焦点矩形;ODS_FOCUS) & m_bDrawFocusRect)CRect rectFocus(lpDrawItemStruct-rcItem);rectFocus.DeflateRect(3,3); /看起来比较接近的值;DrawFocusRect(rectFocus);/仅将对象选回即可,不必调用DeleteTempMap();SelectObj

14、ect(pOldPen);SelectObject(pOldFont);UINT CMenuButton:OnClick(UINT nIDMenuResource, UINT nSubMenu/*=0*/)CMenu menu;/装载菜单;VERIFY(menu.LoadMenu(nIDMenuResource) );/得到子菜单;CMenu *pPopup = menu.GetSubMenu(nSubMenu);/默认为第一组子菜单;ASSERT(pPopup != NULL);CRect rect;GetWindowRect(rect);POINT point;/决定弹出菜单的位置;swi

15、tch (m_PopupPos)posTopLeft:/左上角;point.x=rect.left;point.y=rect.top;posBottomLeft:/左下角;point.y=rect.bottom;posTopRight:/右上角;point.x=rect.right;posBottomRight:/右下角;/弹出菜单;UINT nMenuSel = pPopup-TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON |TPM_NONOTIFY |TPM_RETURNCMD),point.x, point.y, this);pPopup-Dest

16、royMenu();/返回被选择的菜单的ID,如果无任何有效的选择,将返回0;return nMenuSel;PreSubclassWindow() CButton:PreSubclassWindow();/默认值:加入BS_OWNERDRAW风格;ModifyStyle(0,BS_OWNERDRAW);SetArrowType(CMenuButton:ArrowType type)m_ArrowType=type;SetDrawFocusRect(BOOL bDrawFocusRect)m_bDrawFocusRect=bDrawFocusRect;SetMenuPopupPos(CMenu

17、Button:PopupPos pos)m_PopupPos=pos;SetStyle(BOOL bDrawArrow)if(bDrawArrow)ModifyStyle(0,BS_OWNERDRAW,SWP_NOMOVE|SWP_NOZORDER| SWP_NOSIZE);ModifyStyle(BS_OWNERDRAW,0,SWP_NOMOVE|SWP_NOZORDER| SWP_NOSIZE);要使用这个类,为对话框添加CMenuButton类型的按钮成员变量,若需改变默认风格,则可在OnInitDialog中调用CMenuButton类的公有成员函数SetArrowType()、Set

18、DrawFocusRect()、SetMenuPopupPos()或SetStyle(),在ClassWizard中为对话框添加按钮的BN_CLICKED消息处理函数,然后在其中调用CMenuButton类的OnClick()成员函数,并指定一个菜单ID给它,最后处理OnClick()函数的返回值即可。下面是一个例子。void CMenuButtonTestDlg:OnTest() UINT nSel=m_btnTest.OnClick(IDR_POPUP);switch(nSel)case ID_APP_EXIT:SendMessage(WM_CLOSE,0,0);case ID_POPUP

19、_ITEM1:AfxMessageBox(您选择了第一项!case ID_POPUP_ITEM2:您选择了第二项!case ID_POPUP_ITEM3:您选择了第三项!/Do nothing;所用菜单的资源描述如下,外观可参见文首的图。IDR_POPUP MENU DISCARDABLE BEGINPOPUP _POPUP_MENUITEM 第一项, ID_POPUP_ITEM1第二项, ID_POPUP_ITEM2第三项, ID_POPUP_ITEM3MENUITEM SEPARATOR退出(&X), ID_APP_EXITENDBOOL CMenuButtonTestDlg:OnInit

20、Dialog() CDialog:OnInitDialog();/因为这几个值都是默认值,所以注释掉,仅为了演示用法;/m_btnTest.SetDrawFocusRect(TRUE);/m_btnTest.ArrowType (CMenuButton:/m_btnTest.SetStyle(TRUE);/m_btnTest.SetMenuPopupPos(CMenuButton:return TRUE; 值得补充说明的是,使用CMenuButton类的时候,并不一定需要在对话框模板中为按钮指定BS_OWNERDRAW风格,因为在缺省情况下,CMenuButton类的PreSubclassWi

21、ndow()函数中已经自动加入了这一风格。搜狗搜索猜测,此时您可能对以下内容感兴趣,点击看看! 关闭关闭提示 关闭确 认 取 消实验三,计算器MFC实现简单功能计算器 第一步:利用MFC的AppWizard生成一个基于对话框的程序(本程序工程名为Calc),切换到Resource ,在Dialog中的IDD_CALC_DIALOG上双击,然后添控件按钮,做好外观布局,改好按钮ID和Caption;第二步:为控件按钮增加相应的变量和事件响应函数;第三步:在CCalcDlg类中添加相应变量;第四步:对控件按钮的事件响应函数做处理;代码如下:第一部分(利用ClassWizard添加,可不必手动修改)

22、,在CalcDlg.h中的代码修改如下:/ CalcDlg.h : 头文件 / #pragma once / CCalcDlg 对话框 class CCalcDlg : public CDialog / 构造 CCalcDlg(CWnd* pParent = NULL); / 标准构造函数 / 对话框数据 enum IDD = IDD_CALC_DIALOG ;virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV 支持 / 实现 HICON m_hIcon;/ 生成的消息映射函数 virtual BOOL OnInitDialog

23、();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP() afx_msg void OnBnClickedBtnnum0();afx_msg void OnBnClickedBtnnum1();afx_msg void OnBnClickedBtnnum2();afx_msg void OnBnClickedBtnnum3();afx_msg void OnBnClickedBtnnum4();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1