mfc 学习的第一天

1 通过底层实现窗口
1.1 sdk api 句柄
1.2 消息处理机制
1.3 头文件 windows.h
1.4 程序入口 winMain

2 具体6个步骤
2.1 1、设计窗口 WNDCLASS wc
2.2 2、注册窗口 RegisterClass
2.3 3、创建窗口 createWindow
2.4 4、显示和更新 showWindhow updateWindow
2.5 5、通过循环取消息 MSG msg
2.5.1 写循环 while(1)
2.5.2 GetMessage==false 跳出循环
2.5.3 翻译消息
2.5.4 分发消息
2.6 6、窗口过程
2.6.1 LRESULT CALLBACK WindowProc
2.6.2 返回默认处理
2.6.3 return DefWindowProc(hwnd, uMsg, wParam, lParam);
2.6.4 点击叉子 WM_CLOSE destroy
2.6.5 WM_DESTROY postQuitMessage(0)
2.6.6 鼠标左键按下
2.6.7 键盘按下
2.6.8 绘图 文字

vs2013创建win32项目

步骤:文件→新建→项目→选择Win32项目,确定→下一步→勾上空项目,完成→源文件右键→添加→新建项→C++文件→名称为:windows.c→添加

小技巧:

安装番茄助手,提高编程效率。

注释/取消注释
1)注释:组合键“Ctrl+K+C”;
2)取消注释:组合键“Ctrl+K+U”

windows.c的源码

#include <Windows.h> //底层实现窗口  的头文件
#include <windowsx.h>  //6、处理窗口过程//CALLBACK 代表__stdcall参数的传递顺序:从右到左 一次入栈,并且在函数返回前 清空堆栈
LRESULT CALLBACK WindowProc(HWND   hwnd,   //消息所属的窗口句柄UINT   uMsg,   //具体的消息名称  WM_XXXX 消息名WPARAM wParam, //键盘附加消息LPARAM lParam  //鼠标附加消息)
{POINT pt; //定义坐标PAINTSTRUCT ps; //定义绘图结构体HDC   hdc; //定义设备上下文句柄 switch (uMsg){case WM_CLOSE://所以xxxWindow为结尾的方法,都不会进入到消息队列中,而是直接执行DestroyWindow(hwnd); //DestroyWindow  发送另一个消息 WM_DESTROYbreak;case WM_DESTROY:PostQuitMessage(0);  //真正的退出窗口 使 GetMessage(&msg,NULL,0,0) == FALSEcase  WM_LBUTTONDOWN:  //鼠标左键按下pt.x = GET_X_LPARAM(lParam);  //GET_X_LPARAM 方法 需要加windowsx.h 头文件pt.y = GET_Y_LPARAM(lParam);wchar_t buf[1024];wsprintf(buf, TEXT("x = %d,y = %d"), pt.x, pt.y);MessageBox(hwnd, buf, TEXT("鼠标的左键按下"), MB_OK);break; case WM_KEYDOWN:  //键盘MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);break;case WM_PAINT: //绘图//绘图结构体hdc = BeginPaint(hwnd, &ps);TextOut(hdc, 100, 100, TEXT("hello"), strlen("hello"));EndPaint(hwnd, &ps);break;default:break;}//返回值用默认处理方式return DefWindowProc(hwnd, uMsg, wParam, lParam);
}//程序入口函数//WINAPI 代表__stdcall参数的传递顺序:从右到左 一次入栈,并且在函数返回前 清空堆栈int WINAPI WinMain(HINSTANCE hInstance,  //应用程序实例句柄HINSTANCE hPrevInstance,  //上一个应用程序句柄,在win32环境下,参数一般为NULL,不起作用了LPSTR lpCmdLine,   // char * argv[]int nShowCmd)    //显示命令  窗口 最大化、最小化、正常
{//1、设计窗口//2、注册窗口//3、创建窗口//4、显示和更新//5、通过循环取消息 //6、处理消息(窗口过程)//1、设计窗口WNDCLASS wc;wc.cbClsExtra = 0; //类的额外的内存wc.cbWndExtra = 0; //窗口额外的内存wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景wc.hCursor = LoadCursorW(NULL,  IDC_HAND);  //设置光标 如果第一个参数为NULL,代表使用系统提供的光标wc.hIcon = LoadIconW(NULL, IDI_ERROR); //图标 如果第一个参数为NULL,代表使用系统提供的图标wc.hInstance = hInstance; //应用程序实例句柄  传入WinMain中的形参即可wc.lpfnWndProc = WindowProc; //回调函数  窗口过程wc.lpszClassName = TEXT("WIN"); //指定窗口类名称wc.lpszMenuName = NULL; //菜单名称wc.style = 0; //显示风格 0代表默认风格//2、注册窗口类RegisterClass(&wc);//3、创建窗口/*lpClassName,  类名lpWindowName, 标题名dwStyle,   WS_OVERLAPPEDWINDOW 风格x,  显示坐标  CW_USEDEFAULT 使用默认值y,nWidth,  宽高nHeight, hWndParent,   父窗口 NULLhMenu,   菜单 NULLhInstance,  实例句柄 hInstancelpParam  附加值  鼠标附加值 NULL*/HWND hwnd =  CreateWindow(wc.lpszClassName,wc.lpszMenuName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);//4、显示和更新ShowWindow(hwnd,SW_SHOWNORMAL);UpdateWindow(hwnd);//5、通过循环取消息/*HWND        hwnd;  主窗口句柄UINT        message;  具体的消息名称WPARAM      wParam;   附加消息  键盘消息LPARAM      lParam;   附件消息  鼠标消息 左右键DWORD       time;  消息产生时间POINT       pt;    附加消息  鼠标消息 x y*/MSG msg;while (GetMessage(&msg,NULL,0,0)){/*_Out_ LPMSG lpMsg,  消息_In_opt_ HWND hWnd,  捕获窗口  NULL代表捕获所有窗口_In_ UINT wMsgFilterMin,  最小和最大的过滤的消息 一般填入0_In_ UINT wMsgFilterMax   填0代表捕获所有的消息*///if (GetMessage(&msg,NULL,0,0) == FALSE)//{// break;//}//翻译消息TranslateMessage(&msg); //不为false 则分发消息DispatchMessage(&msg);}//6、处理窗口过程return 0;
}

mfc 学习的第一天相关推荐

  1. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结

    MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结 1.MFC单文档程序运行流程 1.首先利用全局变量对象 theApp 启动应用程序 (这是因为这个全局对象,基类CWinApp中 this ...

  2. C++ MFC 学习笔记+小型通讯录系统实现

    MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C++ & MFC]https://www.c ...

  3. 九阳道人的MFC学习之旅

    九阳道人的MFC学习之旅 好记性不如烂笔头,MFC用过很多遍了,每次用完后就很久不去碰,之后就忘了怎么用MFC,现在特此记录. 文章目录 九阳道人的MFC学习之旅 1.修改程序版本信息 2.截获和处理 ...

  4. python学习之第一课时--初始python

    python学习之第一课时--初始python Python前世今世 python是什么 python是一门多种用途的编程语言,时常在扮演脚本语言的角色 python流行原因 软件质量 提高开发者效率 ...

  5. RabbitMQ学习总结 第一篇:理论篇

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  6. 新手零基础学习Python第一步,搭建开发环境!

    如何在电脑上面搭建Python开发环境?本文会解答这个问题. Python是一门计算机编程语言,通过给计算机下达精确的指令以完成相应的任务或者事情. 人类掌握Python后,就可以利用这个工具告诉计算 ...

  7. 深度学习笔记第一门课第一周:深度学习引言

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  8. PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建

    PHP学习记录第一篇:Ubuntu14.04下LAMP环境的搭建 最近一段时间会学习一下PHP全栈开发,将会写一系列的文章来总结学习的过程,以自勉. 第一篇记录一下LAMP环境的安装 0. 安装Apa ...

  9. 《Go语言圣经》学习笔记 第一章 Go语言入门

    Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...

最新文章

  1. excel中日期设置星期
  2. [Grid Layout] Specify a grid gutter size with grid-gap
  3. 基于物化视图优化_「PostgreSQL技巧」PostgreSQL中的物化视图与汇总表比较
  4. JAVA——Windows双击jar包为可执行操作
  5. django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用...
  6. 二分法查找(Java)
  7. 关于 webapi ajax进度条信息设置
  8. Too many files with unapproved license: 2 See RAT report
  9. Java基础学习总结(164)——别让Lombok使你的Java代码处于“亚健康”状态
  10. Hbase笔记:批量导入
  11. ENVI Flaash大气校正与6S大气校正(Landsat8OLI)
  12. 微信跳转,wap浏览器跳转到微信
  13. RS485串口Modbus设备联网解决方案
  14. EXCEL学生成绩里计算年级名次、班级名次
  15. 用python简易编写创建窗口
  16. catkin_make编译时fatal error: ###_msgs/***.h: 没有那个文件或目录
  17. 家用双wan口路由器推荐_什么路由器有两个以太口 家用双wan口路由器推荐
  18. Python虽然很火,为啥找工作这么难
  19. 创想3d打印机切片软件Creality Slicer/Cura如何添加模糊皮肤打印选项
  20. 为什么我的C语言移位操作达不到效果??

热门文章

  1. No package nginx available.
  2. mysql 使用service mysqld start 提示未识别服务 进入/etc/rc.d/init.d 下面未发现有mysqld解决方法
  3. Git钩子脚本可以和存储库一起管理吗?
  4. Java为什么不允许覆盖静态方法?
  5. win11能否安装cad Windows11安装cad的解决方法
  6. window.open打开页面并传值,window. location.search遍历获取到的请求链接中的所有参数
  7. pdf模板工具JaspersoftStudio,JasperReport
  8. STM32:ST-LINK下载弹出no target connect
  9. android+创意方案,有创意≠购买欲 - 10款失败的 Android 创意产品
  10. java 格式化 浮点数_DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等...