MFC编程基础案例_第1页
MFC编程基础案例_第2页
MFC编程基础案例_第3页
MFC编程基础案例_第4页
MFC编程基础案例_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、7/20/2021WINDOWS程序开发 讲师:鲍钰1MFC编程基础案例 讲师:鲍钰7/20/2021WINDOWS程序开发 讲师:鲍钰2nMicrosoft Foundation Classn微软基础类微软基础类7/20/2021WINDOWS程序开发 讲师:鲍钰3扩展资源等功能目录MFCBaseExt下例程n创建菜单7/20/2021WINDOWS程序开发 讲师:鲍钰47/20/2021WINDOWS程序开发 讲师:鲍钰57/20/2021WINDOWS程序开发 讲师:鲍钰6ADD FUNCTION7/20/2021WINDOWS程序开发 讲师:鲍钰7双击自动进入函数编码7/20/2021

2、WINDOWS程序开发 讲师:鲍钰8双击自动进入函数编码nvoid CMyFrame:OnMenuitem40001() nn/ TODO: Add your command handler code herenMessageBox(菜单1.1 , My first MFC Win , n MB_ICONINFORMATION+MB_OK) ;nn7/20/2021WINDOWS程序开发 讲师:鲍钰9ID_APP_EXIT是特殊ID,不需要任何代码,执行退出。7/20/2021WINDOWS程序开发 讲师:鲍钰107/20/2021WINDOWS程序开发 讲师:鲍钰11nvoid CMyFra

3、me:OnLButtonDown(UINT nFlags, CPoint point) nn/ TODO: Add your message handler code here and/or call defaultnMessageBeep (16);nCFrameWnd:OnLButtonDown(nFlags, point);n7/20/2021WINDOWS程序开发 讲师:鲍钰12增加如下消息处理函数7/20/2021WINDOWS程序开发 讲师:鲍钰13继续添加如下功能1.鼠标左键按下修改光标为IDC_CURSOR12.修改程序的大图标为IDI_ICON13.键盘按下VK_ESCAPE

4、,对消息框的回馈进行处理。4.创建窗口时候Create函数载入菜单资源IDR_MENU1。5.鼠标移动时,坐标的获取。6.鼠标左键按下时候,点击区域的判定。7. CMyFrame 私有变量的添加。8. 画笔画刷的使用,及图形的绘制。9. 窗口创建前,最大化按钮的取消。10. 鼠标右键按下时,动态修改窗口小图标和标题。7/20/2021WINDOWS程序开发 讲师:鲍钰14继续添加如下功能1.鼠标左键按下修改光标为IDC_CURSOR1nvoid CMyFrame:OnLButtonDown(UINT nFlags, CPoint point) nn/ TODO: Add your messag

5、e handler code here and/or call defaultn:SetCursor(AfxGetApp()-LoadCursor(IDC_CURSOR1);7/20/2021WINDOWS程序开发 讲师:鲍钰15继续添加如下功能2.修改程序的大图标为IDI_ICON1nCMyFrame:CMyFrame(): m_rectEllipse(200, 300, 600, 400)nnm_nColor = GRAY_BRUSH;nCString str=MFC Windows程序基础框架扩展;nCreate(NULL,str,WS_OVERLAPPEDWINDOW,CRect(0,

6、0,758,580),NULL,MAKEINTRESOURCE(IDR_MENU1),0,NULL);nLoadIcon(AfxGetApp()-m_hInstance,MAKEINTRESOURCE(IDI_ICON1);nn7/20/2021WINDOWS程序开发 讲师:鲍钰16继续添加如下功能3.键盘按下键盘按下VK_ESCAPE,对消息框的回馈进行处理。,对消息框的回馈进行处理。nvoid CMyFrame:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) nn/ TODO: Add your message handler code h

7、ere and/or call defaultnif (nChar=VK_ESCAPE) /ESC退出程序,其他退出程序,其他BEEPnif (AfxMessageBox(OK to close window?, MB_YESNO) = IDYES) nPostQuitMessage(0);nn7/20/2021WINDOWS程序开发 讲师:鲍钰17继续添加如下功能4.创建窗口时候Create函数载入菜单资源IDR_MENU1。n/*nBOOL Create(LPCTSTR lpszClassName,/注册类,MFC将注册类封装,我们填写NULLn LPCTSTR lpszWindowNam

8、e,/窗体名,窗体标题n DWORD dwStyle = WS_OVERLAPPEDWINDOW,/窗体风格n const RECT& rect = rectDefault,/窗体的矩形区域n CWnd* pParentWnd = NULL, / 父窗体指针n LPCTSTR lpszMenuName = NULL, /窗体的菜单 Use MAKEINTRESOURCE if the menu has an integer ID instead of a string.n DWORD dwExStyle = 0,/窗体扩展风格n CCreateContext* pContext = N

9、ULL);/框架窗体的视图和文档信息,一般填NULLn*/7/20/2021WINDOWS程序开发 讲师:鲍钰18继续添加如下功能5.鼠标移动时,坐标的获取。鼠标移动时,坐标的获取。nvoid CMyFrame:OnMouseMove(UINT nFlags, CPoint point) nn/ TODO: Add your message handler code here and/or call defaultnmypoint=point;/跟踪鼠标位置跟踪鼠标位置nInvalidateRect(CRect(500,20,600,50), TRUE);/TRUE表示擦除,绘制表示擦除,绘制

10、,一定要加的一定要加的nclass CMyFrame : public CFrameWndnnprivate:nint m_nColor;/画刷颜色画刷颜色nCRect m_rectEllipse;/画刷椭圆区域画刷椭圆区域nCpoint mypoint;/跟踪鼠标位置跟踪鼠标位置nvoid CMyFrame:OnPaiCPoint mypointnt() nn /draw the mouse positionnCString str;/这是我们最後要赋值的字符串;这是我们最後要赋值的字符串;nCString str_x;/X坐标坐标nCString str_y;/Y坐标坐标nstr_x.Fo

11、rmat(%d,mypoint.x);/转换转换point.x到到str_xnstr_y.Format(%d,mypoint.y); /转换转换point.y到到str_ynstr+=X: ; str+=str_x;str+= ;str+=Y: ; str+=str_y;/以上是连接字符串到以上是连接字符串到str中中ndc.SetTextColor(RGB(0,0,255);ndc.DrawText(str, -1, CRect(500,20,600,50), DT_CENTER);7/20/2021WINDOWS程序开发 讲师:鲍钰19继续添加如下功能6.鼠标左键按下时候,点击区域的判定。

12、鼠标左键按下时候,点击区域的判定。CRect有一个成员函数有一个成员函数PtInRect,用于判断一个点是否落在矩形内。用于判断一个点是否落在矩形内。nvoid CMyFrame:OnLButtonDown(UINT nFlags, CPoint point) nn/ TODO: Add your message handler code here and/or call defaultn:SetCursor(AfxGetApp()-LoadCursor(IDC_CURSOR1);nif (m_rectEllipse.PtInRect(point) nif (m_nColor = GRAY_B

13、RUSH) nm_nColor = WHITE_BRUSH;nnelse nm_nColor = GRAY_BRUSH;nnInvalidateRect(m_rectEllipse,TRUE);/TRUE表示擦除后再绘制表示擦除后再绘制nnMessageBeep (16);nCFrameWnd:OnLButtonDown(nFlags, point);n7/20/2021WINDOWS程序开发 讲师:鲍钰20继续添加如下功能7. CMyFrame 私有变量的添加。nclass CMyFrame : public CFrameWndnnprivate:nint m_nColor;/画刷颜色画刷颜

14、色nCRect m_rectEllipse;/画刷椭圆区域画刷椭圆区域nCPoint mypoint;/跟踪鼠标位置跟踪鼠标位置7/20/2021WINDOWS程序开发 讲师:鲍钰21继续添加如下功能8. 画笔画刷的使用,及图形的绘制。nvoid CMyFrame:OnPaint() nn CPaintDC dc(this); / device context for paintingn CBrush * pBrushOld; /记住上一次画刷n CBrush brushTmp;n brushTmp.CreateSolidBrush(RGB(0,255,0);n CPen * pPenOld;

15、 /记住上一次画笔n CPen penTmp;n penTmp.CreatePen(PS_DASHDOT,10,RGB(255,0,0);n pPenOld=dc.SelectObject(&penTmp);n pBrushOld=dc.SelectObject(&brushTmp);7/20/2021WINDOWS程序开发 讲师:鲍钰22继续添加如下功能8. 画笔画刷的使用,及图形的绘制。nvoid CMyFrame:OnPaint() nn /draw the mouse positionnCString str;/这是我们最後要赋值的字符串;nCString str_x;

16、/X坐标nCString str_y;/Y坐标nstr_x.Format(%d,mypoint.x);/转换point.x到str_xnstr_y.Format(%d,mypoint.y); /转换point.y到str_ynstr+=X: ;nstr+=str_x;nstr+= ;nstr+=Y: ;nstr+=str_y;/以上是连接字符串到str中ndc.SetTextColor(RGB(0,0,255);ndc.DrawText(str, -1, CRect(500,20,600,50), DT_CENTER);7/20/2021WINDOWS程序开发 讲师:鲍钰23继续添加如下功能8

17、. 画笔画刷的使用,及图形的绘制。画笔画刷的使用,及图形的绘制。nvoid CMyFrame:OnPaint() nndc.SetPixel(500,500,RGB(0,0,255);ndc.SetTextColor(RGB(255,0,0);ndc.TextOut(200, 50, Hello, world!);ndc.MoveTo(200,10);ndc.LineTo(300,10); nndc.Rectangle(300,100,500,200);7/20/2021WINDOWS程序开发 讲师:鲍钰24继续添加如下功能8. 画笔画刷的使用,及图形的绘制。画笔画刷的使用,及图形的绘制。nv

18、oid CMyFrame:OnPaint() nnbrushTmp.DeleteObject();/在创建新的画刷之前要先将旧的删掉在创建新的画刷之前要先将旧的删掉nbrushTmp.CreateHatchBrush(HS_CROSS,RGB(0,255,0); (网格的)网格的)ndc.SelectObject(&brushTmp);ndc.Rectangle(0,0,150,200);7/20/2021WINDOWS程序开发 讲师:鲍钰25继续添加如下功能8. 画笔画刷的使用,及图形的绘制。画笔画刷的使用,及图形的绘制。nvoid CMyFrame:OnPaint() nndc.S

19、electStockObject(m_nColor);ndc.Ellipse(m_rectEllipse);ndc.SetBkColor(RGB(0,0,255);ndc.DrawText(click here to change the color!, -1, m_rectEllipse, DT_CENTER);ndc.SelectObject(pPenOld);ndc.SelectObject(pBrushOld); /把原来的画刷和画笔再恢复把原来的画刷和画笔再恢复7/20/2021WINDOWS程序开发 讲师:鲍钰26继续添加如下功能9. 窗口创建前,最大化按钮的取消。窗口创建前,最大

20、化按钮的取消。nBOOL CMyFrame:PreCreateWindow(CREATESTRUCT& cs) nn/ TODO: Add your specialized code here and/or call the base classncs.style&=WS_MAXIMIZEBOX;/取消最大化按钮取消最大化按钮nreturn CFrameWnd:PreCreateWindow(cs);n7/20/2021WINDOWS程序开发 讲师:鲍钰27继续添加如下功能10. 鼠标右键按下时,动态修改窗口小图标和标题。鼠标右键按下时,动态修改窗口小图标和标题。nvoid C

21、MyFrame:OnRButtonDown(UINT nFlags, CPoint point) nn/ TODO: Add your message handler code here and/or call defaultnHICON hIcon=AfxGetApp()-LoadIcon(IDI_ICON2);nASSERT(hIcon);nAfxGetMainWnd()-SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);/动态修改窗口小图标动态修改窗口小图标nnSetWindowText(新的动态窗口标题新的动态窗口标题);/动态修改窗口标题动态修改窗

22、口标题7/20/2021WINDOWS程序开发 讲师:鲍钰28使用画刷画笔对象是用来绘制图形边界的,而画刷则是给图形内部着色的。大多数CDC的绘图函数都要同时使用画笔和画刷使用画笔来来绘制各种图形的边界,使用画刷来填充图形的内部。1常用的两类画刷常用的两类画刷(1)纯色画刷 又称实画刷,事实上它是一个定义了8像素8像素的含有64个相同颜色的像素。在绘制时,Windows将多个这样的纯色位图平铺来填充封闭图形的内部。 创建纯色画刷首先创建一个非初始化的CBrush对象,然后调用CBrush:CreateSolidBrush()函数来初始化纯色画刷函数来初始化纯色画刷。7/20/2021WINDO

23、WS程序开发 讲师:鲍钰29使用画刷(2)阴影画刷阴影画刷是用某种颜色的阴影线在封闭图形内填充。它也是一个定义了8像素8像素的含有64个像素单位位图,该位图就是一个阴影。在绘制时,Windows将多个这样含有阴影的位图平铺来填充封闭图形内部。 创建阴影画刷首先创建一个非初始化的CBrush对象,然后调用CBrush: CreateHatchBrush()函数来初始化阴影画刷函数来初始化阴影画刷。 当使用阴影绘图时,Windows使用默认的背景颜色将阴影线段之间的空间填满。但是,若使用CDC:SetBkColor()函数改变了当前设备描述表的背景颜色,或者通过使用CDC:SetBkMode()函

24、数从OPAQUE到TRANSPARENT改变背景模式。dc.SetBkMode(OPAQUE);/采用背景色填充,缺省dc.SetBkMode(TRANSPARENT);/背景色透明7/20/2021WINDOWS程序开发 讲师:鲍钰30使用画刷2画刷类CBrush CBrush对象封装了Windows GDI刷子,并提供与CBrush对象一起工作的一些函数,如下表所示。3画刷工具的使用步骤(1)生成CBrush的实例。刷子以多种样式和颜色出现在CBrush:CBrush(): CBrush( ); CBrush( COLORREF crColor ); CBrush( int nIndex,

25、 COLORREF crColor ); 7/20/2021WINDOWS程序开发 讲师:鲍钰31画刷风格画刷风格说明说明HS_BDIAGONALHS_BDIAGONAL由由4545度下降阴影线(自左向右)度下降阴影线(自左向右)HS_CROSSHS_CROSS水平和垂直交叉阴影线水平和垂直交叉阴影线HS_DIAGCROSSHS_DIAGCROSS4545度十字交叉阴影线度十字交叉阴影线HS_FDIAGONALHS_FDIAGONAL以以4545度上升阴影线(自左向右)度上升阴影线(自左向右)HS_HORIZONTALHS_HORIZONTAL水平阴影线水平阴影线HS_VERTIALHS_VE

26、RTIAL垂直阴影线垂直阴影线画刷的风格7/20/2021WINDOWS程序开发 讲师:鲍钰32各种画刷演示7/20/2021WINDOWS程序开发 讲师:鲍钰33表表8.8 库存工具库存工具图形对象图形对象说明说明图形对象图形对象说明说明BLACK_BRUSHBLACK_BRUSH黑色画刷黑色画刷DKGRAY_BRUSHDKGRAY_BRUSH 暗灰画刷暗灰画刷GRAY_BRUSHGRAY_BRUSH 灰色画刷灰色画刷HOLLOW_BRUSHHOLLOW_BRUSH 中空画刷中空画刷LTGRAY_BRUSHLTGRAY_BRUSH 淡灰色画刷淡灰色画刷WHITE_BRUSHWHITE_BRU

27、SH 白色画刷白色画刷BLACK_PENBLACK_PEN 黑色画笔黑色画笔WHITE_PENWHITE_PEN 白色画笔白色画笔ANSI_FIXED_FONTANSI_FIXED_FONT WindowsWindows固定倾角(单间隔)的系统字体固定倾角(单间隔)的系统字体 ANSI_VAR_FONTANSI_VAR_FONT WindowsWindows可变倾角(比例间隔)的系统字体可变倾角(比例间隔)的系统字体 SYSTEM_FONTSYSTEM_FONT 系统字体,系统字体,WindowsWindows使用它来画菜单、对话框中的控件和其它文本使用它来画菜单、对话框中的控件和其它文本DE

28、FAULT_PALETTDEFAULT_PALETTE E 缺省的调色板,该调色板包含了系统调色板中的缺省的调色板,该调色板包含了系统调色板中的2020种静态颜色种静态颜色 库存工具库存工具7/20/2021WINDOWS程序开发 讲师:鲍钰34文字字体,目录MFCFont例程7/20/2021WINDOWS程序开发 讲师:鲍钰35文字字体,目录MFCFont例程nHFONT CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwltalic, DWORD fd

29、wUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace);nnHeight:指定字体的字符单元或字符的逻辑单位高度:指定字体的字符单元或字符的逻辑单位高度nnWidth:指定所要求字体的字符的逻辑单位的平均宽度。如果此值为:指定所要求字体的字符的逻辑单位的平均宽度。如果此值为0,字体映射器选择,字体映射器选择一个一个closest m

30、atch值值nnEscapement:指定移位向量和设备:指定移位向量和设备X轴之间的一个角度,以十分之一度为单位。移位向轴之间的一个角度,以十分之一度为单位。移位向量平行于正文行的基线。量平行于正文行的基线。nnOrientation:指定每个字符的基线和设备:指定每个字符的基线和设备X轴之间的角度。轴之间的角度。nFnWeight:在:在0到到1000之间指定字体的权值,如之间指定字体的权值,如400表示标准体,表示标准体,700表示黑(粗)体,表示黑(粗)体,如果此值为如果此值为0,则使用缺省的权值。,则使用缺省的权值。nfdwItalic:如果设置为:如果设置为TRUE则指定斜体。则指

31、定斜体。nfdwUnderline:如果设置为:如果设置为TRUE,则指定加下划线。,则指定加下划线。nfdwStrikeOut:如果设置为:如果设置为TRUE,则,则strikeout指定字体。指定字体。nfdwCharSet:指定字符集:指定字符集nfdwOutputPrecision:指定输出精度:指定输出精度nfdwClipPrecision;指定裁剪精度;指定裁剪精度nfdwQuality:指向输出质量:指向输出质量nfdwPitchAndFamily:指定字体间距和字体族:指定字体间距和字体族nlpszface:采用字体名:采用字体名7/20/2021WINDOWS程序开发 讲师:鲍钰36文字字体,目录MFCFont例程nvoid CMyFrame:OnMenuitem40001() /菜单1nnCClientDC dc(this);nCFont fontText;nfor (int i = 10; i = 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论