1、在资源视图Menu中,打开IDR_MAINFRAME中,文件弹出菜单称为弹出菜单,像“文件”这种选项不能够添加消息响应函数,而将“文件”的“属性”中的“Popup”由false改为true,就可添加消息响应函数。

2、控件ID:图标以IDI_开头,光标以IDC_,菜单用IDM_,来表示。

3、在资源视图Menu中添加消息响应函数,如果在不同类中添加相同消息响应函数,则响应的顺序为:视图类(View)、文档类(Doc)、框架类(Frame)、应用程序类(App)。

4、消息的分类:

  1. 标准消息:除WM_COMMAND之外,所有以WM_开头的消息。从CWnd派生的类,都可以接受到这类的消息。
  2. 命令消息:来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标示(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接受到这类消息。
  3. 通告消息:由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。从CCmdTarget派生的类,都可以接受到这类消息。

总而言之,从CWnd派生出来都可以接受上面3种,而从CCmdTarget派生的类不能够接受标准消息。

5、菜单定义:菜单栏->子菜单(弹出菜单整个部分)->菜单项。

6、由于孙鑫视频教程使用VC6.0,在VS2010中使用的时候,在创建应用程序时,“应用程序类型”里选择“项目类型”是“MFC标准”。然后在“用户界面功能”里“命令栏(菜单/工具栏/功能区)”里选择使用“使用经典菜单”(可以再选上“使用浏览器样式的工具栏”,那样比较美观)。

7、m_strLine是CString的数据类型,nChar是OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)的形参,在VS2010中操作:m_strLine+=(char)nChar。

8、出现Debug Assertion Failed情况下的原因:

出现这种情况很可能是使用了野指针,比如某个指针指向一个局部变量,而在该变量作用域外使用该指针引用了该对象;另外也要检查是否越界。Assertion 是断言,用于假定某个条件肯定会满足,在debug模式下,当该条件不满足时则发生阻塞而弹出该对话框;在release下会忽略断言。

9、在VS2010中,遇到字符要用(_T('')),遇到字符串要用(_T("")),注意单引号与双引号的区别。

10、错误error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPSTR“

int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT1)->GetWindowText(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);

 解决方法:右击当前项目,选择属性,在项目默认值下面的“字符集”选项改为“使用多字节字符集”就可以了。这是多种编程语言标准不统一造成的。

11、DDV: Dialog Data Validation ;  DDX: Dialog Data Exchange

12、MFC中动态链接库和静态链接库的区别:动态链接可以减少程序的内存大小,但是可能导致程序移植到其他电脑上而不能使用;静态链接库则可以保留这些,以便可以在其他电脑上使用。

13、UpdateData(true)表示从控件中读取值传到与控件相关联的变量;UpdateData(False)表示将控件相关联的变量的值显示在控件上。

14、由多个radio组建的Group中,要建立于一个radio控件相关联的成员变量,需要将这个radio的属性的“group”由“false”变为“TRUE”;另外在对这个成员变量的初始化的值要为-1,如果要用向的函数来检查用户是否选中多个radio中的一个,-1表示表示用户没有选中多个radio中的一个,而第一个radio值是从0开始,第二个radio值是从1开始,以此类推,直到遇到下一个组才结束。

15、cs.style&=~FWS_ADDTOTITLE; 注意这种写法,表明在FWS_ADDTOTITLE情况下,不能成立,所以要取反,取反再与操作。

16、在文本中插入插入符,函数使用CreateSolidCaret,还需要ShowCaret来显示插入符;通常插入符的大小随着字体的大小而发生变化,GetTextMetrics来获取当前字体的度量信息

 1 int Cmfctest9View::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CView::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5
 6     // TODO:  在此添加您专用的创建代码
 7     CClientDC dc(this);
 8     TEXTMETRIC tm;
 9     dc.GetTextMetrics(&tm);
10     CreateSolidCaret(tm.tmAveCharWidth/8.0,tm.tmHeight);    //注意这里的8
11     ShowCaret();
12     return 0;
13 }

17、位图插入符用函数CreateCaret

 1 int Cmfctest9View::OnCreate(LPCREATESTRUCT lpCreateStruct)
 2 {
 3     if (CView::OnCreate(lpCreateStruct) == -1)
 4         return -1;
 5
 6     // TODO:  在此添加您专用的创建代码
 7     CClientDC dc(this);
 8     TEXTMETRIC tm;
 9     dc.GetTextMetrics(&tm);
10     CBitmap* pbitmap=new CBitmap;
11     pbitmap->LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1是已经创建位图的句柄
12     CreateCaret(pbitmap);
13     ShowCaret();
14     return 0;
15 }

18、在OnDraw函数中进行文本输出、画图,显示窗口后,如果改变窗口大小,从而引起窗口的重绘,相关的文本和图形都不会消失,而是引起重绘。

19、路径程概念:GetTextMetrics是获取当前字体信息宽度和高度的度量,GetTextExtent是获取特定字符串在窗口显示的宽度和高度

 1 void Cmfctest9View::OnDraw(CDC* pDC)
 2 {
 3     Cmfctest9Doc* pDoc = GetDocument();
 4     ASSERT_VALID(pDoc);
 5     if (!pDoc)
 6         return;
 7     // TODO: 在此处为本机数据添加绘制代码
 8     CString str="北风之神";
 9     pDC->TextOut(50,50,str);  //在指定的位置上输出字符串
10     CSize sz=pDC->GetTextExtent(str); //获取指定字符串在显示窗口的宽度和高度
11     pDC->BeginPath();       //路径程
12     pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);//显示字符串的外接矩形
13     pDC->EndPath();
14     pDC->SelectClipPath(RGN_DIFF); //可查MSDN
15     for (int i=0;i<150;i+=10)     //画网格线
16     {
17         pDC->MoveTo(0,i);
18         pDC->LineTo(150,i);
19         pDC->MoveTo(i,0);
20         pDC->LineTo(i,150);
21     };
22 }

20、做文字图像处理功能可从:CEditView或CRichEditView派生而来

21、设置定时器SetTimer,下面为定时器消息响应函数

 1 void Cmfctest11View::OnDraw(CDC* pDC)
 2 {
 3     Cmfctest11Doc* pDoc = GetDocument();
 4     ASSERT_VALID(pDoc);
 5     if (!pDoc)
 6         return;
 7     // TODO: 在此处为本机数据添加绘制代码
 8     CClientDC dc(this);
 9     m_str="http://weixin.mybole.com";  //m_str为CView类下CString数据类型的成员变量
10     dc.TextOut(0,200,m_str,strlen(m_str));
11     SetTimer(1,100,NULL);
12 }
13 14 void Cmfctest11View::OnTimer(UINT_PTR nIDEvent)//nIDEvent代表定时器的标识,通常有用户设定
15 {
16     // TODO: 在此添加消息处理程序代码和/或调用默认值
17     m_width+=2;            //2代表2个像素点,m_str为CView类下int数据类型的成员变量
18     CClientDC dc(this);
19     TEXTMETRIC tm;
20     dc.GetTextMetrics(&tm);       //获取当前字体的宽度、高度信息
21     CRect rect;
22     rect.left=0;
23     rect.top=200;
24     rect.right=m_width;
25     rect.bottom=200+tm.tmHeight;
26     dc.SetTextColor(RGB(255,0,0));
27     dc.DrawText(m_str,rect,DT_LEFT);//以左对齐的方式
28
29     rect.top=150;
30     rect.bottom=rect.top+tm.tmHeight;
31     dc.DrawText(m_str,rect,DT_RIGHT);//以右对齐的方式
32
33     CSize sz=dc.GetTextExtent(m_str);//获取字符串宽度、高度信息
34     if (m_width>sz.cx)               //当累加的宽度高于字符串宽度,就清0
35     {
36         m_width=0;
37         dc.SetTextColor(RGB(0,255,0));
38         dc.TextOut(0,200,m_str);
39     }
40     CView::OnTimer(nIDEvent);
41 }

转载于:https://www.cnblogs.com/gzy-zju-edu/articles/3994549.html

孙鑫C++第五堂课要点相关推荐

  1. 孙鑫-MFC笔记五--对话框

    对话框的创建 模态对话框 资源添加对话框,双击对话框创建对话框类. 在menu中增加对话框菜单项,将其设为非popup的,并为其在view类下添加响应函数.View类中增加#include " ...

  2. 人生五堂课:读万卷书、行万里路、阅人无数、名师指路、自己开悟

    读万卷书书山有路勤为径 学海无涯苦作舟腹有诗书气自华读书破万卷 下笔如有神黑发不知勤学早 白首方悔读书迟与肝胆人共事 无字句处读书 行万里路千里之行 始于足下不积跬步无以至千里路遥知马力 日久见人心路 ...

  3. 读书札记:德鲁克生命中的七堂课(转)

    德鲁克说:在我的生命中有7堂课,他们教育我怎样保持高效.持续成长.应对变化.打破常规.超越过去.这些既可以是我的,也是大家的. 第一堂课:追求完美.1927年,18岁的德鲁克离开家乡奥地利来到德国的汉 ...

  4. 孙鑫java基础视频教程_孙鑫老师JAVA无难事视频教程 最适合java入门学习打基础的课程 附源码讲义 12课...

    课程介绍 由孙鑫老师亲自授课录制.内容涵盖面广,从入门到精通,授课通俗易懂,分析问题独到精辟,学员通过本套光盘的学习,能够快速掌握Java编程语言,成为Java高手. 由孙鑫老师亲自授课录制.内容涵盖 ...

  5. 孙鑫 第十七课进程间通信之三 命名管道

    说明 命名管道可以用在本地的进程之间,也可以用在跨网络的主机进程之间,孙鑫老师在视频里讲的如果跨网络的话管道名字中要有对方主机名,那么到底是局域网内还是可用于广域网呢?  暂时不知道 我在练习命名管道 ...

  6. 读书笔记——《程序员的思维修炼:开发认知潜能的九堂课》

    前言   最近读论文.做事情感觉效率太低,且注意力不太集中,需要去开拓下思维,调整下自己的学习方法,碰巧看见了这本书<程序员的思维修炼:开发认知潜能的九堂课>,没有醍醐灌顶,但起码受益匪浅 ...

  7. 诸葛亮的十堂课:在变局中安身立命,在逆境中找到力量

    诸葛亮给子书 夫君子之行,静以修身,俭以养德:非澹泊无以明志,非宁静无以致远. 夫学须静也,才须学也:非学无以广才,非志无以成学. 怠慢则不能励精,险躁则不能冶性. 年与时驰,意与岁去,遂成枯落,多不 ...

  8. 孙鑫老师 java从入门到精通 视频教程 批量下载

    本视频教程是孙鑫老师亲自开发录制的,内容涵盖了java技术从入门到精通整个过程.对于java爱好者是一套不可多得的教材! 相信下载此教程的同志都是未来的电脑高手,对于批量下载的方法我在这时就不一一说了 ...

  9. 孙鑫VC++深入详解笔记

    前言:最近感觉技术提升提来很吃力,主要还是因为以前的基础没有打牢,特别是多线程和数据库方面,所有准备重新学习一下基础. 如下文章转载自:http://www.cnblogs.com/gaojun/ar ...

最新文章

  1. 标准c语言怎么绘图,C语言绘图问题
  2. 老李分享:HTTP协议之请求和响应
  3. Oracle 11g Release 1 (11.1) Data Pump 导入模式
  4. Vue-员工管理系统
  5. MySQL 参数autoReconnect=true 解决8小时连接失效(转)
  6. Java Socket 客户端使用指定端口多次连接服务器引发 BindException
  7. 【算法入门】动态图展示 6 个常用的数据结构,一目了然!
  8. 03 | SRE切入点:选择SLI,设定SLO
  9. linux环境下zookeeper部署
  10. 基于 iframe 的全新微前端方案
  11. 找一份好工作真的很难?是的,很难。
  12. JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)
  13. 前端学习(2907):Vite的特点
  14. LeetCode 787. K 站中转内最便宜的航班(Dijkstra最短路径 + 优先队列)
  15. 重磅!阿里推出国产开源JDK!
  16. idea+spring boot+jrebel7.0.14热启动
  17. public protected default private权限修饰符理解
  18. canvas应用之各种游戏转盘
  19. 聊一聊关于“元宇宙”涉及的前端技术
  20. 僵尸网络是什么;僵尸网络有什么特点

热门文章

  1. FPS最精确计算方式
  2. PHP毕业设计项目作品源码选题(7)旅游景区景点售票系统毕业设计毕设作品开题报告
  3. 谷歌、微软都在做付费网盘,为何只有百度饱受争议?
  4. Linux下杀掉正在执行的sh脚本
  5. 理解Spring定时任务@Scheduled的两个属性fixedRate和fixedDelay
  6. idea设置项目为maven项目
  7. python dic 字典排序
  8. 改善压降过大的六种方法
  9. ISDN交换机,ATM交换机,ATM/FastGB以太网交换机,工作与交换机之间有什么差别?
  10. 2021意大利第一品牌辐轮王FRW全球最顶级碳纤维公路车推荐