MFC/QT 学习笔记(二)——MFC入门
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入门的更多相关文章
- tensorflow学习笔记二:入门基础 好教程 可用
http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础 TensorFlow用张量这种数据结构来表示所有的数据.用一 ...
- MFC/QT 学习笔记(四)——MFC基于对话框学习控件(上)
新建项目->MFC模板->MFC应用程序->应用程序类型:基于对话框->...OK 解决方案资源管理器->资源文件->xxx.rc->进入:资源视图-> ...
- MFC/QT 学习笔记(三)——MFC模板创建
新建项目->MFC模板->MFC应用程序->应用程序类型:单个文档:项目样式:MFC 标准->下一步...OK 此时点击运行,可直接弹出窗口. 调整 视图->类视图: · ...
- MFC/QT 学习笔记(一)——认识windows基础库
MFC (微软基础类库),Windows系统平台做GUI尚且OK,但不支持跨平台. //Windows消息机制: //1.SDK与API Software Development Kit,为特定软件框 ...
- MFC/QT 学习笔记(四)——MFC基于对话框学习控件(下)
//5.列表控件 ListControl 属性 报表模式 view:Report:添加变量 //Cdemo5Dlg.cpp ps:资源视图 右键 类向导 成员变量 查看对象所属类 // TODO: 在 ...
- 【Qt编程】Qt学习笔记<二>
1. QApplication类和QWidget类都包含在QtGui模块中.所以我们可以只包含这个头文件即可. 2. 在c++中,用new分配了内存空间就需要用delete来释放空 ...
- Mybatis学习笔记(二) —— mybatis入门程序
一.mybatis下载 mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases 下载完后的目录结构: 二. ...
- netty权威指南学习笔记二——netty入门应用
经过了前面的NIO基础知识准备,我们已经对NIO有了较大了解,现在就进入netty的实际应用中来看看吧.重点体会整个过程. 按照权威指南写程序的过程中,发现一些问题:当我们在定义handler继承Ch ...
- tensorflow学习笔记二:入门基础
TensorFlow用张量这种数据结构来表示所有的数据.用一阶张量来表示向量,如:v = [1.2, 2.3, 3.5] ,如二阶张量表示矩阵,如:m = [[1, 2, 3], [4, 5, 6], ...
随机推荐
- 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.
- .net core之编辑json配置文件
.net core之编辑json配置文件 引言 最近在具体项目开发应用中,项目采用的json格式配置文件,配置文件的加载采用的IConfiguration接口对象进行的管理,这是.net standa ...
- 机器学习-TensorFlow应用之classification和ROC curve
概述 前面几节讲的是linear regression的内容,这里咱们再讲一个非常常用的一种模型那就是classification,classification顾名思义就是分类的意思,在实际的情况是非 ...
- Centos 7搭建Nginx负载均衡,最简单。
1.安装Nginx 1.1.下载Nginx安装包 Nginx 官网(https://nginx.org) 本次选择的是nginx-1.6.3.tar.gz版本,安装环境是centos7. 然后把下载好 ...
- Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法
下载解压mysql文件之后,中间出现了一些问题,终于解决,希望能帮助到需要的朋友. mysql官网下载地址:https://dev.mysql.com/downloads/mysql/点击打开链接 以 ...
- 3d动态文字的绘制
在这里介绍一种3D文字的一种动态效果,可以说这是一种伪3D创建的一种3D的视觉效果 简单的讲解一下:大家或多或少都会听说过素描这种绘画手法,其实这种手法就是巧妙的利用了.阴影给人们带来的立体的视觉冲击 ...
- CGI fastCgi php-fpm PHP-CGI 辨析
CGI fastCgi php-fpm PHP-CGI 辨析 LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求.而php需要php-fpm这个组件提供该功能 ...
- MySQL 锁的小结
摘自:https://www.cnblogs.com/protected/p/6526857.html 关于数据库的各种锁的总结: 1.共享锁(又称读锁).排它锁(又称写锁): InnoDB引擎的锁机 ...
- windows7_下Eclipse中部署tomcat7.0进行JSP+servlet开发
环境:windows 7+EclipseJava EE IDE for Web Developers +tomcat 7.02 插件:tomcatPluginV321.zip(百度搜索下载即可) 一. ...
- 《Android Studio实战 快速、高效地构建Android应用》--Android Studio操作
前言 摩尔定律:CPU的处理能力大约18个月翻一倍 Android&Java:想要在Android Studio中开发Android App,必须以充分了解Java为前提(Java流行的原因: ...