type
status
date
slug
summary
tags
category
icon
password
Email
文章首发于:My Blog 欢迎大佬们前来逛逛
win32打开控制台的方法
首先加入输入输出头文件
AllocConsole
:为控制台分配空间
GetStdHandle
:创建一个标准输入输出设备,指定其为STD_OUTPUT_HANDLE
则就是一个标准输出控制台。
- 创建一个
HANDLE
变量console接收GetStdHandle创建的控制台。
往控制台中写数据:
使用
WriteConsole
写数据,首先要格式化字符串,后面两个直接给NULL即可。窗口创建消息
WM_CREATE
消息,在创建窗口时(此时窗口未显示时)触发在窗口创建时创建一个控制台:
窗口销毁消息
WM_DESTROY
消息,在销毁窗口的时候触发,但是此时窗口并没有关闭,我们需要手动触发关闭窗口的消息。此函数:向系统指示线程已发出终止 (退出) 的请求。 它通常用于响应 WM_DESTROY 消息。
此时我们可以发送一个关闭窗口的消息:
PostQuitMessage
函数,传递任意一个参数,返回值为一个WM_QUIT
消息,然后此消息被GetMessage
所捕获,此时GetMessage返回0,则关闭消息循环,结束窗口。定时器消息
WM_TIMER
接受定时器发出的消息,我们可以自己创建定时器:wParam:定时器的标识符;lParam:定时器中断函数指针。
使用
SetTimer
创建定时器,接受四个参数- hWnd:与计时器相关联的窗口句柄
- nIDEvent:创建一个编号为此的计时器,用于标识创建的计时器,即标识符
- uElapse:计时器的时间间隔。
- lpTimerFunc:指定计时器工作是轮询还是中断(这个很重要)
首先我们创建一个简单的计时器:
两个计时器的标记分别为 11111 和 22222,他们分别每隔 222ms 和333ms执行一次操作。
如果第四个参数是NULL,则表示轮询,即发送消息。
定时器的中断机制
将
SetTiemr
第四个参数传递一个函数指针,则表示定时器每隔多长时间进行一次中断机制。鼠标移动消息
WM_MOUSEMOVE
指定了鼠标移动的触发消息。wParam:指定了鼠标移动时某些键是否被按下;lParam:鼠标的位置。
如果得到鼠标移动时的位置?lParam参数
- LOWORD:低16位存储了x坐标
- HIWORD:高16位存储了y坐标
案例:鼠标移动时切换样式
在窗口左边时为样式1,在窗口右边为样式2。
需要的一些操作:
- 添加资源文件(在此不多赘述)
- 加载鼠标资源:使用
LoadCursor
函数,使用MAKEINTRESOURCE
将整数值转换为与资源管理功能兼容的资源类型。 此宏用于代替包含资源名称的字符串。
- 获取窗口的宽度:
GetWindowRect
函数。
鼠标点击消息
WM_LBUTTONDOWN
消息处理鼠标左键点击,右键点击和中键等类似wParam:指定了鼠标移动时某些键是否被按下;lParam:鼠标的位置。
鼠标滑轮消息
WM_MOUSEHWEEL
触发滑轮消息。wParam:为正说明是正滑,为负则是反滑(记得转换为int类型);lParam:指定滑轮所在的xy坐标
键盘消息
WM_KEYUP
键盘弹起,WM_KEYDOWN
键盘按下wParam:表示按键的虚拟键盘的代码。lParam:表示一些标记。
外部设备消息
WM_DEVICECHANGE
消息处理外部设备的消息。- *Param:发生的事件,包括
已向系统添加或删除设备。
或者已插入设备或介质
等提示功能。lParam指向包含特定于事件的数据的结构的指针。 其格式取决于 wParam 参数的值
什么是外部设备? 外部io设备等等。。。
我们可以获取他们的信息。
首先引入头文件:
#include <Dbt.h>
DBT_DEVICEARRIVAL
表示外部设备进入。即当触发消息WM_DEVICECHANGE时, wParam == DBT_DEVICEARRIVAL 时,会触发。
如果我们想拷贝别人U盘上的内容:则我们可以这样操作
- 将lParam转换为
PDEV_BROADCAST_VOLUME
类型。这个结构体指针中有一个参数dbcv_unitmask
表示的是外部设备所处的盘符,因此我们便可以获取U盘的盘符,然后执行 copy操作。
dbcv_unitmask
是由右往左表示的,即最右边到左边表示‘A' B C D ....,如果是0,则表示是A盘,因此我们便可以获取盘符
xcopy
的拷贝操作
本节源码
- 作者:Yuleo
- 链接:https://www.helloylh.com/article/windows2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。