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. mybatis 之定义拦截器 控制台SQL的打印

    类型 先说明Mybatis中可以被拦截的类型具体有以下四种: 1.Executor:拦截执行器的方法.2.ParameterHandler:拦截参数的处理.3.ResultHandler:拦截结果集的 ...

  2. 万字长文详解 YOLOv1-v5 系列模型

    一,YOLOv1 Abstract 1. Introduction 2. Unified Detectron 2.1. Network Design 2.2 Training 2.4. Inferen ...

  3. libcamera 简介

    libcamera 简介 libcamera 是一个开源的多媒体库,用于在 Linux 操作系统上支持多种摄像头硬件的访问,libcamera 是一个用户空间库,可用于开发基于摄像头的应用程序,如相机 ...

  4. [OpenCV实战]45 基于OpenCV实现图像哈希算法

    目前有许多算法来衡量两幅图像的相似性,本文主要介绍在工程领域最常用的图像相似性算法评价算法:图像哈希算法(img hash).图像哈希算法通过获取图像的哈希值并比较两幅图像的哈希值的汉明距离来衡量两幅 ...

  5. idea的简单介绍

    上一篇博客中只是了解一下java文件是怎么编译的,但是一般来说大家都是使用编程软件来进行开发,我是使用IntelliJ IDEA进行开发的 官网下载IDEA(自行安装哈):地址:https://www ...

  6. 【原创】linux实时应用如何printf输出不影响实时性?

    版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100.如有错误,欢迎指正. @ 目录 1. 前言 2. linux终端输出 3. 常见的N ...

  7. 从0开始学习VUE3--01-Vue2与Vue3的不同点

    升级带来的性能提升总结 1.模板编译优化:节点达到一定个数,会自动优化 每次重新渲染,会调用createVnode创建虚拟节点,VUE3会做静态提升,静态节点进行提取,进行优化 2.事件 缓存事件,防 ...

  8. 【学习笔记】QT从入门到实战完整版(基础控件)(4)

    添加资源 将存有资源文件的文件夹放到工程目录中,如文件夹名称为 "Image",里面有 Luffy.png 文件. 在 Qt Creator 中右击工程选择[添加新文件]. 在弹出 ...

  9. python字符串表达式求值

    背景: 在开发的过程中涉及到动态的根据公式计算数值 技术上选择了python a= eval("1+2*(3+1)") print(a)

  10. ES字段类型

    1 String ELasticsearch 5.X之后的字段类型不再支持string,由text和keyword取代,不做说明. 2 text和keyword 2.1 简介 ElasticSearc ...