购买

¥ 30.0

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Visual--C++--MFC-编程基础.

Visual--C++--MFC-编程基础..ppt

Visual--C++--MFC-编程基础.

烟雨梦兮
2018-10-14 0人阅读 举报 0 0 暂无简介

简介:本文档为《Visual--C++--MFC-编程基础.ppt》,可适用于IT/计算机领域

VisualCMFC编程基础注意事项一引言为什么学习Windows程序设计微机OS霸主WindowsX(位)WindowsNT(位)程序设计的特殊性Windows工作原理开发工具的多样性主要学习内容Windows系统引擎消息驱动体系三种编程方法基于C语言与SDK工具基于C语言和MFC类库基于VisualC环境Windows系统的特征用户观点统一的图形用户界面(GUI)多任务多线程机制设备无关的图形界面即插即用性(PlugandPlay)用户友好性Windows系统对象的图形表示多种输入方式统一的窗口格式统一的操作方法DOS系统对象的文字表示基于文字的输入命令行交互方式自定义的用户界面对相同的对象采用相同的表现方法对相同的操作采用相同的命令方式人机对话的交互方式同步交互用户和DOS系统(例外:中断)用户和一个线程(WindowsNT)异步交互用户和Windows系统用户和多个进程(多个程序实例)用户和多个窗口Windows的控制机制与资源管理Windows系统和应用程序的交互方式系统与一线程同步交互系统与多线程异步交互事件驱动体系(异步交互的实现方法)事件:鼠标键盘输入、各种状态改变事件发生时用系统消息通知系统系统接收消息提交给各个应用程序资源与内存管理数据资源(Resource)文字信息、位图、图标、光标等等多个程序共享动态连接库(DLL)执行中的连接多个程序共享虚存空间WinNT:GWindows程序设计的特征消息驱动体系Windows系统运行中发生的各种事件以消息的形式通知系统各应用程序提供消息循环接收消息提交给程序中的各个窗口窗口处理每个窗口配备一个窗口函数负责处理收到的消息(程序设计的主要任务)交互控制手段Windows系统消息系统控制应用程序的主要手段数百条消息表示各种事件的发生API函数上千个系统函数与专用数据结构提供各种功能服务WindowsAPI函数窗口管理图形设备接口(GDI)系统服务数据库:ODBC网络与通信:RPCWinSockOLE支持软件开发策略开发需求满足用户需求(功能和友好性)保证软件可维护性鼓励开发可重用构件减少低级工具的使用目的:提高工作效率降低开发投入手段:提供支持程序生成、支持程序综合的各种综合开发工具两级组织和开发工具系统开发人员系统设计与集成界面设计与实现系统开发工具VisualBasicPowerBuilderVisualFoxProExcelAccess构件开发人员可重用构件的设计与实现构件开发工具VisualCCMASMSDKFortranJava为什么选用C语言学习需求:Windows软件结构Windows的消息驱动体系学编程技术不是使用方法学基础知识不是技术手册矛盾与学习曲线众多的程序生成工具方便简单应用系统的开发隐蔽了技术细节和工作原理。三种编程方法基于C语言和SDK开发工具易于理解Windows工作原理庞大的应用程序接口(API、消息)基于C语言和MFC基本类库消息驱动体系符合面向对象思想以MFC作为应用程序接口基于AppWizard、ClassWizard和MFC自动生成应用程序框架提供程序综合支持二、Windows程序设计概论消息驱动体系应用程序框架应用程序简例可执行程序的产生几种常见的系统消息消息驱动体系键盘输入鼠标输入状态改变系统消息队列应用程序队列应用程序队列应用程序队列窗口窗口窗口窗口窗口窗口窗口窗口窗口消息循环消息循环消息循环Windows应用程序应用程序控制关系Windows系统是主控方通过消息控制应用程序的各个窗口各种输入由Windows系统接受不受应用程序的控制应用程序有多个程序入口多个窗口函数Windows系统本身的工作也依靠消息驱动体系应用程序框架程序开发过程源程序*C*CPP目标程序*OBJ可执行文件*EXE可执行程序*EXE资源描述*RC库函数*LIB模块定义*DEF资源文件*RES编译器连接器资源连接开发工具资源编译程序员编制的文件源程序文件(*C*CPP)提供程序入口、消息循环提供窗口创建、窗口函数资源描述文件(*RC)描述常数字符串、位图、图标、光标由SDK工具、AppWizard工具生成模块定义文件(*DEF)描述内存分配、属性库函数的引入、引出源程序结构窗口的程序结构()登记窗口类WNDCLASSwswslpszClassName=窗口类名wslpfnWndProc=窗口函数名……RegisterClass(ws)*给定的窗口函数负责该类窗口的消息响应*窗口的程序结构()创建窗口、显示窗口窗口句柄=CreateWindow(窗口类名标题…)ShowWindow(窗口句柄显示状态)*窗口句柄是窗口的唯一标识*窗口的程序结构()定义窗口函数LRESULTCALLBACK窗口函数(窗口句柄消息标识字参数长参数){switch(iMsg){caseWMPAINT:case}}识别收到的各种消息完成消息响应WinMain的程序结构应用程序入口WinMain(程序实例句柄上一程序实例句柄命令行参数显示状态){if(是首次实例)登记主窗口所属的窗口类创建主窗口显示主窗口消息循环}消息循环MSGmsg*消息结构*while(GetMessage(msg,,,)){*从消息队列取消息*TranslateMessage(msg)*翻译消息*DispatchMessage(msg)*发送消息*}*收到消息WMQUIT时退出循环应用程序简例WinMain函数设置并登记窗口类“WinAPIDemo”指定WndProc为窗口函数创建并显示该类的主窗口进入消息循环WndProc窗口函数鼠标消息WMLBUTTONDOWN鼠标消息WMRBUTTONDOWN撤消消息WMDESTROY其余消息交给DefWindowProc消息的接收与识别消息接收窗口函数(HWNDhwnd窗口句柄WORDmsg消息标识WPARAMwParam字参数LPARAMlParan)长参数消息识别msgwParam窗口函数的实现各case分支设计消息响应代码MessageBox标准信息窗MessageBeep标准发声函数PostQuitMessage发送WMQUIT消息DefWindowProc缺省消息处理函数其他APIGetStockObject获得系统预定义对象LoadCursor装入光标LoadIcon装入图标Windows窗口的缺省功能缺省功能最大最小化、复原、关闭移动、缩放、激活显示、切换系统菜单、鼠标选择、按钮选择实现方法依靠Windows消息驱动体系包括:DefWindowProc窗口函数设计要领根据应用需求的消息响应设计case语句其余消息必须交给DefWindowProc可能递归调用窗口函数可以利用缺省的消息响应如:发送WMCLOSE来关闭窗口需要状态信息时使用静态变量模块定义文件(*DEF)NAME程序名称EXETYPE目标程序类型CODE代码段属性DATE数据段属性HEAPSIZE局部堆尺寸STACKSIZE栈尺寸EXPORTS引出函数IMPORTS引入函数资源描述文件菜单模板菜单名MENU属性BEGINMenuItem“菜单项文本”项标识符POPUP“子菜单项”BEGIN……ENDEND菜单的指定指定wslpszMenuName=菜单名或在CreateWindow调用中指定菜单消息中的wParam为项标识符程序的创建工程文件的使用创建工程文件加入CPP源程序、C源程序、RC资源描述文件、DEF模块定义文件通过工程文件完成源程序的编译、目标程序的连接和可执行文件的生成。程序的调试跟踪调试F单步(进入函数)F单步(不进入函数)ShiftF执行到函数出口程序中断F继续执行F断点设置与撤消窗口函数的跟踪在函数入口加断点几种常见的系统消息鼠标输入WMMOUSEMOVE鼠标移动WMLBUTTONDOWN鼠标左键按下WMLBUTTONUP鼠标左键释放键盘输入WMKEYDOWN键按下WMKEYUP键释放WMCHAR字符键入重画消息WMPAINT重画窗口用户区文本输出例HDChDC输出设备句柄PAINTSTRUCTps重画信息结构switch(msg){……caseWMPAINT:重画消息入口hDC=BeginPaint(hwnd,ps)获得设备TextOut(hDC,,,“Hello”,)文本输出EndPaint(hWnd,ps)释放设备break}hDC代表窗口用户区窗口重画显示原理系统不保存被覆盖的窗口仅将需要显示的部分设置为无效区系统自动向有无效区的窗口发WMPAINT消息各种输出函数应在WMPAINT的消息响应中调用WMPAINT消息的程序产生ShowWindow、UpdateWindow、InvalidateRect等API函数调用时图形输出例intx=LOWORD(lParam)获得鼠标位置inty=HIWORD(lParam)HDChDC=GetDC(hWnd)获取设备句柄switch(msg){……caseWMLBUTTONDOWN:鼠标按下MoveTo(hDC,x,y)break设置当前点caseWMLBUTTONUP:鼠标释放LineTo(hDC,x,y)break画线至指定点}ReleaseDC(hWnd,hDC)释放设备句柄补充说明消息属性的获取参数中可保存多个属性常用LOWORD和HIWORD分解lParam输出设备hDC标识窗口用户区及其设备描述表两种获取hDC的方法WMPAINT响应(BeginPaint,EndPaint)其他消息响应(GetDC,ReleaseDC)本章小结消息驱动体系系统队列、应用队列程序结构登记窗口类、创建窗口、消息循环窗口函数与消息响应CASE分支、缺省处理常用消息和重画机制设备句柄、无效区与WMPAINT上机题用C语言扩充页的程序实现以下功能:当鼠标左键按下时将鼠标当前坐标显示在窗口中随着鼠标移动持续显示鼠标当前坐标鼠标右键按下时清屏。上机题扩充上机题实现以下功能:当鼠标左键按下时以鼠标位置为圆心画出一个直径为的圆。Ellipse(hDC,left,top,right,bottom)要求圆随着鼠标移动直到鼠标左键抬起再次按下鼠标时该圆消失画出新的圆要求随着窗口移动、重置大小或被其他窗口覆盖圆和坐标显示保持原有位置。三、MFC程序设计初步基本思想:以基本类库的形式支持Windows应用程序基本框架和常用模块覆盖API函数提供高级编程接口。OOP与Windows消息驱动体系MFC基本类库与应用程序框架CWnd类和消息处理机制MFC典型应用例面向对象程序设计与Windows的消息驱动体系面向对象方法:若干对象组成软件系统对象是封装的数据及其相关操作(方法)消息传递提供对象通信手段对象激活方法来响应消息面向对象程序设计确认对象及其相互关系整体部分关系一般特殊关系分析系统的工作确认消息传递关系设计对象类用数据结构描述对象的属性与状态用成员函数描述外部操作Windows系统的面向对象分析对象:各种窗口、各种设备和GDI对象对象通信:Windows消息、API函数调用消息传递:调用窗口函数处理Windows消息消息响应:窗口函数case语句的各个分支设备和GDI对象的API函数使用OO方法的好处:面向对象方法和Windows消息驱动体系的完美结合面向对象程序设计语言的支持提供基本类库信息隐蔽以类定义接口代替API接口程序结构的模块化分离消息识别和消息响应OOPL支持Windows程序设计提供程序基本框架各种窗口基本类封装窗口函数、窗口句柄和API提供常用操作和消息响应函数。各种设备和GDI对象类封装句柄、相关数据结构和API。应用程序类和类模板封装Windows应用程序的基本结构MFC的结构基于基本类的程序设计程序结构耦合在应用程序框架中根据应用需求设计窗口派生类定义属性、编制消息响应成员函数理解工作原理程序设计与调试的需求常用容器类()数组类:如:CWordArray、CPtrArray、CObArrayCWordArrayaxfor(inti=i<axGetCount()i)WORDw=axi链表集合类:如:CObList、CPtrList、CStringListCStringListsxPOSITIONpos=sxGetHeadPosition()while(pos){CStrings=sxGetNext(pos)}常用容器类()映射集合类:如:CMapWordToPtr、CMapStringToObCMapWordToPtrwpxPOSITIONpos=wpxGetStartPosition()while(pos){WORDwvoid*pwpxGetNext(w,p,pos)}MFC对象的使用定义方法:定义MFC派生类、定义其属性和成员函数构造方法:构造MFC类对象或其派生类对象或调用其Create函数创建Windows对象通信方法:调用MFC对象的成员函数响应来自其他对象的消息传递向其他对象发送消息发送MFC基本类库的应用框架应用程序类CWinApp成员Run()提供消息循环要求派生类定义InitInstance()自动提供WinMain()调用InitInstance()和Run()各种窗口类通用基类CWnd单文档界面CFrameWnd多文档界面CMDIFrameWnd最简单的MFC应用程序#include<afxwinh>classCHelloApp应用程序派生类:publicCWinApp{public:virtualBOOLInitInstance()实例初始化}classCHelloWnd主窗口派生类:publicCFrameWnd{public:CHelloWnd()构造主窗口}最简单的MFC应用程序(续)CHelloAppHelloApp应用程序BOOLCHelloApp::InitInstance(){mpMainWnd=newCHelloWnd()主窗口mpMainWnd>ShowWindow(mnCmdShow)mpMainWnd>UpdateWindow()显示returnTRUE}CHelloWnd::CHelloWnd(){Create(,“HelloWorld!”)}创建主窗口结构程序调用关系程序入口构造窗口类实例初始化构造CHelloWnd对象调CreatWindow()调UpdateWindow()调消息循环应用框架的作用提供WinMain函数的程序结构包括主窗口类登记和消息循环CWinApp类提供可重载的函数:InitInstance用于初始化如:构造单文档、多文档或对话框的主窗口ExitInstance用于结束处理CWnd类和消息处理机制封装API中窗口处理的数据结构和相关函数提供两类成员函数:窗口API函数:代替SDKAPI函数消息响应函数:响应各种系统消息窗口API函数例ShowWindow、ScrollWindow、SetWindowText消息响应函数例OnPaint、OnLButtonDown、OnKeyUp、OnMouseMove、OnClose、OnHScrollCWnd的使用方法*CPP文件中提供消息映射指定消息响应函数BEGINMESSAGEMAP(派生类窗口基类)ONWMPAINT()各种消息的入口ONWMCLOSE()ONWMKEYUP()ONWMLBUTTONDOWN()ONCOMMAND(菜单项标识响应函数名)ENDMESSAGEMAP()*H文件中加入以下语句:DECLAREMESSAGEMAP()CWnd中的消息响应CWnd提供窗口函数负责消息识别调用规定的消息响应函数多数系统消息由CWnd的消息响应成员函数处理例:ONWMPAINT()规定函数OnPaint响应WMPAINT菜单消息、通知消息等由指定响应函数处理例:ONCOMMAND(ItemID,OnAbout)规定OnAbout响应菜单项ItemIDCWnd派生类的构造class派生类名:publicCWnd{属性、状态的数据结构public:构造函数、析构函数一般的成员函数afxmsg消息响应成员函数DECLAREMESSAGEMAP()}一个消息映射应用例类定义CTheApp应用程序类CMainWin主窗口类程序代码theApp应用程序对象CTheApp::InitInstance实例初始化函数CMainWin::OnRButtonDown左鼠标按下消息响应CMainWin::OnLButtonDown右鼠标按下消息响应MESSAGEMAP主窗口消息映射运行中的事件流图用户应用程序主窗口鼠标双击启动构造WindowsWMCREATEWMPAINT…左鼠标按下WMLBUTTONDOWN右鼠标按下WMRBUTTONDOWNMFC设备描述类封装设备描述表和图形设备接口抽象描述图形输出设备(如:显示器,打印机,绘图仪)常用派生类CPaintDC类用于WMPAINT处理CClientDC类用于其他消息处理CWindowDC类用于整个窗口CClientDC的应用voidCMainWnd::OnLButtonDown(UINTflg,CPointpt){CClientDCdc(this)建立设备描述对象CRectrctGetClientRect(rct)取得窗口矩形dcEllipse(rct)画椭圆CFrameWnd::OnLButtonDown(cfg,pt)}CPaintDC的应用voidCMainWnd::OnPaint(UINTflg,CPointpt){处理WMPAINT消息CClientDCdc(this)CRectrctGetClientRect(rct)dcEllipse(rct)CFrameWnd::OnLButtonDown(cfg,pt)}当窗口重新显示时,自动产生此消息窗口输入消息处理鼠标输入消息鼠标左键按下:WMLBUTTONDOWN鼠标左键释放:WMLBUTTONUP鼠标左键双点:WMLBUTTONDBLCLK鼠标移动:WMMOUSEMOVE键盘输入消息键按下:WMKEYDOWN键释放:WMKEYUP字符键输入:WMCHAR鼠标消息处理CWnd的鼠标消息响应函数afxmsgvoidOnLButtonDown(UINTflg,CPointpt)afxmsgvoidOnMouseMove(UINTflg,CPointpt)……flg虚拟键标志pt鼠标的屏幕坐标鼠标的消息入口ONWMLBUTTONDOWN()ONWMMOUSEMOVE()……应用例:鼠标画线OnLButtonDown(UINTflg,CPointpt)pDrag=newCClientDC(this)构造用户区设备对象pDrag>MoveTo(ptx,pty)设输出位置(设备属性)OnMouseMove(UINTflg,CPointpt)pDrag>LineTo(ptx,pty)画线到点pt、并改变输出位置OnLButtonUp(UINTflg,CPointpt)deletepDrag释放设备对象用户区设备类(非WMPAINT处理)CClientDC封装GetDC和ReleaseDC等API其基类CDC提供GDI输出函数鼠标捕获与释放迫使所有鼠标消息发向当前窗口无效区与WMPAINTInvalidate指定无效区等效于WMPAINTCWnd::Close提供关闭窗口的功能键盘输入处理CWnd的键盘输入消息响应函数afxmsgOnKeyDown(UINTch,UINTrep,UINTflg)afxmsgOnChar()afxmsgOnKeyUp()……ch字符的ASCII值rep重复次数flg虚拟键键盘输入消息入口ONWMKEYDOWN()ONWMCHAR()ONWMKEYUP()应用例:光标状态的切换系统光标的获得hCursor=::AfxGetApp()>LoadStandardCursor(IDCWAIT)AfxGetApp()获得CMyApp指针OnKeyDown(UINTch,UINTrep,UINTflg)hCursor=::SetCursor(hCursor)改变光标并保存原光标OnKeyUp(UINTch,UINTrep,UINTflg)hCursor=::SetCursor(hCursor)恢复光标并保存原光标本章小结OOP与消息驱动体系MFC类库应用框架CWnd类与消息处理CDC设备描述类及其派生类上机题扩充第页表的程序实现以下功能设置一菜单项点击该菜单项时在窗口正中央画出一个*的矩形dcRectangle(top,left,bottom,right)当鼠标左键按下时如果鼠标选在矩形内则光标变为十字矩形随着鼠标移动(以鼠标为矩形中心)直到释放鼠标光标恢复到原状态。再次选择该菜单项时清屏画出新矩形上机题扩充上机题实现以下功能:在矩形随鼠标时在窗口中绘制出鼠标轨迹dcMoveTo(x,y)dcLineTo(x,y)要求窗口被覆盖后能够恢复窗口原有内容。按动鼠标右键时进行清屏。四、图形设备接口图形设备描述表图形输出字体选择和文本输出图象输出调色板图元文件和打印设备设备无关的图形设备接口SDK提供一组API函数图形设备的描述:图形设备描述表句柄:HDCdc=BeginPaint()或GetDC()保存图形输出相关的各种属性GDI对象:画笔:Pen刷子:Brush字体:Font调色板:Palette位图:Bitmap图形设备描述表CDC类支持图形设备描述表属性的设置与获取:Get***Set***绘图工具的设置与获取:坐标变换与映射方式:图形输出函数:LineTo图像输出函数:BitBlt文本输出函数:TextOut设备坐标体系和逻辑坐标体系设备坐标属性:窗口原点:CDC::SetGetWindowOrg()窗口范围:CDC::SetGetWindowExt()逻辑坐标属性:视口原点:CDC::SetGetViewportOrg()视口范围:CDC::SetGetViewportExt()映射模式:CDC::SetGetMapModeMMTEXT像素单位MMISOTROPICX,Y度量相等坐标变换例dcSetViewportOrg(,)dcSetWindowExt(,)dcSetViewportExt(,)逻辑坐标(,)相当于设备坐标(,)CDC成员多用逻辑坐标CWnd成员多用设备坐标设备坐标=视口原点+(逻辑坐标-窗口原点)*视口范围/窗口范围XXYY(,)(,)(,)图形输出GDI对象画笔:画线属性:宽度、线形CPen类支持刷子:添色属性:颜色、位图CBrush类支持绘画模式画笔象素与目标象素的逻辑运算SetROPGetROP图形输出函数当前输出位置MoveToGetCurrentPosition图形输出函数线输出:LineTo,PolyLine,Arc线输出并添色:Rectangle,Ellipse,RoundRect,Chord,Pie,Polygon图形输出步骤(不用缺省值)构造CDC派生类对象CPaintdc(this)构造CPen对象CPenpen()将画笔选入设备描述表p=dcSelectObject(pen)构造CBrush对象CBrushbrs()将刷子选入设备描述表b=dcSelectObject(brs)设置绘画模式r=dcSetROP()调用图形输出函数dcLineTo()恢复原绘画模式dcSetROP(r)恢复原画笔dcSelectObject(p)恢复原刷子dcSelectObject(b)图像输出Windows的两种位图Bitmap位图是GDI对象用于显示。DIB位图与显示设备无关用于交换。Bitmap位图的使用创建CBitmap对象CBitmapbmp创建位图bmp::CreateBitmap或装入位图bmp::LoadBitmap存取位图数据bmp::SetGetBitmapBits位图表面绘图方法()创建内存设备对象(缓冲区)CDCmemDC创建兼容的内存设备描述表memDCCreateCompatibleDC(输出设备)创建CBitmap对象CBitmapbmp创建兼容的位图(或装入位图)bmpCreateCompatibleBitmap(memDC,…位图表面绘图方法()将位图作为显示区选入内存设备memDCSelectObject(bmp)向内存设备的输出图形、图象等效于对该位图的操作主要特征位图作为内存设备的显示区参加运算与显示没有直接显示的手段图象处理采用光栅操作:设备位图(显示区)之间按二进位的逻辑运算图像显示与处理函数PatBlt(矩形光栅操作)矩形区和当前刷子之间的光栅操作BitBlt(矩形源设备矩形位置光栅操作)矩形区和源设备矩形之间的光栅操作StretchBlt(矩形源设备矩形光栅操作)矩形区和源设备矩形之间的光栅操作及缩放SetPixelV(象素点位置颜色)设置指定点的颜色应用例:位图输出voidCMyDC::DrawBitmap(CBitmap*bmp,CPointpt){CDCmemDCmemDCCreateCompatibleDC(this)内存设备memDCSelectObject(bmp)选入memDCSetMapMode(GetMapMode())BITMAPbm获取尺寸bmp>GetObject(sizeof(BITMAP),(LPSTR)bm)CPointorg(,),sz(bmbmWidth,bmbmHeight)memDCDPtoLP(org)DPtoLP(sz)BitBlt(ptx,pty,szx,szy,memDC,orgx,orgy,SRCCOPY)}图像显示与处理函数(续)CDC::MaskBlt(矩形源设备屏蔽位图光栅操作)屏蔽位图、源设备图像和目标矩形的光栅操作CDC::PlgBlt(平行四边形源设备与矩形屏蔽位图)屏蔽位图、源设备图像到平行四边形目标的数据传输CDC::FloodFill(指定点边境颜色)指定点所在区域的颜色填充DIB位图格式(文件格式)位、位图像无颜色屏蔽字位、位图像无颜色表BITMAPFILEHEADERBITMAPINFOHEADER颜色表颜色屏蔽字点阵数据位图尺寸颜色平面数象素位数。。。DIB头DIB位图的使用()DIB位图的显示::SetDIBitsToDevice(设备矩形行范围点阵DIB头将DIB位图的指定行输出到设备显示区的矩形::StretchDIBits(设备矩形源矩形点阵DIB头将DIB位图的指定矩形输出到设备显示区的矩形DIB位图的使用()DIB位图的变换从GDI位图到DIB位图::GetDIBits(设备位图行范围点阵DIB头从DIB位图到GDI位图CDC::CreateDIBitmap(DIB头点阵屏蔽位图生成方法从彩色位图产生单色位图用于实现透明背景CBitmapbmpbmpCreatBitmap(宽度,高度,,,)单色位图CDCmemDCmemDCCreateCompatibleDC(输出设备)memDCSelectObject(bmp)::SetDIBits(memDCmhDC,bmpGetSafeHandle(),首行行数点阵指针DIB头指针DIBRGBCOLORS)将指定的DIB位图变换成单色GDI位图五、对话框和控制框资源编辑对话框控制框的使用综合应用例资源编辑资源种类对话框模板DIALOG菜单模板MENU图标ICON光标CURSOR位图BITMAP加速键表ACCELERATORS字符串表STRINGTABLE工具条模板TOOLBARVC的资源编辑器新建Insert>Resouce>选择资源修改直接双点指定资源的图标编辑不同资源采用不同编辑器程序识别方法资源标识符(整数)菜单模板的编辑结构描述(页)菜单菜单标识符MENU子菜单项POPUP“字体(F)”菜单项MENUITEM“宋体tCtrlS”标识符指定菜单标识符IDRMAINMENU选择菜单项双点进入属性编辑编写显示文本等属性指定菜单项标识符IDFONTSONGTI对话框模板的编辑编辑窗显示对话框和控制框工具条编辑指定对话框标识符和属性选择控制框拖入对话框双点控制框进入属性编辑编辑属性指定控制框标识符对话框的资源描述RCIDDMYDIALOGDIALOGDISCARDABLE,,,STYLEDSMODALFRAME|WSPOPUP|WSCAPTION|WSSYSMENUCAPTION“MyDialog”FONT,“System”BEGINDEFPUSHBUTTON“OK”,IDOK,,,,PUSHBUTTON“Cancel”,IDCANCEL,,,,CTEXT“Thisisadialog”,IDCSTATIC,,,,CONTROL,IDCSTATIC,”Static”,SSBITMAP,,,,END页对话框编程支持SDK的支持(API):使用特殊的窗口函数(指定对话框模板)系统提供窗口类MFC的支持:voidCMainWnd::OnHelpAbout(){CDialogCAboutdlog(IDDMYDIALOG,this)创建对话框对象CAboutdlogDoModal()启动对话}对话框的消息响应定义CDialog派生类CMyDialog各种消息响应函数OnInitDialog对话框初始化OnOK确认按钮OnCancel取消按钮获得控制框对象(界面元素)CDialog::GetDlgItem(控制框标识符)在ClassWizard中设定窗口的分类用户界面元素的容器各种对话框(CDialog派生类)各种视窗(CView派生类)产生窗口状态变化消息用户界面的基本元素各种控制框(CControl的派生类)向上级窗口发送通知消息控制框的使用六种主要的控制框按钮框(包括单选钮、复选钮、分组框)静态框(文本显示)编辑框(单行、多行编辑)列表框(单选、复选)滚动条框(水平、垂直)组合框(可编辑、不可编辑)MFC支持CButtonCStaticCEditCListBoxCScrollBarCComboBox两种使用方法作为子窗口控制框对象作为上级窗口类的成员变量动态生成在OnCreate中调用该对象的Create、指定风格与属性作为对话框元素在对话框模板中定义控制框、描述其风格与属性自动生成随对话框生成上级窗口和控制框的通信()控制框向上级窗口发通知消息上级窗口操纵控制框的方法获取控制框对象或控制框标始符调用其成员函数、或发送消息或其基类CWnd的控制框函数CWnd派生各种控制框类可利用控制框类生成各种特殊的控制框MFC已提供了二十二种控制框类上级窗口和控制框的通信()控制框发向上级窗口的通知消息BN****按钮操作通知LBN****列表框操作通知EN****编辑框操作通知CBN****组合框操作通知WMHSCROLL,WMVSCOLL滚动操作消息上级窗口发向控制框的控制消息BM****按钮框控制消息LB****列表框控制消息EM****编辑框控制消息CBM****组合框控制消息综合应用例输入各种数据的对话框(页)利用编辑控制框画面设计资源编辑生成对话框模板编辑控制框:数据输入静态控制框:文本说明按钮控制框:确认和取消程序实现方法数据结构的设计主窗口类CMainWnd对话框类CComputerDlg分别提供成员变量保存各个编辑结果数据传输关系的确定在编辑框和成员变量之间DoDataExchange(CDataExchange*pDX)编辑结果的获取重定义OnOK()数据传输的实现voidCComputerDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX)DDXText(pDX,IDCCPUEDIT,mCPU)CPU编辑框《=》成员变量DDVMaxChars(pDX,mCPU,)字符串长度限制DDXText(pDX,IDCFREQEDIT,mFreqEdit)主频编辑框《=》成员变量DDVMinMaxUInt(pDX,mMainFreq,,)无符号整数的上下限。。。}数据传输的控制(Dialog类)DoModalOnInitDialogOnOKUpdateDataDoDataExchage自动调用程序中直接调用主窗口的实现消息映射ONWMCREATE()创建消息ONCOMMAND(IDFILEEXIT,OnFileExit)菜单项ONCOMMAND(IDFILEINFO,OnFileInfo)菜单响应函数voidCMainWnd::OnFileInfo(){CComputerDlgdlgdlgDoModel()启动对话框CClientDCdc(this)ShowMessage(dc)显示数据}上机题设计一个Windows程序完成以下功能:提供菜单项来调用一个对话框来完成以下学生信息的输入:学号、姓名、出生年月日、籍贯、班级、毕业学校输入结束后在主窗口显示所有输入信息上机题扩充上机题的功能在对话框中补充两个组合框实现性别、所属学院的输入以及在主窗口的显示六、程序设计专题应用程序框架持久性对象和序列化多线程程序设计抢先多任务和非抢先多任务应用程序框架AppWizard自动生成程序框架程序类型(可执行、动态连接库、构件)各种主窗口界面风格(工具条、状态条)数据库支持、Socket支持、OLE支持ClassWizard自动生成类的框架指定类的生成消息映射、成员函数、成员变量ActiveX属性、方法和事件生成的程序框架CDemoApptheApp继承CWinApp,提供消息循环和程序入口CMainFrame继承CMDIFrameWnd,提供多文档主窗口CChildFrame继承CMDIChildWnd,提供多文档子窗口CDemoDocument继承CDocument文档类CDemoView继承CView视窗类CDemoApp::InitInstanceCMultiDocTemplate*pDocTemplatepDocTemplate=newCMultiDocTemplate(文档模板IDRAXTYPE,模板描述RUNTIMECLASS(CAXDoc),文档类RUNTIMECLASS(CChildFrame),窗口类RUNTIMECLASS(CAXView))视窗类AddDocTemplate(pDocTemplate)登记CMainFrame*pMainFrame=newCMainFrame主窗口if(!pMainFrame>LoadFrame(IDRMAINFRAME))创建returnFALSE文档视窗结构文档与视窗的分离面向对象分析的基本观点:信息处理和信息显示的分离MFC分别提供文档基类和视窗基类CDocument、CViewMFC提供SDI和MDI应用框架CSingleDocTemplate类支持单文档:建立主窗口、文档类和视窗类的关系CMultiDocTemplate类支持多文档:建立MDI子窗口、文档类和视窗类的关系文档类成员函数文档与视窗关系的建立AddView(视窗对象)从文档类获得视窗对象pos=FisrtViewPosition()CView*GetNextView(pos)更新所有视窗对象UpdateAllViews(当前视窗)响应File菜单命令OnNewDocument()DeleteContent()OnOpenDocument()OnFileSave()OnSaveDocument()OnFileSaveAs()视窗类的功能继承窗口基类属性、API成员函数、消息响应函数获得相应的文档对象CDocment*GetDocument()视窗初始化:InitUpdate()视窗更新响应:OnUpdate()窗口重画:OnDraw(CDC*pDC)文档与视窗的交互()用户应用框架文档对象视窗对象启动创建创建OnCreateOnInitUpdataOnUpdate编辑更新UpdateAllViewOnUpdate文档与视窗的交互()用户应用框架文档对象视窗对象程序更新数据UpdateAllViewOnUpdate退出撤消撤消注意事项

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/126

Visual--C++--MFC-编程基础.

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利