学习过很多语言以及环境,对于Java、C++、Qt等都很容易理解,并且能很快上手做项目,唯独对MFC一直浑浑噩噩,不太清楚,参与项目总是独立负责一块,与业务逻辑更相关,用std库的机会多,与GUI、Doc/View打交道的时间少,没有对其进行系统地学习。现在独立完成项目,各方面都要清楚,尤其觉得MFC是自己的一个短板,更觉得有系统一学的必要。

一、用MFC创建窗口

MFC的目的是减轻程序员的工作量,让程序员专注于程序的逻辑而非一堆离散的SDK函数,其主要作用是将绝大部分常用的函数包装好,提供一个完整的框架。在MFC中,有两个类最为重要,一个是CWinApp,另一个是CFrameWnd ,前者负责实现应用级别的功能,后则实现GUI相关的功能。

MFC中的所有类都继承与CCmdTarget,CCmdTarget类都具有处理消息映射中的消息的能力(即能处理windows消息)。在CWinApp中,一个重要的重载函数是InitInstance,它负责窗口的创建;它还有一个重要的数据成员m_pMainWnd,它是指向窗口的指针。

以下我们用CWinApp和CFrameWnd两个类构建一个window是程序,(新建一个Win32空项目,添加如下代码的文件)其代码如下所示:

#include <afxwin.h>class MFC_Tutorial_Window: public CFrameWnd
{
public:MFC_Tutorial_Window(){Create(NULL, "MFC Tutorial");}
};class MyApp: public CWinApp
{MFC_Tutorial_Window *wnd;
public:BOOL InitInstance(){wnd = new MFC_Tutorial_Window();m_pMainWnd = wnd;m_pMainWnd->ShowWindow(1);return 1;}
};MyApp theApp;

然后选择project->setting->General->using MFC in a shared dll

二、消息映射

继承自CCmdTarget的类均具有处理windows消息的能力,MFC提供了一中消息映射的机制,即每个集成自CCmdTarget的类均可声明自己处理的消息,下面通过简单的实例说明MFC中消息映射的实现方式。

#include <afxwin.h>class MFC_Tutorial_Window :public CFrameWnd
{
public:MFC_Tutorial_Window(){Create(NULL,"MFC Tutorial Part 2 CoderSource Window");}void OnLButtonDown(UINT nFlags, CPoint point);DECLARE_MESSAGE_MAP()   // 说明MFC_Tutorial_Window会处理相关window是消息
};BEGIN_MESSAGE_MAP( MFC_Tutorial_Window, CFrameWnd)  // 定义MFC_Tutorial_Window中的消息映射,MFC_Tutorial_Window是CFrameWnd的子类,声明事件处理链ON_WM_LBUTTONDOWN() //Macro to map the left button click to the handler // 如果在此声明的消息在MFC_Tutorial_Window中没有提供消息处理函数,则在CFrameWnd中寻找
END_MESSAGE_MAP()void MFC_Tutorial_Window::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call defaultCFrameWnd::OnLButtonDown(nFlags, point);MessageBox("Left Button clicked");
}class MyApp :public CWinApp
{MFC_Tutorial_Window *wnd;?
public:BOOL InitInstance(){wnd = new MFC_Tutorial_Window();m_pMainWnd = wnd;m_pMainWnd->ShowWindow(1);return 1;}
};MyApp theApp;

转载于:https://www.cnblogs.com/YukiJohnson/archive/2013/01/05/2846765.html

MFC初步教程(一)相关推荐

  1. MFC初步教程(三):菜单

    菜单是MFC编程中非常重要的一种资源,在MFC中添加菜单有两种方式,一种是以资源的形式静态添加,另一种是动态添加,本文简洁说明第一种形式 ,其步骤如下(从SDK的角度看各种类之间的联系,更容易理解MF ...

  2. MFC初步教程(二)

    绘制简单的图形几乎是所有的VC教程中的必须内容,这里面涉及到几个概念,设备(device context),画刷(Pen)等.CDC是所有设备的父类,其子类包括CClientDC(仅在客户区绘制), ...

  3. DirectSound初步教程

    转自编程中国 DirectSound初步教程 2010-04-24 20:00 Directsound中常用的几个对象 对象 数量 作用 主要接口 设备对象 每个应用程序只有一个设备对象 用来管理设备 ...

  4. mfc基础教程(学习笔记)

    目录 mfc基础教程 第一章:CDC的使用 第二章:文本编程 第三章:菜单 第四章:对话框 第五章:对话框(二) 第六章:样式 第七章:创建兼容DC 第八章:图形的保存与重绘 第九章:文件 第十章:文 ...

  5. Scintilla MFC使用教程

    Scintilla MFC使用教程 修复了按 Ctrl+S 会出现 "IDC"字符的BUG 增加了自定义消息 VK_ADD_HISTR: #define SET_EDITHIGHL ...

  6. Visual C++/MFC入门教程

    Visual C++/MFC入门教程 VC开发指南 1.1 如何学好VC 这个问题很多朋友都问过我,当然流汗是必须的,但同时如果按照某种思路进行有计划的学习就会起到更好的效果.万事开头难,为了帮助朋友 ...

  7. Visual C++ MFC 简明教程

    原著:Marshall Brain 编译:张圣华 第一部分:MFC导论 Visual C++ 不仅仅是一个编译器.它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的 C++ 来开发出专 ...

  8. 黑马mfc案例教程_黑马指标使用吞吐量的案例

    黑马mfc案例教程 I've not come across many teams that use, let alone know that much about throughput. For t ...

  9. vs2013我建了两个对话框 选择主对话框_VS/MFC编程教程:如何创建对话框模板和修改对话框属性...

    创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件:第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等.在本节中先 ...

最新文章

  1. 浅析机器学习中的自由度
  2. 由一行文本输入框引发的思考
  3. 远程研发能有多高效?手淘新版本上线只用了5天!
  4. PAT(乙级) 1001 害死人不偿命的(3n+1)猜想 C++
  5. webservice引用spring的bean
  6. 成功最快的就是改变你这个思维,拥有这个全新的思维
  7. 寒假作业3:抓老鼠啊~亏了还是赚了?
  8. bitcoin 源码解析 - 交易 Transaction(三) - Script
  9. 方正真GBK(字体名称中有GBK且字数达到21003)字体列表
  10. 小甲鱼c语言_Tip:一起做一个平平无奇的程序小天才吧
  11. ThreeJS 实现等值线效果
  12. 清除此计算机中wps云盘,Win10专业版系统怎么把电脑上的WPS网盘彻底删掉?
  13. godis之aof持久化
  14. 一年节省费用100万,AI导航误差不到1米,杭州奥体“大小莲花”智慧场馆大揭秘...
  15. 苹果LIVE PHOTOS实况照片转普通静态照片jpg
  16. “燕云十六将”之Lion李哲
  17. C# 唯品会JITJITX对接
  18. 安全面试之安全基础(一)
  19. 盘点10大知名餐饮设计公司,提供排名参考
  20. 10、记录使用科大讯飞的语音唤醒硬件生成PCM文件,通过ffmpeg库去生成MP3音频文件

热门文章

  1. Oracle中开启并行和相关查询
  2. html浏览器兼容测试工具,13个不同浏览器兼容性测试的免费软件工具
  3. 串口通信工具android,Android串口通信工具
  4. 揭秘网络:互联网调查入门 出版发行时间_cqy、cdx、zqsg……啥意思?揭秘QQ上的“00后黑话”...
  5. @Scheduled定时任务不生效的原因
  6. LinkedHashMap和HashMap的比较使用
  7. RabbitMQ消费消息方法basicConsume
  8. Android开发笔记(八十三)多语言支持
  9. eclipse反编译插件Jadclipse介绍
  10. vue .prop修饰符