Windows.h 文件学习
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 文件学习的更多相关文章
- 【学习】Windows PE文件学习(一:导出表)
今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见 ...
- 无法打开包括文件:“windows.h”: No such file or directory
VS2012 出现如下错误: 无法打开包括文件:"windows.h": No such file or directory 解决办法,将 C:\Program Files ...
- Windows phone 8 学习笔记(2) 数据文件操作(转)
Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方.本节主要讲解它们的用法以及相关限制性.另外包括本地数据库的使用方式 ...
- Windows phone 8 学习笔记(2) 数据文件操作
原文:Windows phone 8 学习笔记(2) 数据文件操作 Windows phone 8 应用用于数据文件存储访问的位置仅仅限于安装文件夹.本地文件夹(独立存储空间).媒体库和SD卡四个地方 ...
- 【解决】 无法打开包括文件:“windows.h”: No such file or directory
vs编译时错误: 无法打开包括文件:“windows.h”: No such file or directory 出现这种错误什么都不用配置(环境变量),最好办法是将VS安装在C盘,让开发工具自动包含 ...
- 未定义的标示符“RECT”,引入了windows.h头文件也没有用?
我用的是win8的vs2012,RECT应该引入什么头文件?windows.h我第一个就引入了,去windows.h里面搜也搜不到RECT这个关键字,应该引入哪个头文件呢? 真是奇怪啊,是不是还需要什 ...
- 在windows下使用pip安装python包遇到缺失stdint.h文件的错误
今天在windows上使用pip安装一个python包python-lzf时遇到如下的错误: fatal error C1083: Cannot open include file: 'stdint. ...
- 51单片机C语言学习笔记7:关于.c文件和.h文件
1)h文件作用 1 方便开发:包含一些文件需要的共同的常量,结构,类型定义,函数,变量申明: 2 提供接口:对一个软件包来说可以提供一个给外界的接口(例如: stdio.h). 2)h文件里应该有什么 ...
- 利用windows.h头文件写一个简单的C语言倒计时
今天写一个简单的倒计时函数 代码如下: #include<stdio.h> #include<windows.h> int main() { int i; printf(&qu ...
- windows.h头文件中改变光标位置的函数——SetConsoleCursorPosition
COORD 具体为 typedef struct COORD{ short X; short Y; } COORD,*PCOORD; 可以用来记录坐标. #include <iostre ...
随机推荐
- 学会了selenium 模拟鼠标操作,你就可以偷懒点点点了
前言 我们在做 Web 自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息. 这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用 selenium 做 Web ...
- 交互式仪表板!Python轻松完成!⛵
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 本文地址:https://www.showmeai.tech/artic ...
- 2022年7月12,第四组,周鹏,被算法折磨的一天【哭】【哭】【哭】【puls哭】
今天学习了JS的几种循环语法,说实话,前几天的简单让我大意了,没有闪,很成功的被搞崩了! 一杯水,一根烟,一个算法边写边骂是一天. 多少次,我满怀期待的以为它会出现想要的结果, 但现实的残酷狠狠的折磨 ...
- [编程基础] Python对象的浅拷贝与深拷贝笔记
Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象.对于不可变的对象,这通常没有什么区别.但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这些对象的"真实副本 ...
- Shell 基本常识
Shell 进入命令行 启动 shell 常用命令 系统管理命令 处理数据命令 Linux 基础管理命令 用户管理 管理文件系统 软件包管理系统 使用容器管理软件 理解 shell 子 shell 环 ...
- 使用Python库pyqt5制作TXT阅读器(一)-------UI设计
项目地址:https://github.com/pikeduo/TXTReader PyQt5中文手册:https://maicss.gitbook.io/pyqt-chinese-tutoral/p ...
- Earthdata批量下载MODIS遥感影像的方法
本文介绍在Earthdata网站中,批量下载MODIS遥感影像的方法. 首先,打开网页:https://search.earthdata.nasa.gov/search ,如果没有Earthd ...
- 模板层之标签、自定义模板语法、母版(模版)的继承与导入、模型层前期准备知识点、ORM常用关键字
今日内容概要 模板层之标签 if判断 {% if 条件1 %} #条件1成立 <p>Hello!</p> #执行 {% elif 条件2 %} #条件1不成立 条件2成立 &l ...
- Java实现BP神经网络MNIST手写数字识别
Java实现BP神经网络MNIST手写数字识别 如果需要源码,请在下方评论区留下邮箱,我看到就会发过去 一.神经网络的构建 (1):构建神经网络层次结构 由训练集数据可知,手写输入的数据维数为784维 ...
- 行为型模式 - 责任链模式Chain of Responsibility
我就想知道我又哪里有广告植入了,告诉我. 学习而来,代码是自己敲的.也有些自己的理解在里边,有问题希望大家指出. 模式的定义与特点 责任链(Chain of Responsibility)模式的定义: ...