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], ...
随机推荐
- 尼姆博弈+SG函数
博弈这个东西真的很费脑诶.. 尼姆博奕(Nim Game):游戏者轮流从一堆棋子(或者任何道具)中取走一个或者多个,最后不能再取的就是输家.当指定相应数量时,一堆这样的棋子称作一个尼姆堆 当n堆棋子的 ...
- 缓存 ehcache
只是用于自己记录,防止日后忘记,回看所用 第一步:配置ehcahe 缓存 <?xml version="1.0" encoding="UTF-8"?> ...
- SpringCloud与微服务Ⅹ --- SpringCloud Config分布式配置中心
一.SpringCloud Config是什么 分布式系统面临的问题 --- 配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个 ...
- vue报错Error in v-on handler: "RangeError: Maximum call stack size exceeded"
看下面的报错 错误 看到这个错误一脸懵逼.后面了解到,是因为程序进入了死循环,后面检查了我的代码,原来在这里自己调用自己
- html块级元素的水平垂、直居中的方式
说明 对于初学者来说,块级元素的剧中,也是一大难题,我学习的时候,也是一脸懵逼,每次遇到都要百度,但是写的多了也自然记住一些常用的剧中方式,但是还是很模糊,今天就来好好总结一些. 布局 布局即为简单, ...
- SQL Server 2012 安装完成后,无法通过 sa账号登录
1.打开 SQL server configuration manager 2.打开 SQLserver 网络配置 打开 SQLSERVER的协议 3.右击 TCP/IP协议,选择 IPALL ,在 ...
- python笔记22(面向对象课程四)
今日内容 讲作业 栈 顺序查找 可迭代对象 约束 + 异常 反射 内容详细 1.作业 1.1 代码从上到下执行 print('你好') def func(): pass func() class Fo ...
- php 页面分页样式 示例
<?php class SubPages { private $each_disNums; //每页显示的条目数 private $nums; //总条目数 private $current_p ...
- 基于python的密码字典生成器
最近在网上看到一些作品,然后对其进行了一些完善.只是用于学习,不要去干坏事哦.程序来源于网络,我只是做了一些优化. #!/usr/bin/python# -*- coding:utf-8 -*-# @ ...
- oneweb and starlink
2019.7.16,一网在首尔开展在轨测试,最高速度400Mbps,延时32ms:地面终端由韩国Intellian生产. https://www.oneweb.world/media-center/o ...