欢迎光临散文网 会员登陆 & 注册

C++ 控制台:写小应用/小游戏时各种技术上所需的小代码之合集(目前共23个)

2021-10-04 15:46 作者:HeliFoli  | 我要投稿

目录:

  1. 设置打印颜色

  2. COORD 类型结构体

  3. 延时 Sleep

  4. 设置控制台光标位置 SetConsoleCursorPosition

  5. 获取/设置控制台模式 GetConsoleMode / SetConsoleMode

  6. 获取鼠标在控制台的位置

  7. system 函数

  8. 设置控制台标题 SetConsoleTitle

  9. 检测按键状态 GetKeyState / GetAsyncKeyState 

  10. 检查控制台是否有键盘输入 _kbhit

  11. 读取键盘输入 _getch

  12. 设置控制台字体大小

  13. 蜂鸣 Beep

  14. 检索指定的系统指标或系统配置设置 GetSystemMetrics

  15. 设置窗口的大小 / 位置 / Z轴顺序 SetWindowPos

  16. 窗口显示 ShowWindow

  17. 合成击键事件 keybd_event

  18. 合成鼠标事件 mouse_event

  19. 合成键盘/鼠标事件 SendInput

  20. 弹出模态对话框 MessageBox

  21. 设置控制台光标信息 SetConsoleCursorInfo

  22. 生成伪随机数(低质量) rand

  23. 生成伪随机数(高质量) <random>

红字是输出/设置/合成,蓝字是输入/获取/检测。顺序随便排的。


1. 设置打印颜色(windows.h)

可封装为函数以简洁代码:

颜色对照表

2. COORD 类型结构体(windows.h)

windows.h 中用于定义控制台屏幕缓冲区中字符单元格坐标的结构体类型。坐标系 (0,0) 的原点位于缓冲区的顶部左侧单元格。

COORD 是 coordinate(坐标)的简写。

3. 延时 Sleep(windows.h)

4. 设置控制台光标位置 SetConsoleCursorPosition(windows.h)

可封装为函数:

5. 获取/设置控制台模式 GetConsoleMode / SetConsoleMode(windows.h)

例如,我们可以写一个“禁用快速编辑模式”且“启用鼠标输入”的功能:

其它参数详见:

    https://docs.microsoft.com/en-us/windows/console/getconsolemode

    https://docs.microsoft.com/en-us/windows/console/setconsolemode


6. 获取鼠标在控制台的位置(windows.h)

与【5】配合使用。

7. system 函数(windows.h)

发出一个DOS命令。

可实现的功能较多,我只列举比较常用的几个:

其他的一些参数可见:https://blog.csdn.net/u010551600/article/details/23383411


8. 设置控制台标题 SetConsoleTitle(windows.h)

9. 检测按键状态 GetKeyState / GetAsyncKeyState (windows.h)

GetKeyState 函数返回一个 short 值,若其值为负,则按键被按下,否则未被按下。

    

    你也可根据 GetKeyState(Key) >> 8 (即其返回值的高序位)的值(-1 / 0)判断按键状态(按下 / 没按下)

    你还可以用 GetAsyncKeyState(Key) >> 8 的值(-128 / 0)判断按键状态(按下 / 没按下),这个函数读取的是物理键状态,不管你怎么鼠标键盘映射,它只读取实际的按键状态。


附:虚拟键码对照表:

    https://baike.baidu.com/item/虚拟键码

    或 https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes      

10. 检查控制台是否有键盘输入 _kbhit(conio.h)

kbhit 为 _kbhit 函数的弃用别名,该函数仍受支持,但不建议使用。

 _kbhit 函数检查控制台是否有最近的击键。如果函数返回一个非零值,则缓冲区中正在等待击键。然后程序可以调用 _getch 或 _getche 来获取击键。


你可以进行如下测试:

11. 读取键盘输入 _getch(conio.h)

getch 为 _getch 函数的弃用别名,该函数仍受支持,但不建议使用。

_getch 在 Windows 平台下从控制台无回显地取一个字符,返回值为 int 类型。


注意在读取功能键(function key)或方向键时,这个函数必须调用两次:第一次调用返回 0 或 0xE0(即224),第二次调用返回实际的键码。


你可以进行如下测试:

12. 设置控制台字体大小(windows.h)

13. 蜂鸣 Beep(windows.h)

通过控制台扬声器播放蜂鸣声。

当然,输出转义字符 '\a' 也可实现短促响铃效果。


14. 检索指定的系统指标或系统配置设置 GetSystemMetrics 

(windows.h)

例如:


其它参数见:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics


15. 设置窗口的大小 / 位置 / Z轴顺序 SetWindowPos 

(windows.h)

例如,我们可以置顶最顶层窗口(小工具版及该函数详细教程看这里):

你可以在这里了解它的更多用处:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos


16. 窗口显示 ShowWindow (windows.h)

示例:

更多参数见:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow


17. 合成击键事件 keybd_event(windows.h)

注:此函数已被取代,请改用SendInput。由于它使用起来很方便,我还是介绍一下吧。

通常我们只需要使用第一个和第三个参数(0 / KEYEVENTF_KEYUP)。下面是示例(选自百度百科)

18. 合成鼠标事件 mouse_event(windows.h)

注:此函数已被取代,请改用SendInput。由于它使用起来很方便,我还是介绍一下吧。

其中 dwFlags 可以是下列值的某种组合:

示例:

(夹带私货)我用这玩意儿做过一个连点器。

19. 合成键盘/鼠标事件 SendInput(windows.h)

该函数返回值是成功插入操作事件的个数。如果插入出错可以利用 GetLastError 来查看错误类型。

注意到插入的是 INPUT 结构的事件。故应该继续查看 INPUT 的相关内容。

其中 type 可以为如下值:

https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-input

下面是一个实例(改自 Microsoft Docs)

20. 弹出模态对话框 MessageBox(windows.h)

其中最后一个参数 uType 可以为下列标志组中标志的组合,指定下列标志中的一个来显示消息框中的按钮以及图标:

· 按钮:

· 图标:

返回值:


示例 1:

效果

示例 2:

效果

21. 设置控制台光标信息 SetConsoleCursorInfo (windows.h)

22. 生成伪随机数(低质量) rand (stdlib.h)

 返回从 0 到 RAND_MAX (32767) 范围内的一个伪随机整数(低质量)。

该 rand 函数生成已知序列,不适合用作加密函数。 若要生成加密型更安全的随机数,请使用 rand_s 或使用 <random> 中 C++ 标准库中声明的函数。

可以在此之前使用 srand 函数将随机数种子置为 time(nullptr),否则每次运行将产生同样的结果。

返回MIN~MAX中一个随机整数 :

还可得到小于1的非负浮点数:

关于该函数的风险及优化(视频):https://learn.microsoft.com/zh-cn/events/goingnative-2013/rand-considered-harmful

23. 生成伪随机数(高质量) random)

示例1:随机的unsigned整数(种子为time(nullptr))

示例2:随机的0~9整数(种子为time(nullptr))

主函数中 uniform_int_distribution 可替换为:

https://learn.microsoft.com/zh-cn/cpp/standard-library/random?view=msvc-170#distributions

示例3:泊松分布

运行结果

了解更多:https://learn.microsoft.com/zh-cn/cpp/standard-library/random?view=msvc-170


主要参考资料来自 Microsoft Docs(https://docs.microsoft.com/)百度百科(https://baike.baidu.com/)。我没勾原创声明是因为我很多地方都是引用的那里面的话,而且绝大部分代码并非原创。



C++ 控制台:写小应用/小游戏时各种技术上所需的小代码之合集(目前共23个)的评论 (共 条)

分享到微博请遵守国家法律