linux控制台界面编程,控制台窗口界面的编程控制(二)

该程序展示了如何在Windows环境下使用C++捕获鼠标事件,特别是双击事件,并在屏幕上进行相应操作。程序通过读取标准输入设备句柄获取鼠标输入,当检测到双击事件时退出循环。同时,程序能够显示鼠标位置并在最后一行更新,当左键被按下时填充字符'A'。此外,还提供了清屏和设置光标位置的功能。
摘要由CSDN通过智能技术生成

#include <WINDOWS.H>

#include <STDIO.H>

#include <STRING.H>

HANDLE hOut;

HANDLE hIn;

void ClearScreen(void);

void DispMousePos(COORD pos); // 在最后一行显示鼠标位置

void main()

{

hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄

hIn = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄

WORD att = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY |

BACKGROUND_BLUE ;

// 背景是蓝色,文本颜色是黄色

SetConsoleTextAttribute(hOut, att);

ClearScreen(); // 清屏

INPUT_RECORD mouseRec;

DWORD state = 0, res;

COORD pos = {0, 0};

for(;;) // 循环

{

ReadConsoleInput(hIn, &mouseRec, 1, &res);

if (mouseRec.EventType == MOUSE_EVENT){

if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK) break;

// 双击鼠标退出循环

pos = mouseRec.Event.MouseEvent.dwMousePosition;

DispMousePos(pos);

if (mouseRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)

FillConsoleOutputCharacter(hOut, 'A', 1, pos, NULL);

}

}

pos.X = 0; pos.Y = 0;

SetConsoleCursorPosition(hOut, pos); // 设置光标位置

CloseHandle(hOut); // 关闭标准输出设备句柄

CloseHandle(hIn); // 关闭标准输入设备句柄

}

void DispMousePos(COORD pos) // 在最后一行显示鼠标位置

{

CONSOLE_SCREEN_BUFFER_INFO bInfo;

GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD home = {0, bInfo.dwSize.Y-1};

WORD att0 = BACKGROUND_INTENSITY ;

FillConsoleOutputAttribute(hOut, att0, bInfo.dwSize.X, home, NULL);

FillConsoleOutputCharacter(hOut, ' ', bInfo.dwSize.X, home, NULL);

char s[20];

sprintf(s,"X = %2lu, Y = %2lu",pos.X, pos.Y);

SetConsoleTextAttribute(hOut, att0);

SetConsoleCursorPosition(hOut, home);

WriteConsole(hOut, s, strlen(s), NULL, NULL);

SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性

SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition); // 恢复原来的光标位置

}

void ClearScreen(void)

{

CONSOLE_SCREEN_BUFFER_INFO bInfo;

GetConsoleScreenBufferInfo( hOut, &bInfo );

COORD home = {0, 0};

unsigned long size = bInfo.dwSize.X * bInfo.dwSize.Y;

FillConsoleOutputAttribute(hOut, bInfo.wAttributes, size, home, NULL);

FillConsoleOutputCharacter(hOut, ' ', size, home, NULL);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值