MFC第五讲
- 格式:doc
- 大小:209.00 KB
- 文档页数:9
1.将MFC应用程序的命令处理路径补充完整:命令—(视图类)—(文档类)—文档模板类—(框架窗口类)—应用程序类2.传统的软件开发主要采用(过程)驱动的方法,而WINDOWS程序的开发使用(消息)驱动模型,该模型靠(事件)机制来实现其功能。
3.(主框架类)是应用程序中负责控制菜单、工具栏和状态栏等界面元素的最主要的类。
4.VC++开发环境可以生成的基于MFC AppWizard exe的应用程序类型有(对话框)(单文档/视图结构)和(多文档/视图结构)。
5.包含类定义的文件称为(头文件),包含类中成员函数的实现代码的文件称为(源文件),包含资源信息的文件称为(资源文件)。
6.Resource View的主要功能是(编辑当前工程中的资源)。
7.应用程序向导的主要功能是(帮助生成应用程序)。
8.导的主要功能是(管理各个类中的消息)。
9.工作区窗口一般在开发环境的左侧,它包含工程的多各方面,分别是(ClassView)、(ResourceView)和(FileView)。
10.项目工作区的文件扩展名为(dsw)。
11. WINDOWS应用程序的消息来源主要包括(输入消息)、(控制消息)、(系统消息)和(用户消息)。
12.发送消息可以采用的两个函数是(PostMessage)和(SendMessage)。
mdUI类的主要功能是(主要用来更新命令用户接口的状态,如子菜单、工具栏上的按钮等)。
14.代码ON_UPDATE_COMMAND_UI(ID_TEST,OnUpdateTest)的主要功能是(将对ID_TEST的更新命令接口消息的处理映射到OnUpdateTest函数上)。
15.CString类的功能是(处理字符串),其Format函数的功能是(格式化字符串)。
16.Ctime类的功能是(处理日期时间),其Format函数的功能是(将时间对象格式化为字符串)。
17.MessageBox函数的第一个参数表示(消息文字),第二个参数表示(标题文字),第三个参数表示(图标与按钮组合).18.在windows中,按下一个字符键,会依次触发(WM_KEYDOWN)、(WM_CHAR)和(WM_KEYUP)3个消息19.windows窗口内部需要重新绘制时,会得到一个(WM_PAINT)消息,当释放鼠标右键时,会得到一个(WM_RBUTTONUP)消息。
VS2010/MFC编程入门教程之目录第一部分:VS2010/MFC开发环境VS2010/MFC编程入门之前言VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)第二部分:VS2010-MFC应用程序框架VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)VS2010/MFC编程入门之四(MFC应用程序框架分析)VS2010/MFC编程入门之五(MFC消息映射机制概述)第三部分:对话框VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)VS2010/MFC编程入门之七(对话框:为对话框添加控件)VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量)VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序)VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)VS2010/MFC编程入门之十二(对话框:非模态对话框的创建及显示)VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)VS2010/MFC编程入门之十六(对话框:消息对话框)VS2010/MFC编程入门之十七(对话框:文件对话框)VS2010/MFC编程入门之十八(对话框:字体对话框)VS2010/MFC编程入门之十九(对话框:颜色对话框)第四部分:常用控件VS2010/MFC编程入门之二十(常用控件:静态文本框)VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control)VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上)VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上)VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)第五部分:菜单、工具栏与状态栏VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用)VS2010/MFC编程入门之三十八(状态栏的使用详解)第六部分:文档、视图和框架VS2010/MFC编程入门之三十九(文档、视图和框架:概述)VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)第七部分:MFC常用类VS2010/MFC编程入门之四十二(MFC常用类:CString类)VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理)第八部分:字体和文本输出VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)VS2010/MFC编程入门之四十八(字体和文本输出:文本输出)第九部分:图形图像VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush)第十部分:Ribbon界面开发VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)VS2010/MFC编程入门之前言鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了。
(适合初学者)M F C基础教程-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN(适合初学者)M F C基础教程-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANVisual C++/MFC初学教程目录+-- 第一章 VC入门|------ 如何学好VC|------ 理解Windows消息机制|------ 利用Visual C++/MFC开发Windows程序的优势|------ 利用MFC进行开发的通用方法介绍|------ MFC中常用类,宏,函数介绍+-- 第二章图形输出|------ 和GUI有关的各种对象|------ 在窗口中输出文字|------ 使用点,刷子,笔进行绘图|------ 在窗口中绘制设备相关位图,图标,设备无关位图|------ 使用各种映射方式|------ 多边形和剪贴区域+-- 第三章文档视结构|------ 文档视图框架窗口间的关系和消息传送规律|------ 接收用户输入|------ 使用菜单|------ 文档,视,框架之间相互作用|------ 利用序列化进行文件读写|------ MFC中所提供的各种视类介绍+-- 第四章窗口控件|------ Button|------ Static Box|------ Edit Box|------ Scroll Bar|------ List Box/Check List Box|------ Combo Box/Combo Box Ex|------ Tree Ctrl|------ List Ctrl|------ Tab Ctrl|------ Tool Bar|------ Status Bar|------ Dialog Bar|------ 利用AppWizard创建并使用ToolBar StatusBar Dialog Bar |------ General Window|------ 关于WM_NOTIFY的使用方法+-- 第五章对话框|------ 使用资源编辑器编辑对话框|------ 创建有模式对话框|------ 创建无模式对话框|------ 在对话框中进行消息映射|------ 在对话框中进行数据交换和数据检查|------ 使用属性对话框|------ 使用通用对话框|------ 建立以对话框为基础的应用|------ 使用对话框作为子窗口+-- 第六章网络通信开发|------ WinSock介绍|------ 利用WinSock进行无连接的通信+------ 利用WinSock建立有连接的通信如何学好VC这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果。
MFC使用教程范文MFC(Microsoft Foundation Classes)是微软开发的一种用于Windows操作系统的C++类库,可用于开发图形用户界面(GUI)应用程序。
MFC使用教程将指导您如何使用MFC库来创建基于Windows的应用程序。
第一部分:基本概念和环境设置(200字)在开始使用MFC之前,您需要了解一些基本概念和环境设置。
首先,MFC是一个C++类库,包含了各种用于构建Windows应用程序的类和函数。
它提供了处理窗口、控件、消息等等的功能。
其次,您需要一个C++编译器和开发环境,如Visual Studio。
确保您已经安装了Visual Studio以及所需的MFC组件。
第二部分:创建一个MFC应用程序(300字)步骤1:打开Visual Studio并选择创建“新项目”。
步骤2:选择MFC应用程序向导,并输入项目名称和位置。
步骤3:选择应用程序类型(单文档/多文档/对话框)。
步骤4:在向导的下一步中,选择所需的特性和选项。
步骤5:在应用程序向导中完成剩余设置,并单击“完成”来创建项目。
步骤6:Visual Studio将自动生成与所选应用程序类型相对应的源代码和资源文件。
第三部分:了解主要概念(300字)在了解如何使用MFC库之前,您需要了解一些主要概念。
首先是对话框,它是一个用于显示和与用户交互的窗口。
其次是框架窗口,用于包含和管理窗口的集合。
控件是用于接收和显示用户输入的界面元素,如按钮、文本框等。
消息是在窗口间传递的信息,用于处理用户输入和应用程序的操作。
第四部分:使用MFC库创建控件和处理消息(400字)步骤1:在资源视图中选择对应的对话框或窗口。
步骤2:在工具箱中选择所需的控件,并将其拖放到对话框或窗口上。
步骤3:在类视图中选择对应的对话框或窗口类。
步骤4:在类向导中选择“消息映射”选项,并添加所需的消息处理函数。
步骤5:在消息处理函数中编写代码来处理控件的事件或用户输入。
MFC(文本编程,孙鑫C++第五讲笔记整理)分类:MFC2012-08-13 18:40 1610人阅读评论(1) 收藏举报以下是第五讲的主要内容(文本输入输出,要先设置光标位置,然后再输出文本)1.CWnd::CreateSolidCaret创建插入符,ShowCaret()显示插入符。
GetTextMetrics(),获得当前字体的一些信息。
CWnd::CreateCaret()创建图象插入符bitmap.LoadBitmap(IDB_BITMAP1);//此处的bitmap为成员变量!!!CreateCaret(&bitmap);ShowCaret();TEXTMETRIC tm;//字体结构体dc.GetTextMetrics(&tm);//m_ptOrigin.y+=tm.tmHeight;//获得字体高度。
2.VC中CString::LoadString(ID号),比较方便。
3.路径层的概念:有两种方法创建路径层:(1)pDC->BeginPath();pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);pDC->EndPath();pDC->SelectClipPath(RGN_DIFF);(2)CSize sz=pDC->GetTextExtent(str);CRgn rn;rn.CreateRectRgn(0,50,sz.cx,sz.cy);pDC->SelectClipRgn(&rn,RGN_DIFF);路径层有什么作用?可以保护我们先前的文本或者图像不被后来画的覆盖。
4.在View上输入文字的步骤。
CFont font;//创建字体对象font.CreatePointFont(300,"华文行楷",NULL);//设置CFont *pOldFont=dc.SelectObject(&font);//将字体选择到DC中TEXTMETRIC tm;//创建字体信息对象dc.GetTextMetrics(&tm);//获得当前字体信息if(0x0d==nChar)//处理回车键{m_strLine.Empty();m_ptOrigin.y+=tm.tmHeight;}else if(0x08==nChar)//处理退格键{COLORREF clr=dc.SetTextColor(dc.GetBkColor());dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);m_strLine=m_strLine.Left(m_strLine.GetLength()-1);dc.SetTextColor(clr);}else{m_strLine+=nChar;}CSize sz=dc.GetTextExtent(m_strLine); CPoint pt;//处理光标的位置pt.x=m_ptOrigin.x+sz.cx;pt.y=m_ptOrigin.y; SetCaretPos(pt);dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);//输出字体dc.SelectObject(pOldFont);//将原先的字体选择回去。
有了CEditView 和CRichEditView之后,就没有那么辛苦了。
5.模拟卡啦OK变色的步骤。
(1)设置定时器(2)在定时器中加入代码具体代码如下:(编完一个之后,注释掉前面的,继续编)我这里把第五讲分成两个程序,把最后一个卡拉OK输出单独出来了,怕太混乱了。
CXXView:1private:2 CBitmap cbitmap;3 CPoint m_orgpt;4 CString cstring;5 CPoint cppt;位图:OnDraw:6void CMyTextView::OnDraw(CDC* pDC)7{8 CMyTextDoc* pDoc = GetDocument();9 ASSERT_VALID(pDoc);10 // TODO: add draw code for native data here1112 /*this->CreateSolidCaret(10,20);//创建一个光标13 this->ShowCaret();*/ //显示光标,这两个函数都是CWnd的成员函数141516 /*TEXTMETRIC tm; //这个结构体可以获取字体的信息17 pDC->GetTextMetrics(&tm);18 this->CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);//创建一个大小高度比较正常的光标19 this->ShowCaret();*/202122 /*cbitmap.LoadBitmap(BITMAPID);//cbitmap资源一般设置成为成员变量23 this->CreateCaret(&cbitmap);//创建了一个位图光标,一闪一闪24 this->ShowCaret();*/2526 /*27 //CString cstring("大家好,欢迎一起学习MFC");28 CString cstring="大家好,欢迎一起学习MFC";29 pDC->TextOut(100,100,cstring);*/3031 /*CString cstring;32 cstring.LoadString(IDS_MYBOLG);33 pDC->TextOut(100,100,cstring);*/343536 /*CString cstring("Hello,欢迎大家一起学习MFC");37 CSize cs=pDC->GetTextExtent(cstring);//区别跟TextMetric的不同,这里是根据字符串来获取的38 pDC->TextOut(100,100,cstring);39 pDC->BeginPath();40 pDC->Rectangle(100,100,cs.cx+100,cs.cy+100);//如果没有上下的XXPath,则显示一被白色画刷填充的矩形41 pDC->EndPath();424344 //SelectClipPath的参数,大家不妨多试几种,看看效果45 //RGN_AND RGN_COPY RGN_DIFF RGN_OR RGN_XOR46 pDC->SelectClipPath(RGN_DIFF);47 for(int i=0;i<300;i+=10)//花了横竖很多线条,交叉着48 {49 pDC->MoveTo(i,0);50 pDC->LineTo(i,300);5152 pDC->MoveTo(0,i);53 pDC->LineTo(300,i);54 }*/5556 TEXTMETRIC tm;57 pDC->GetTextMetrics(&tm);5859 this->CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);60 this->ShowCaret();616263}CXXView右键,添加一个WM_Char消息:生成OnChar方法64<span style="font-size:10px;">void CMyTextView</span>::OnChar(UINT nChar, UINTnRepCnt, UINT nFlags)65{66 // TODO: Add your message handler code here and/or call default6768 CClientDC ccdc(this);69 TEXTMETRIC tm;70 ccdc.GetTextMetrics(&tm);7172 CFont cfont;73 cfont.CreatePointFont(130,"宋体",NULL);7475 CFont *pcf=ccdc.SelectObject(&cfont);7677 if(0x0D==nChar)//换行78 {7980 cstring.Empty();//换行清空81m_orgpt.y=m_orgpt.y+tm.tmHeight;//横坐标不变,纵坐标向下一个字符的高度82 }83 else if (0x08==nChar)//删除键84 {8586 COLORREF bkcolor=ccdc.GetBkColor();//获取背景颜色87 COLORREF oldcolor=ccdc.SetTextColor(bkcolor);//设置字体颜色为背景颜色,并且保留设置前的字体颜色88 ccdc.TextOut(m_orgpt.x,m_orgpt.y,cstring);//用背景颜色输出文字89cstring=cstring.Left(cstring.GetLength()-1);//去掉最后一个字符90 ccdc.SetTextColor(oldcolor);//重新设置原来的字体颜色9192 }93 else94 {95 cstring+=nChar;//插入字符96 }9798 CSize cs=ccdc.GetTextExtent(cstring);//获取字体矩形的对象99 CPoint cpt;100cpt.x=m_orgpt.x+cs.cx;101cpt.y=m_orgpt.y;102 this->SetCaretPos(cpt);//重新设置光标的位置103 ccdc.TextOut(m_orgpt.x,m_orgpt.y,cstring);//输出字符串104105 ccdc.SelectObject(pcf);106107 CView::OnChar(nChar, nRepCnt, nFlags);108}感觉还是不完美,比如删除,当删除一行之后,应该跳回到上一行的最后,这里都没有判断,请自行测试下面是单独出来的卡拉OK显示成员变量:109private:110 CString cstring;111 int m_width;构造函数:112CJustTextView::CJustTextView()113{114 // TODO: add construction code here115cstring="";116m_width=0;117}OnDraw函数:118void CJustTextView::OnDraw(CDC* pDC)119{120 CJustTextDoc* pDoc = GetDocument();121 ASSERT_VALID(pDoc);122 // TODO: add draw code for native data here123124cstring="hello,welcome to myblog,欢迎大家一起学习MFC";125126 pDC->TextOut(0,200,cstring);127128 this->SetTimer(1,50,NULL);129130131132133}CXXView右键,添加一个WM_TIMER消息:自动成成OnTimer方法134void CJustTextView::OnTimer(UINT nIDEvent)135{136 // TODO: Add your message handler code here and/or call default 137138 CClientDC ccdc(this);139 TEXTMETRIC tm;140 ccdc.GetTextMetrics(&tm);141142 CSize cs=ccdc.GetTextExtent(cstring);143 COLORREF oldcolor=ccdc.SetTextColor(RGB(255,0,0));144 if(1==nIDEvent)145 {146 m_width+=5;147148 CRect crect;149crect.left=0;150crect.top=200;151crect.right=m_width;152crect.bottom=crect.top+tm.tmHeight;153154 ccdc.DrawText(cstring,&crect,DT_LEFT);155156crect.left=0;157crect.top=150;158crect.right=m_width;159crect.bottom=crect.top+tm.tmHeight;160161 ccdc.DrawText(cstring,&crect,DT_RIGHT);162163 if(m_width>cs.cx)164 {165m_width=0;166 ccdc.SetTextColor(RGB(0,255,0));167 ccdc.TextOut(0,200,cstring);168169 COLORREF bkcolor=ccdc.GetBkColor();170 ccdc.SetTextColor(bkcolor);171 ccdc.TextOut(0,150,cstring);172173 }174175 }176177178 CView::OnTimer(nIDEvent);179}效果图较多,这里不一一截图了:。