MFC/QT 学习笔记(一)——认识windows基础库
MFC (微软基础类库),Windows系统平台做GUI尚且OK,但不支持跨平台。
//Windows消息机制:
//1.SDK与API
Software Development Kit,为特定软件框架,硬件平台,操作系统等建立应用软件的开发工具的集合;
Application Programming Interface,操作系统提供给应用程序编程的接口;
//2.窗口和句柄
窗口,一个Windows程序至少有一个主窗口;
句柄,在Windows应用程序中,窗口是通过窗口句柄(HWND)来标识的。我们要对某个窗口进行操作,首先要得到这个窗口的句柄;
//ps:系统在创建各种资源(窗口,图标...)会为他们分配内存,并返回标识这些资源的标识号,即句柄。eg:图标句柄(HICON),光标句柄(HCURSOR),画刷句柄(HBRUSH)
//3.消息与消息队列
Windows是一种事件驱动方式的程序设计模式,主要是基于消息。

//4.WinMain 函数——Windows程序的入口函数,相当于DOS程序的main
一个完整的Win32程序实现步骤:
·WinMain函数的定义
·创建一个窗口
·进行消息循环
·编写窗口过程
//环境:VS2013,实测:VS2017,TranslateMessage函数未找到。
#include <windows.h>//底层实现窗口的头文件 //回调函数
//CALLBACK 代表参数_stdcall参数的传递顺序:从右到左入栈,函数返回前清空栈
LRESULT CALLBACK WindowProc(
HWND hwnd,//消息所属窗口句柄
UINT uNsg,//具体消息名称 WM_XXX格式
WPARAM wParam,//键盘附加消息
LPARAM lParam) {//鼠标附加消息 switch (uNsg) { //所有以xxxWindow结尾的方法,不进入消息队列,直接执行
case WM_CLOSE:
DestroyWindow(hwnd);//DestroyWindow 发送另一个消息WM_DESTROY
break;
case WM_DESTROY:
PostQuitMessage();//调用while循环中的break
break; case WM_LBUTTONDOWN://鼠标左键按下
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam); char buf[];//显示在窗口内
wsprintf(buf, TEXT("x=%d,y=%d"), xPos, yPos);//实现字符拼接
MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
break;
} case WM_KEYDOWN://键盘按下
MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);
break; case WM_PAINT://绘图
{
PAINTSTRUCT ps;//绘图结构体
HDC hdc = BeginPaint(hwnd, &ps);//开始
TextOut(hdc, , , TEXT("HELLO"), strlen("HELLO"));
EndPaint(hwnd, &ps);//结束
break;
}
} return DefWindowProc(hwnd, uNsg, wParam, lParam);
} //程序入口函数
//WINAPI 代表参数_stdcall参数的传递顺序:从右到左入栈,函数返回前清空栈
int WINAPI WinMain(
_In_ HINSTANCE hInstance, //应用程序实例句柄
_In_opt_ HINSTANCE hPrevInstance,//上一个应用程序句柄,一般为NULL
_In_ LPSTR lpCmdLine, //char* argv[]
_In_ int nShowCmd) { //显示命令,最大/小化 //1.设计窗口
WNDCLASS wc; wc.cbClsExtra = ; //类的额外内存
wc.cbWndExtra = ; //窗口的额外内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景色
wc.hCursor = LoadCursor(NULL, IDC_HAND);//设置光标手,null默认风格
wc.hIcon = LoadIcon(NULL, IDI_ERROR);//设置图标,null同上
wc.hInstance = hInstance;//传入WinMain中的形参
wc.lpfnWndProc = WindowProc;//回调函数,窗口过程
wc.lpszClassName = TEXT("WIN");//指定窗口类名称
wc.lpszMenuName = NULL;//菜单名称
wc.style = ;//默认风格 //2.注册窗口
RegisterClass(&wc); //3.创建窗口
HWND hwnd = CreateWindow(
wc.lpszClassName,//lpClassName 类名
TEXT("Windows"),//lpWindowName 标题名
WS_OVERLAPPEDWINDOW,//dwStyle 默认风格 混合模式
CW_USEDEFAULT,// x坐标
CW_USEDEFAULT,// y
CW_USEDEFAULT,//nWidth宽高
CW_USEDEFAULT,//nHeight
NULL,// hWndParent 父窗口
NULL,//hMenu 菜单
hInstance,// hInstance 实例句柄
NULL);//lpParam 附加值 鼠标左右键 //4.显示和更新
ShowWindow(hwnd, SW_SHOWNORMAL);//正常大小 UpdateWindow(hwnd); //5.通过循环取消息
/*
*typedef struct tagMSG {
* HWND hwnd; //主窗口句柄
* UINT message; //具体消息名称
* WPARAM wParam; //键盘消息 附加消息
* LPARAM lParam; //鼠标消息 附加消息
* DWORD time; //消息产生时间,系统自算
* POINT pt; //鼠标位置
*}
**/
MSG msg; while () {
/*
GetMessageW(
_Out_ LPMSG lpMsg, 消息
_In_opt_ HWND hWnd, 捕获窗口,NULL代表捕获所有窗口
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax);(0,0)代表捕获所有消息
*/
if (GetMessage(&msg, NULL, , ) == FALSE) {
break;
} //翻译消息 eg:键入Ctrl+C不可直接打印,需译后再次进入消息队列
TranslateMessage(&msg); DispatchMessage(&msg);//分发消息 } //6.处理窗口过程 up return ; }
我参考的视频链接:
https://www.bilibili.com/video/av20005978/?p=8&t=328
MFC/QT 学习笔记(一)——认识windows基础库的更多相关文章
- MFC/QT 学习笔记(二)——MFC入门
MFC以C++形式封装了Windows API //实践 编写MFC需要的头文件#include <afxwin.h> 程序执行流程: 实例化应用程序对象(有且只有一个) 执行程序入口函数 ...
- MFC/QT 学习笔记(四)——MFC基于对话框学习控件(上)
新建项目->MFC模板->MFC应用程序->应用程序类型:基于对话框->...OK 解决方案资源管理器->资源文件->xxx.rc->进入:资源视图-> ...
- MFC/QT 学习笔记(三)——MFC模板创建
新建项目->MFC模板->MFC应用程序->应用程序类型:单个文档:项目样式:MFC 标准->下一步...OK 此时点击运行,可直接弹出窗口. 调整 视图->类视图: · ...
- MFC/QT 学习笔记(四)——MFC基于对话框学习控件(下)
//5.列表控件 ListControl 属性 报表模式 view:Report:添加变量 //Cdemo5Dlg.cpp ps:资源视图 右键 类向导 成员变量 查看对象所属类 // TODO: 在 ...
- qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...
- Linux 学习笔记之超详细基础linux命令 Part 14
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 13---------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 9
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 8----------------- ...
- Linux 学习笔记之超详细基础linux命令 Part 7
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 6----------------- ...
- Linux 学习笔记之超详细基础linux命令(the end)
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 14---------------- ...
随机推荐
- 龙芯 3A4000 Fedora28 安装笔记
版权声明:原创文章,未经博主允许不得转载 3A4000用起来性能显然已经非常优秀,和朋友手上的3A3000相比有很大的提升(果然网上水分超多的什么测评看看呵呵就好).从零开始却用一半的核数和更低的制程 ...
- [ Python入门教程 ] Python中日期时间datetime模块使用实例
Python中datetime模块提供强大易用的日期处理功能,用于记录程序操作或修改时间.时间计算.日志时间显示等功能.datatime模块重新封装了time模块,提供的类包括date.time.da ...
- 深入Node.js的进程与子进程:从文档到实践
欢迎关注Github仓库,这是一个自2018年起持续更新的前端&算法开源博客.目前已有node学习.js面试笔记.css3动画设计.webpack4系列教程.设计模式.剑指offer·js版等 ...
- [校内训练20_01_20]ABC
1.问有多少个大小为N的无标号无根树,直径恰好为L.$N,L \leq 200$ 2.问一个竞赛图中有多少个长度为3.4.5的环.$N \leq 2000$ 3.给出一些直线和单个点A,问这些直线的交 ...
- go--->beego框架安装
beego 安装 1.新建gopath 工程目录 2.在新建的工程目录中执行go get github.com/astaxie/beego 命令 3.再执行go get github.com/beeg ...
- 拓扑排序(基于dfs+基于队列)
经典问题-Ordering Tasks dfs函数的返回值表示是否成环,若存在有向环,则不存在拓扑排序.不包含有向环的有向图称为有向无环图(DAG) 可以借助DFS完成拓扑排序,在访问完一个结点时把他 ...
- Shell常用命令之主机检测(ping)
主机检测命令ping 向网络主机发送ICMP回传请求 常用选项 -A:洪水攻击选项,启用此功能能在短时间之内发送大量的ping包 -b:开启ping网桥模式,默认不允许ping网桥 -c:设置发送多少 ...
- 一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan
一个支持高网络吞吐量.基于机器性能评分的TCP负载均衡器gobalan 作者最近用golang实现了一个TCP负载均衡器,灵感来自grpc.几个主要的特性就是: 支持高网络吞吐量 实现了基于机器性能评 ...
- 五、Shell运算
整数值运算 使用expr命令:只能做整数运算,默认返回计算结果 格式: expr 整数1 运算符 整数2 ... 整数值可以有变量提供,直接给出运算结果 + 加法 expr 43 + 21 .expr ...
- python学习--curl
PyCurl是一个C语言写的libcurl的python绑定库.libcurl 是一个自由的,并且容易使用的用在客户端的 URL 传输库.它的功能很强大,PycURL 是一个非常快速(参考多并发操作) ...