C++学习 2019-1-12

昨天跟着去了一下机构的年会,瞬间感觉:我要工作!我要进大厂!
从今天开始进入MFC的学习,MFC是基于时间消息处理机制的“高级Win32”,所以知识点还是挺多的,还得继续加油学习。

1.MFC基本概念

1.1 首先什么是MFC?

MFC是 Microsoft Foundation Class 的缩写,是封装的 Windows API。

1.2 其次,消息映射表?

消息映射表 MessageMap,MFC是基于消息映射表来进行的,父类中的虚函数全部删除,因为父类中的虚函数过多会造成空间浪费(每个类的虚函数都是会有虚函数映射表的)、效率低下(每个虚函数都需要在虚函数映射表中进行查找)等问题,因此可以创建一个数组来保存数组指针和对应的消息来动态地调用函数。

1.3 MFC的框架?

一个搭建好的窗口、CWinApp、CFrameWnd、CView、CDocument等。

1.4 创建一个MFC项目

1.选择文件夹,创建的项目名不要使用中文,因为项目名会被自动添加到各个类中;
2.点击下一步,选择 单文档、MFC标准,点击完成;
3.尝试运行,发现其就是一个已经被做好的窗口。

1.5 点击窗口的视图(View)区弹出一个 MessageBox

1.首先需要知道我们点击的是 View 窗口,因此我们需要给 View 窗口添加消息处理函数;
2.选择类视图,选中 View 类,右键->属性,在属性栏中点击 消息 ,选择要添加的消息处理函数,比如 WM_LBUTTONDOWN ,点击 OnLButtonDown,则可完成添加消息,完成的添加将自动添加消息映射表、类中的 afx_msg 函数以及函数的实现,因此只需要在函数中添加属于自己的想要完成的功能即可;
3.本次我们在该函数中添加一行语句: ::MessageBox(NULL, L"asdfadf", L"提示", MB_OK),即可完成点击窗口中间的空白区域弹出一个对话框的操作。

1.6 点击窗口的 非客户区 弹出一个 MessageBox

1.首先需要知道创建好一个MFC项目后,其设计好的窗口从上到下依次是:标题栏、菜单栏、工具栏、视图区、状态栏;
2.我们想在非客户区(理解一下非客户区,客户区指的是view视图区,因此除了中间View的区域基本都是非客户区)点击时弹出一个 MessageBox ,则我们需要在 Frame 类中添加消息处理函数;
3.首先我们想到的是添加一个与 1.5 相同的 OnLButtonDown 的消息处理函数,但是当添加完成后发现点击后没有弹出 MessageBox,我们在选择消息时发现了一个与 OnLButtonDown 消息函数十分类似的函数 OnNcLButtonDown 函数,其中的 Nc 所代表的含义是 No Client,意为非客户区,因此若我们想在标题栏点击时弹出 MessageBox,我们需要添加的消息处理函数是 WM_NCLBUTTONDOWN,添加完成,运行程序,我们发现程序运行成功。

1.7 在这里我们涉及到一个问题,当我们在添加语句时,需要在 MessageBox 前加上两个 : ,原因是加上两个冒号表示的该函数是 Windows API ,若不加,则是MFC的成员函数,还有一种叫做 AfxMessageBox 的,是MFC全局函数。

::MessageBox(0, L"asdfa", L"提示", MB_OK);				// windows API
this->MessageBox(0, L"asdfa", L"提示", MB_OK);			// MFC的成员函数
AfxMessageBox(0, L"asdfa", L"提示", MB_OK);				// MFC的全局函数

1.8 MFC消息分类

1.标准消息/系统消息:系统发送 WM_XXX ON_WM_XXX() // 消息映射表的宏
添加方法:类视图->右键属性->添加消息
2.命令消息:WM_COMMAND 由菜单,工具条,快捷键发送(当点击菜单、工具条,使用快捷键发送时需要发送 命令消息) ON_COMMAND
添加方法:命令按钮->右键添加事件处理->添加消息
3.控件/通知消息:控件发送
控件有自己的类(控件处理) 类视图属性添加
控件没有自己的类(通知父窗口处理)
控件资源右键添加事件处理,选择父窗口的类
4.自定义消息:用户发送 SendMessage PostMessage
消息映射表宏 ON_MESSAGE
处理函数,函数原型LRESULT OnUser(WPARAM wParam,LPARAM lParam)

其中上述四种命令,前三种已经封装好的,我们可以直接拿过来进行使用,而用户自定义消息我们需要自己进行创建

1.9 向菜单栏添加一个新的菜单选项

1.选择 资源视图 , Menu ,其中有 请在此处键入 ,在此处进行自定义菜单的完成;
2.此时不能点击新建的菜单,我们需要添加一个命令消息来进行点击新的菜单;
3.仍然在 资源视图 里进行操作,我们右键想要点击的菜单,选择 添加事件处理程序…,在弹出的对话框中左侧选择 COMMAND ,右侧选择 Frame ,因为我们要点击的是 Frame 窗口,因此需要对 Frame 进行添加;
4.我们添加一行语句:TRACE(“shibiibiabdibfiabdsif”),此时在我们点击新添加的菜单栏后将会在 vs 的输出窗口显示 shibiibiabdibfiabdsif 这行语句。

1.10 添加一个快捷键

1.选择 资源视图 , Accelerator ,即可进行快捷键的添加。

1.11 给添加的快捷键添加一个事件处理函数

1.在新创建的快捷键上右键,选择 添加事件处理程序…,左侧选择 COMMAND ,右侧选择 Frame ;
2.在新添加的快捷键处理函数中添加一行语句:this->MessageBox(L"akldsjfa")。

1.12 给工具条添加一个新的按钮

1.选择 资源视图 , ToolBar ,点击最后一个灰色的按钮,在其上绘制新的 工具条按钮即可;
2.工具条按钮没有向导来帮助进行事件处理函数的添加,因此需要自己进行编写;
3.首先在 Frame 里的 消息映射表 中添加 ON_COMMAND(ID,&CMainFrame::OnToolBarLast);其中的 ID 是新添加的工具条的ID,右键新添加的工具条按钮,选择属性即可获得其 ID;
4.其次完成 CMainFrame::OnToolBarLast 函数的编写,在 Frame 的头问件中声明 afx_msg void OnToolBarLast(); 其次在其 cpp 文件中实现该函数,这样就可以完成点击新添加的工具条按钮,弹出 MessageBox 的操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值