MFC以C++形式封装了Windows API

//实践

编写MFC需要的头文件#include <afxwin.h>

程序执行流程:

1.实例化应用程序对象(有且只有一个)

2.执行程序入口函数 InitInstance

3.给框架类MyFrame对象动态分配空间(自动调用他的构造函数),在其构造函数内部,通过CWnd::Create 创建窗口

4.框架类对象显示窗口 CWnd::ShowWindow

5.框架类对象更新窗口 CWnd::UpdateWindow

6.保存框架类对象指针 CWinThread::m_pMainWnd

文件名:mfc.h

#include <afxwin.h>//mfc头文件

//应用程序类CWinApp,派生类
Class MyApp: public CWinApp{
public:
virtual BOOL InitInstance(); //基类的虚函数,派生类只是重写,MFC程序的入口地址
}; //框架类CFrameWnd ,派生类MyFrame
Class MyFrame: public CFrameWnd{
public:
MyFrame();//构造函数
DECLARE_MESSAGE_MAP()//消息映射宏,声明必须用在类声明中,即 .h 文件中
afx_msg void OnLButtonDown(UINT,CPoint)//鼠标声明,value
afx_msg void OnChar(UINT,UINT,UINT)//键盘声明
afx_msg void OnPaint()//绘画
};

文件名:mfc.cpp

#include "mfc.h"//对应类声明的头文件

MyApp app;//有且仅有一个全局的应用程序类对象

BOOL MyApp::InitInstance(){//程序入口地址
MyFrame *frame=new MyFrame;//1.创建框架类对象 frame->ShowWindow(SW_SHOWNORMAL);//2.显示窗口
frame->UpdateWindow();//3.更新窗口 m_pMainWnd=frame;//4.保存指向应用程序主窗口的指针,实现自动管理
return TRUE;//初始化正常则返回true
} //分界宏
BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)
ON_WM_LBUTTONDOWN()//鼠标左键按下 key
ON_WM_CHAR()//键盘按下
END_MESSAGE_MAP() MyFrame::MyFrame(){
Create(NULL,TEXT("mfc"));//创建窗口
} void MyFrame::OnLButtonDwon(UNIT,CPoint point){//鼠标按下
/*
TCHAR buf[1024];//TCHAR 是MFC中的字符数组
wsprintf(buf,TEXT("x=%d,y=%d"),point.x,point.y);//转译
MessageBox(buf);//区别于底层的MessageBox,MFC中实则是MessageBox method 在MSDN中可查
*/
//mfc中的字符串 CString
CString str;
str.Format(TEXT("x=%d,,,y=%d"),point.x,point.y);//格式化
MessageBox(str);
} void MyFrame::OnChar(UNIT key,UNIT,UNIT){//键盘按下
CString str;
str.Format(TEXT("按下了 %c 键"),key);
MessageBox(str);
} void MyFrame::OnPaint(){//绘画
CPaintDC dc(this);//this指定绘图设备
//帮助文档,在CDC里找其他能画的图形
dc.TextOutW(,,TEXT("为了部落"));
dc.Ellipse(,,,);//画椭圆,两点锁定矩形内切圆
}

帮助文档:《VC++之MFC类库中文手册》。最上面是层次结构;最下面是消息映射宏。

查找Create要搜索 :CFrameWnd::Create

ps:右键项目->属性->常规->MFC的使用->在共享DLL中使用MFC

//理论

  • 消息映射机制

即将消息和成员函数互相关联的表,MFC中没有事件和信号桥的概念,只有每个消息映射一个函数

ps:消息映射宏查找,在中文手册最下面。

声明宏:

DECLARE_MESSAGE_MAP()

分界宏:

BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd)

END_MESSAGE_MAP()

程序执行流程:

    • 声明宏 写到 .h 中
    • 分界宏 写到 .cpp 中
    • 找消息宏 写到 分界宏 中
    • 把函数原型声明 写到 .h 中
    • 函数实现 写到 .cpp 中
  • windows 字符集

MessageBox(TEXT(“aaa”));

TEXT 自适应编码转换(即,定义里可定制多字节和宽字节):

右键项目->属性->常规->字符集->使用多字节字符集/使用Unicode字符集

Ps:TCHAR 也有自适应编码转换

“aaa”   多字节:一个字符对应一个字节

L“aaa” 宽字节:一个字符对应多个字节 Unicode:UTF-8 3个;GBK 2个;

多字节转为宽字节:MessageBox(L “aaa”);

//统计字符串长度

int num=;

char *p="aaa";
num=strlen(p); wchar_t *p2="bbbb";
num=wcslen(p2);

//char* 与 CString 之间的转换

C++ string 与 MFC CString 不可直接转换,要通过 char * .c_str();

//char*->CString
char *p3="ccc";
CString str=CString(p3); //CString->char*
CStringA tmp=str;
char *pp=tmp.GetBuffer();

MFC/QT 学习笔记(二)——MFC入门的更多相关文章

  1. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  2. MFC/QT 学习笔记(四)——MFC基于对话框学习控件(上)

    新建项目->MFC模板->MFC应用程序->应用程序类型:基于对话框->...OK 解决方案资源管理器->资源文件->xxx.rc->进入:资源视图-> ...

  3. MFC/QT 学习笔记(三)——MFC模板创建

    新建项目->MFC模板->MFC应用程序->应用程序类型:单个文档:项目样式:MFC 标准->下一步...OK 此时点击运行,可直接弹出窗口. 调整 视图->类视图: · ...

  4. MFC/QT 学习笔记(一)——认识windows基础库

    MFC (微软基础类库),Windows系统平台做GUI尚且OK,但不支持跨平台. //Windows消息机制: //1.SDK与API Software Development Kit,为特定软件框 ...

  5. MFC/QT 学习笔记(四)——MFC基于对话框学习控件(下)

    //5.列表控件 ListControl 属性 报表模式 view:Report:添加变量 //Cdemo5Dlg.cpp ps:资源视图 右键 类向导 成员变量 查看对象所属类 // TODO: 在 ...

  6. 【Qt编程】Qt学习笔记<二>

    1.      QApplication类和QWidget类都包含在QtGui模块中.所以我们可以只包含这个头文件即可. 2.      在c++中,用new分配了内存空间就需要用delete来释放空 ...

  7. Mybatis学习笔记(二) —— mybatis入门程序

    一.mybatis下载 mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases 下载完后的目录结构: 二. ...

  8. netty权威指南学习笔记二——netty入门应用

    经过了前面的NIO基础知识准备,我们已经对NIO有了较大了解,现在就进入netty的实际应用中来看看吧.重点体会整个过程. 按照权威指南写程序的过程中,发现一些问题:当我们在定义handler继承Ch ...

  9. tensorflow学习笔记二:入门基础

    TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...

随机推荐

  1. n-tier waf 41 project 层真够多

    ps: http://waf.codeplex.com/releases/view/618696

  2. shell脚本快速配置yum源

    我们在使用Red Hat系列的Linux系统时经常要配置yum源,本文档提出一个快速配置yum源的方法,就是用shell脚本来实现. 我们在使用Red Hat系列的Linux系统时经常要配置yum源, ...

  3. SpringBoot中对SpringMVC的自动配置

    https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developin ...

  4. Jquery 替换全部字符

    item.replace('P','')   只会替换第一个'P'字符 item.replace(/P/gm,'') 替换全部'P'字符

  5. html块级元素的水平垂、直居中的方式

    说明 对于初学者来说,块级元素的剧中,也是一大难题,我学习的时候,也是一脸懵逼,每次遇到都要百度,但是写的多了也自然记住一些常用的剧中方式,但是还是很模糊,今天就来好好总结一些. 布局 布局即为简单, ...

  6. Docker 使用笔记-常用基础命令

    常用基础命令 环境:Linux Ubuntu 1.查看docker信息 docker version | docker info 2.启动docker服务 sudo systemctl start d ...

  7. Plant Simulation打包与分享

    作者:iJonas 本人原创,转载说明出处. 公众号:仿真社区Plant Simulation 关注知乎专栏:iJonas 目录 简介 使用方法 注意 1.简介 很多情况下,我们需要把模型发送给客户. ...

  8. 阿里云Redis性能测试结果(1个集合存300万数据,查询能几秒返回结果)

    现状: 1.买了一台主从的阿里云Redis,内存就1GB. 2.查询了阿里云的帮助,没有找到性能相关的说明, 有的也是4GB版本的并发性能 3.提工单问客服 一个集合里有300万数据,单次查询性能大概 ...

  9. MySql新版本安装配置

    版本:mysql-5.7.16-winx64 平台Windows 7 x64 1.进入mysql主目录(建议将其移到C或D盘的根目录,并改名为mysql) 2.配置path环境变量(如D:\JAVA\ ...

  10. uredis ------ 异步 redis 封装的访问库(c++),基于hiredis.

    详见 github : https://github.com/uniqss/uredis 底层使用hiredis库,使用libuv库. 只支持异步 支持分表分库,一般是用玩家的ID去取模,比如分库10 ...