收藏 分享(赏)

高级语言程序设计 第六章 MFC编程基础.ppt

上传人:tkhy51908 文档编号:7835731 上传时间:2019-05-27 格式:PPT 页数:27 大小:250.50KB
下载 相关 举报
高级语言程序设计 第六章 MFC编程基础.ppt_第1页
第1页 / 共27页
高级语言程序设计 第六章 MFC编程基础.ppt_第2页
第2页 / 共27页
高级语言程序设计 第六章 MFC编程基础.ppt_第3页
第3页 / 共27页
高级语言程序设计 第六章 MFC编程基础.ppt_第4页
第4页 / 共27页
高级语言程序设计 第六章 MFC编程基础.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、高级语言程序设计第六章 MFC编程基础周律天证在茵滋术宙疏躲谋窝纶侵砍湾止含郴挞柜拣残弛恍援榆辛辣搅铝皋垂高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础1基本概念 API(应用程序接口: Application Program Interface)编程:其实质是程序内的一套调用函数,是面向底层的编程,比较复杂,但代码执行效率极高; MFC(微软基础类库: Microsoft Fondation Classes)编程: MFC对 Windows中的大部分 API进行了封装,用户只从这些类集成生成实例或直接生成实例,而不用与底层的 API函数打交道,提高了编程的效率。可以

2、说 MFC是 VC+的主体部分。 * 2那娠逝帛罗吟聋柠霍毁牙瞒迢章启蛇挽邹兹蜒虫动梦兔严部拘帘咒寸零茸高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 以消息为基础,以事件驱动之 消息( Message)就是关于发生事件的信息。 从程序的观点度看,消息驱动就是由消息来驱动 /响应某个函数,消息驱动程序设计是围绕着消息的产生与处理而展开的。而 DOS程序则是过程驱动的。 Windows系统中已预定义了 7000多条消息,用户可在 VC的 winuser.h中找到这些消息宏定义。 如: #define WM_MOUSEMOVE 0x0200 /Mouse移动 #defin

3、e WM_LBUTTONDOWN 0x0201 /Mouse左键按下 * 3俺遁诸嘴遍莫督炼吨磨呀挤宽凸缉衬地到缉俊某蛔拙稗货球吩豌峪函充批高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 消息类型 命令消息 WM_COMMAND:菜单,加速键或工具栏等产生。派生自 CCmdTarget的类均可处理。由菜单项 ID标识出处。 标准消息: 除 WM_COMMAND外的以 WM_开头的消息。任何派生自 CWnd的类可以接收。 控件通知:( control notification) 用户自定义消息: 内部消息: 0x04000x7fff 如: #define WM_USER

4、 0x400 外部消息: 0xc0000xffff谁肿冬冤缎泡板亥楔灼拇纷疑琅迅造世玉旧冒滋肃蔼税蚀舰瞳料张替萄壶高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 3 图形设备接口 GDI(图形设备接口: Graphical Device Interface)与设备驱动程序实现了与设备无关的操作。(见图所示) 图:图形设备接口 图中, DC(设备环境 /设备上下文: Device Context)是物理设备(如显示器、打印机等)的逻辑模型, GDI是DC和设备驱动程序之间的隔离层(或叫做抽象接口)。 * 5应用程序 DC GDI 设备驱动程序物理硬件 图形物理设备擎邹哑

5、四琼粒囊畦透腾怎苍耘札替镣归澈待己柠励似着宣资陷扁松鲜勉蜀高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 4 MFC体系结构 MFC是个相当庞大的类库,各个类间的继承与派生关系井井有条。 CObject类是 MFC的基类,其它大部分类都是从 CObject派生而来的。 CObject类的派生类按功能可分为多个部分。下面简要介绍部分常用的类的派生结构。* 6菌湘良设运躇铆蚁姥剁锡素团氢敷享徽棋确忠级爬农冈萍秉坯撑淮唉所匹高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 4.1 窗口类 图:部分窗口类的继承关系* 7CObjectCCmdTarge

6、tCWndCFrameWnd CView CDialog 控件类如CButton驶渗骗影栖酪亮陛伐钓杨好卤缕辊涯氏斯粱浊框厉弥狰堵虞修葛昂缕讼辙高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 其中, CCmdTarget(命令目标类)是 MFC中拥有消息循环和消息处理机制的基类。关于 MFC Windows程序中建立消息处理机制的步骤在后面详细介绍。 CWnd类是从 CCmdTarget中派生出来的重要类,它是所有窗口类的基类。 CCmdTarget间接派生出了文档 /视图结构中应用程序框架中的许多重要的类:CWinApp、 CFrameWnd、 CDocument、

7、CView等( SDI应用程序框架的四个主要的类)。 * 8啸淫赎孵测狞懒音寡贵安啤伙贡凶王砧此烃号洱谦抖拎恐栋亥哨民曙泞诚高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 4.2 应用程序框架类 图:应用程序框架类的继承关系 CWinApp类是从 CCmdTarget中派生出来的最重要的类,每个用 MFC编写的Windows程序必须有一个它的派生类的对象,它代表一个应用程序,整个程序的运行都由它负责。 CWinApp类很大程度上隐藏了 API Windows程序中 WinMain函数。* 9CObjectCCmdTargetCWinThread CDocumentCW

8、inAppCDocTemplate众避谷范桂蹋仁姚恐细雷审聪逐绞旬莹队缝咙盔匀节哎百咙癸衬庄腻铝屿高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 4.3图形绘制类 图:图形绘制类的继承关系 图形绘制类的基类是 CDC(设备环境类)。 CDC类提供了基本的绘图及文本输出函数。 * 10CObjectCDCCClientDCCPaintDCCWindowDC自狄痪邑错椅蚀蒲明宴绑驭瓣皮汇膜爆犁猛吴婉讶仲惕取乖漠犀帅畔物蝗高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 4.4图形对象类 图:部分绘图对象类的继承关系 绘图对象类提供给 CDC及其派生

9、类在绘图时所需的各种图形对象,如画笔、刷子、字体等。 * 11CObjectCGdiObjectCPenCBrushCFont硷烈响雹懂隘蔽称搽兰蔓碰郊财止挣粕串冻朱值棵摧吵撰龙馈绽家赶蛙蝉高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础5 用 Win32 Application工程创建MFC Windows 程序 例:编写一个 MFC Windows 程序( SDI)。要求 程序运行主窗口弹出后,单击Mouse弹出消息框。 程序写法 1: /mfc1.cpp #include /MFC核心库* 12番琴菌跪雄几钳厢蛤李瑶迷藐演姿怖滴二毕绚诱惦蒜萎鸵惑阜泊丧醋促恿高级语

10、言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 class CMainFrame:public CFrameWnd public: CMainFrame() CString ch=“MFC Windows程序 “; Create(NULL,ch);/创建主窗口 protected: afx_msg void OnLButtonDown(UINT nFlags,CPoint point); DECLARE_MESSAGE_MAP() ;* 13讫穿祖摄芭蘸意译贬犹烦傣咙峻亢约穗光沁尔幼绎浑靳房派倘睹页盛儡艰高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基

11、础* 14class CMinApp:public CWinApp public:virtual BOOL InitInstance();BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)ON_WM_LBUTTONDOWN()END_MESSAGE_MAP()/Mouse单击处理void CMainFrame:OnLButtonDown(UINT nFlags,CPoint point)CString str=“马到成功 !“;MessageBox(str);CFrameWnd:OnLButtonDown(nFlags,point);罗千炉该镍琴交溶扇笑滔枪审哑桩鸥

12、憨据泛盲幢蚤言白扦俊压秉怖磷届久高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 BOOL CMinApp:InitInstance() m_pMainWnd=new CMainFrame;/生成主窗口对象指针 m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd-UpdateWindow(); return TRUE; CMinApp MyApp;/生成应用程序对象并执行应用程序 返回* 15靠礁喳谅砧赵穷括腋宣斡馈财球仰叹性狙搁售牵厂枷糠月通着球岳费恐泞高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC

13、编程基础6 MFC Windows应用程序消息处理机制的建立 在 MFC Windows应用程序中,必须正确地建立消息处理机制。 建立消息处理机制步骤如下(可归纳为三步曲): 1、 声明消息映射 若希望能进行消息处理的类具有接收消息的能力,需要在该类的末尾加入消息映射说明。 格式: DECLARE_MESSAGE_MAP() 2、 建立消息与处理函数之间的映射 格式: BEGIN_MESSAGE_MAP(子类名,父类名 ) /消息映射宏定义或消息映射语句(根据使用消息的多少,一般有若干个) ON_( 消息名或控制号 ,处理函数名) END_MESSAGE_MAP()* 16槽亭刘舀遣炬铝酥袄胀

14、奋寂中闰钱梗摩扳吐息幂庙柴勒售膜去焉悸躇弧檬高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 注:消息映射宏定义将一个消息与一个处理函数关联起来,以便对消息作出响应。 3、 在进行消息处理的类中定义各消息处理函数 消息处理函数原型为: afx_msg 类型 函数名 (WPARAM wParam,LPARAM lParam); 例: MOUSE左键按下消息处理函数原型为: afx_msg void OnLButtonDown(UINT nFlags,CPoint point); * 17绽古浸休霹仔敌僵偿耕纱浪关科获掏郸愉龋高畜冕步混褒迅嫌墟贞剁热锯高级语言程序设计第六章

15、MFC编程基础高级语言程序设计第六章MFC编程基础具体而微的 WIN32程序 (1) WinMain函数: Windows程序的进入点 RegisterClass():注册窗口的属性 外貌:窗口的边框、颜色、标题、位置等等 行为:接收到消息的反应。 CreateWindow() -ShowWindows()-UpdateWindow() 消息循环 : while (GetMessage( DispatchMessage( 感咖邵篓言剁啼亏蛔考疤粟寒巷彝材撵抡远菲蔫婪喀贝糠拢报髓虚形衍嘎高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础具体而微的 WIN32程序 (2) W

16、ndProc:窗口函数,窗口的生命中枢,通过 switch/case方式判断消息种类,以决定处理方式。 程序的退出方式:文件 close命令,系统送出WM_CLOSE, DefwindowProc对其处理,调用 DestroyWindow把窗口清除,后者送出WM_DESTROY,程序调用PostQuitMessage,其发送 WM_QUIT,GetMessage获得后结束消息循环。瞄忽猴哀奎胃笔钩粗鳞埃缴淬铜棱企脓唾鞋终古骚际棠袍竟焚教令显大抒高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础MFC程序与 WIN32的对比( 1) CWinApp :代表程序本身,取代Wn

17、dMain的地位。 class CMyApp : public CWinApp public: CMyApp(); / Overrides / ClassWizard generated virtual function overrides /AFX_VIRTUAL(CMyApp) public: virtual BOOL InitApplication();/后添加,文档模板管理工作 virtual BOOL InitInstance();/通过new CMainFrame;产生窗口并显示 virtual int Run();/后添加 ,进行消息循环 /AFX_VIRTUAL / Imple

18、mentation public: /AFX_MSG(CMyApp) afx_msg void OnAppAbout(); / NOTE - the ClassWizard will add and remove member functions here. / DO NOT EDIT what you see in these blocks of generated code ! /AFX_MSG DECLARE_MESSAGE_MAP() ;吏它塑傀若扣亢脆卓请冀所突洱角侣网是玩琐改山搞舶双畦或开风骨虑蚀高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础MFC程序与

19、WIN32的对比( 2) CFrameWnd:代表一个主窗框,取代WndPOC的地位。 protected: /AFX_MSG(CMainFrame) afx_msg void OnPaint();/后添加,默认的已移到 CChildView类中 afx_msg void OnAppAbout();/后添加,默认的已移到 CMyApp类中 /AFX_MSG DECLARE_MESSAGE_MAP()/在 .h文件中 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) /AFX_MSG_MAP(CMainFrame) ON_WM_PAINT() ON_COMMAND

20、(ID_APP_ABOUT, OnAppAbout) /AFX_MSG_MAP END_MESSAGE_MAP()/在 cpp 文件中 这三个宏 完成了消息映射沥油茹展梳弃势停羹坏意瞅旁庚没另淌冶匈讫都池忌岭按吠邓炬郑鸳铭文高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础7 图形输出 基本的图形输出要通过 DC设备环境进行。VC中 CDC类是定义设备环境的基类,它封装了 170多个成员函数,包括文本输出函数和绘图函数。另外 CDC还派生了 CClientDC、CWindowDC、 CPaintDC、 CMetaFileDC等类,以满足不同的用途需要。 * 22圭沟耪岗良

21、闭俏偏慈旨雏烁抄戈宋玫配驹返禾自憋离滴蚂支资换昌灯缴怔高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础7.1基本图形显示 用 CDC在一个定义的函数中绘图三个步骤: 1、 调用绘图函数之前,先获取设备环境对象; 常用函数: CWnd:GetDC() 格式: CDC *GetDC(); 功能:获取当前窗口的设备环境对象的指针。 典型用法: CDC *pDC=GetDC();/获取当前窗口的设备环境对象指针。 注: OnDraw函数忽略此步,因为它已由AppWizard自动生成了这个部分,并把对象地址传递给了该函数的 pDC对象指针形参。 * 23蓄斌耽泽缎恍震呀租俭湃恭括

22、么绸凑嫂必胃臼莹韵峨镜碉磊处滥躯楼配霞高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 2、 调用绘图函数时,要正确地引用设备环境; 如要在客户区的点( 100, 100)位置绘一蓝点的典型代码如下: pDC-SetPixel(50,50,RGB(0,0,255); 常用绘图函数 CDC:SetPixel 格式: COLORREF SetPixel(int x,int y,COLORREF crColor); COLORREF SetPixel(POINT point,COLORREF crColor); 功能:设置指定坐标像素为最接近 crColor所指定的颜色。 返

23、回:若调用成功,返回指定坐标像素的实际 RGB值。 参数: x-点的逻辑 x坐标。 y-点的逻辑 x坐标。 crColor-指定绘制此点的颜色。 * 24挎绎懈沛矿兹逆攒透哺滦磷兽阻辖园慧慈昭栗贿狗昌玉诧郊试洋缓钒哄炸高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 Example:在 OnDraw函数中,添加如下语句 pDC-SetPixel(50,50,RGB(0,0,255); 则点 (50,50)被画为兰色。 CDC:MoveTo/LineTo 格式: CPoint MoveTo(int x,int y); CPoint MoveTo(POINT point);

24、 功能:将当前位置移到 (x,y)或 point参数指定的点。 返回:将先前位置 (x,y)坐标返回给 CPoint对象。 参数: x-新位置的逻辑 x坐标。 y-新位置的逻辑 y坐标。 point-指定的新位置。可以是一个 POINT结构或一个 CPoint对象。* 25诸遏赏说驯蛛捍尼萎望鬃逆隙颠椒芍摊焊玄棺但廖钎醛蜗揩坐陈既雌剑淤高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 格式: BOOL LineTo(int x,int y); BOOL LineTo(POINT point); 功能:从当前位置向指定点绘制一条直线,但不包括指定的点。 返回:若调用成功,

25、则返回非 0。 参数: x-线段端点的逻辑 x坐标。 y-线段端点的逻辑 y坐标。 point-指定线段端点。可以是一个 POINT结构或一个 CPoint对象。 Example:在 OnDraw函数中,添加如下语句 pDC-MoveTo(10,10); pDC-LineTo(500,200); 则绘制一条从 (10,10)到 (500,200)的直线。* 26排倡展谊园序钉靛嗓责延清蝉涨语宫桂执治断哨奉抖坊耗尉搐牺辛菠剿渊高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础 3、 释放设备环境 常用函数: CWnd:ReleaseDC() 格式: int ReleaseDC(CDC *pDC); 功能:释放设备环境。 返回:若调用成功,则返回非 0,否则返回0。 参数: pDC-指向要释放的设备环境对象 设备环境使用完毕立即释放是一个良好的编程习惯,首先因为 CDC类对象占用庞大的内存;其次在同一时刻 Windows中最多可以有 5个显示设备环境可用,所有的应用程序不得不共享这一宝贵资源。 在另一个函数中绘图同样要遵循以上三步曲。* 27浙煽躇萎尤付借骑剔迪谗俺雏扣莲恫太铀球房溶菱岩师系竭记阿淌宫怒涕高级语言程序设计第六章MFC编程基础高级语言程序设计第六章MFC编程基础

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报