COORD(坐标结构体)
typedef struct _COORD
{
SHORT X;
SHORT Y;
} COORD;
CONSOLE_SCREEN_BUFFER_ INFO(控制台窗口信息结构体)
typedef struct _CONSOLE_SCREEN_BUFFER_INFO
{
COORD dwSize; //缓冲区大小
COORD dwCursorPosition; //当前光标位置
WORD wAttributes; //字符属性
SMALL_RECT srWindow; //当前窗口显示的大小和位置
COORD dwMaximumWindowSize; // 最大的窗口缓冲区大小
} CONSOLE_SCREEN_BUFFER_INFO;
_SMALL_RECT(表示矩形区域的结构体)
typedef struct _SMALL_RECT //表示矩形区域的结构体
{
SHORT Left; //左边界
SHORT Top; //上边界
SHORT Right; //右边界
SHORT Bottom; //下边界
} SMALL_RECT;
/*
微软官方的说法是
Left 区域的左上顶点的X坐标
Top 区域的左上顶点的Y坐标
Right 区域的右下顶点的X坐标
Bottom 区域的右下顶点的Y坐标
*/
_CONSOLE_CURSOR_INFO(光标信息结构体)
typedef struct _CONSOLE_CURSOR_INFO //光标信息结构体
{
DWORD dwSize; //光标尺寸大小,范围是1~100
BOOL bVisible; //表示光标是否可见,true表示可见
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
_INPUT_RECORD(输入事件结构体)
typedef struct _INPUT_RECORD //输入事件结构体
{
WORD EventType; //事件类型
union {
KEY_EVENT_RECORD KeyEvent; //按键事件
MOUSE_EVENT_RECORD MouseEvent; //鼠标事件
WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
MENU_EVENT_RECORD MenuEvent;
FOCUS_EVENT_RECORD FocusEvent;
} Event; //具体的事件
} INPUT_RECORD;
/*
其中事件类型EventType的值有5种
KEY_EVENT 代表Event包含一个KEY_EVENT_RECODE结构体
MOUSE_EVENT 代表Event包含一个MOUSE_EVENT_RECODE结构体
WINDOW_BUFFER_SIZE_EVENT 代表Event包含一个WINDOW_BUFFER_SIZE_EVENT_RECORD结构体
MENU_EVENT 代表Event包含一个MENU_EVENT_RECORD结构体
FOCUS_EVENT 代表Event包含一个FOCUS_EVENT_RECORD结构体
*/
_KEY_EVENT_RECORD(键盘事件结构体)
typedef struct _KEY_EVENT_RECORD //键盘事件结构体
{
BOOL bKeyDown; //按键状态,true代表键按下,false代表键释放
WORD wRepeatCount; //按键次数
WORD wVirtualKeyCode; //虚拟键
WORD wVirtualScanCode; //虚拟键扫描码
union {
WCHAR UnicodeChar; //解释成Unicode宽字符
CHAR AsciiChar; //解释成ASCII码字符
} uChar;
DWORD dwControlKeyState; //控制键状态
} KEY_EVENT_RECORD;
/*
控制键各状态的值
ENHANCED_KEY 扩展键被按下
LEFT_ALT_PRESSED 左Alt键被按下
LEFT_CTRL_PRESSED 左Ctrl键被按下
RIGHT_ALT_PRESSED 右Alt键被按下
RIGHT_CTRL_PRESSED 右Ctrl键被按下
NUMLOCK_ON 数字锁定被打开
SCROLLLOCK_ON 滚动锁定被打开
CAPSLOCK_ON 大写锁定被打开
SHIFT_PRESSED Shift键被按下
*/
_MOUSE_EVENT_RECORD(鼠标事件结构体)
typedef struct _MOUSE_EVENT_RECORD //鼠标事件结构体
{
COORD dwMousePosition; //当前鼠标在控制台窗口缓冲区的位置
DWORD dwButtonState; //鼠标按键的状态
DWORD dwControlKeyState; //控制键状态
DWORD dwEventFlags; //鼠标事件类型
} MOUSE_EVENT_RECORD;
/*
其中鼠标按键状态dwButtonState可能的值有
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FROM_LEFT_1ST_BUTTON_PRESSED 最左边的鼠标键被按下 一般来说就是鼠标左键
FROM_LEFT_2ND_BUTTON_PRESSED 左起第二个鼠标键被按下 一般来说是鼠标中键,就是滚轮键
FROM_LEFT_3RD_BUTTON_PRESSED 左起第三个鼠标键被按下
FROM_LEFT_4TH_BUTTON_PRESSED 左起第四个鼠标键被按下
RIGHTMOST_BUTTON_PRESSED 最右边的鼠标键被按下 一般来说是鼠标右键
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
控制键状态dwControlKeyState与键盘事件的一样
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ENHANCED_KEY 扩展键被按下
LEFT_ALT_PRESSED 左Alt键被按下
LEFT_CTRL_PRESSED 左Ctrl键被按下
RIGHT_ALT_PRESSED 右Alt键被按下
RIGHT_CTRL_PRESSED 右Ctrl键被按下
NUMLOCK_ON 数字锁定被打开
SCROLLLOCK_ON 滚动锁定被打开
CAPSLOCK_ON 大写锁定被打开
SHIFT_PRESSED Shift键被按下
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
鼠标事件类型dwEventFlags有以下几种
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DOUBLE_CLICK 双击,第一击只作为普通按键事件,第二击才作为双击事件
MOUSE_HWHEELED 水平鼠标滚轮移动
MOUSE_MOVED 鼠标移动
MOUSE_WHEELED 垂直鼠标滚轮移动
0 当鼠标有键被按下或者释放
*/