SDk :软件开发工具包

Api  :Windows操作系统提供给应用程序编程的接口,windows.h

窗口:窗口是屏幕上的一块矩形区域,是Windows应用程序与用户进行交互的接口,分为客户区与非客户区,窗口通过窗口句柄(HWND)来标识。

句柄:在windows程序中,有各种各样的资源(窗口、图标、光标、画刷等),系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号,即句柄。比如 图标句柄(HICON)、光标句柄(HCURSOR)、画刷句柄(HBRUSH)    HANCLE

消息:

消息队列:每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息

窗口触发事件,操作系统会将该事件封装成一个消息,放入消息队列,应用程序会从消息队列中读取消息,然后通过DispatclMessage() 分发给操作系统,操作系统会做一个窗口过程(类似于回调函数)

winMain函数:winmain是windows程序的入口点函数,与Dos程序的入口点函数main的作用相同,当winmain函数结束或返回时,windows应用程序结束。

Windows编程模型:一个完成的win32程序,程序的实现步骤为:①winmain函数的定义②创建一个窗口③进行消息循环④编写窗口过程函数

在win32程序中,学习windows.h 的原理

#include <Windows.h>  //底层实现窗口的文件

//6.处理消息(窗口过程)
LRESULT CALLBACK WindowProc(
HWND hwnd, //消息所属的窗口句柄
UINT uMsg, //具体的消息名称 WM_XXX 消息名
WPARAM wParam, //键盘附加消息
LPARAM lParam //鼠标附加消息
)
{
switch (uMsg)
{
case WM_CLOSE:
      //所有XXWindow为结尾的方法,都不会进入到消息队列中,而是直接执行
DestroyWindow(hwnd); //DestroyWindow 发送另一个消息 WM_DESROY
break;
case WM_DESTROY:
PostQuitMessage(0); //退出程序的函数 退出进程
break;
case WM_LBUTTONDOWN: //鼠标左键按下的消息
{
int xPos = LOWORD(lParam);
int yPos = HIWORD(lParam);
char buf[1024];
wsprintf(buf,TEXT("x = %d,y = %d"), xPos, yPos);
MessageBox(hwnd,buf,TEXT("鼠标左键按下"),MB_OK);
break;
}
case WM_KEYDOWN: //键盘
MessageBox(hwnd, TEXT("key"), TEXT("键盘按下"), MB_OK);
break;
case WM_PAINT: //绘图
{
PAINTSTRUCT ps; //绘图结构体
HDC 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.设计窗口
/*
设计窗口,首先要有一个窗口对象,WNDCLASS
*/
WNDCLASS wc;
wc.cbClsExtra = 0; //类的额外的内存
wc.cbWndExtra = 0; //窗口额外的内存
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景
wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标,如果第一个参数是NULL,代表使用系统提供的光标
wc.hIcon = LoadIcon(NULL, IDI_ERROR); //图标, 如果第一个参数是NULL,代表使用系统提供的ICON
wc.hInstance = hInstance; //应用程序实例句柄,传入WinMain中的形参即可
wc.lpszClassName = TEXT("WIN"); //指定窗口类名称
wc.lpszMenuName = NULL; //菜单名称
wc.style = 0; //显示风格 0代表默认风格
wc.lpfnWndProc = WindowProc; //回调函数 即窗口过程 //2.注册窗口类
RegisterClass(&wc); //3.创建窗口
/*
lpClassName 类名
lpWindowName 标题名
dwStyle WS_OVERLAPPEDWINDOW 风格
x 显示坐标 CW_USEDEFAULT 默认值
y
nWidth, 宽高
nHeight,
hWndParent, 父窗口
hMenu, 菜单 NULL
hInstance, 实例句柄 hInstance
lpParam 附加值 NULL
*/
HWND hwnd = CreateWindow(wc.lpszClassName,TEXT("WINDOWS"), 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 (1) {
/*
_Out_ LPMSG lpMsg, 消息 lpxxx代表指针
_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);
}
}

  

Windows.h 文件学习的更多相关文章

  1. 【学习】Windows PE文件学习(一:导出表)

    今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...

  2. 无法打开包括文件:“windows.h”: No such file or directory

      VS2012 出现如下错误: 无法打开包括文件:"windows.h": No such file or directory   解决办法,将 C:\Program Files ...

  3. Windows phone 8 学习笔记(2) 数据文件操作(转)

    Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...

  4. Windows phone 8 学习笔记(2) 数据文件操作

    原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...

  5. 【解决】 无法打开包括文件:“windows.h”: No such file or directory

    vs编译时错误: 无法打开包括文件:“windows.h”: No such file or directory 出现这种错误什么都不用配置(环境变量),最好办法是将VS安装在C盘,让开发工具自动包含 ...

  6. 未定义的标示符“RECT”,引入了windows.h头文件也没有用?

    我用的是win8的vs2012,RECT应该引入什么头文件?windows.h我第一个就引入了,去windows.h里面搜也搜不到RECT这个关键字,应该引入哪个头文件呢? 真是奇怪啊,是不是还需要什 ...

  7. 在windows下使用pip安装python包遇到缺失stdint.h文件的错误

    今天在windows上使用pip安装一个python包python-lzf时遇到如下的错误: fatal error C1083: Cannot open include file: 'stdint. ...

  8. 51单片机C语言学习笔记7:关于.c文件和.h文件

    1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 ...

  9. 利用windows.h头文件写一个简单的C语言倒计时

    今天写一个简单的倒计时函数 代码如下: #include<stdio.h> #include<windows.h> int main() { int i; printf(&qu ...

  10. windows.h头文件中改变光标位置的函数——SetConsoleCursorPosition

    COORD 具体为 typedef struct COORD{ short X; short Y; } COORD,*PCOORD;     可以用来记录坐标. #include <iostre ...

随机推荐

  1. docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES

    一.前言 在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elasticsea ...

  2. 【集成开发环境 (IDE)】Dev-Cpp下载与安装 [ 图文教程 ]

    版权声明 本文作者:main工作室 本文链接:https://www.cnblogs.com/main-studio/p/17037280.html 版权声明:本文为 博客园 博主「main工作室」的 ...

  3. GitHub + Hexo 搭建个人博客网站

    一.准备工作 1. GitHub + Hexo 的优势 Hexo 提供现成的模板和模块:github 的 pages 功能提供免费的服务器,零成本搭建属于自己的博客. 2. 需要了解的网站 githu ...

  4. 深入探究Java中的对象类型变量声明操作——在声明对象时,系统究竟做了什么?

    深入探究Java中的对象类型变量声明操作--在声明对象时,系统究竟做了什么? 摘要:本文主要对Java中的对象类型变量的声明的底层原理做了探究. 目录 深入探究Java中的对象类型变量声明操作--在声 ...

  5. Zabbix与乐维监控对比分析(八)——其他功能篇

    前面我们详细介绍了Zabbix与乐维监控的架构与性能.Agent管理.自动发现.权限管理.对象管理.告警管理.可视化.图形图表及网络功能方面的对比分析,接下来我们将对二者其他功能进行对比分析. 本篇是 ...

  6. Java基础学习笔记-类的静态属性和静态方法--待继续补充

    程序运行时的内存占用 代码区(code area) 存放代码 数据区(data area) 存放全局数据.静态数据 堆区(heap area) 存放动态申请的数据 栈区(stack area) 存放局 ...

  7. angular---路由传参后点击获取详情点开自动加载详情

  8. JS循环类数组对象,获得页面所有的某个ClssaName,处理它的属性

    举例:获得所有的某个ClssaName,处理它的第一个子元素中的title赋值给内容 let links = Array.from(document.getElementsByClassName('m ...

  9. djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令

    djiango框架推导过程,jinja2模板语法,jiango简介,基本操作命令 一.web框架前戏 web 框架可以理解为是基于会联网的web服务端>>>socket服务端 1.w ...

  10. c++代码实现中时间复杂度的不断优化

    先来介绍一下时间复杂度: 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 计算机科学中,算法的时间复杂度是一个函数,它定量描述了该 ...