此代码是将光标跳到指定位置。
gotoxy(x,y) x代表行,y代表列,下标是从0开始的
#include<iostream>
#include<windows.h>
#include<stdio.h>
#include<string.h>
using namespace std;
void gotoxy(int x,int y)//位置函数
{
COORD pos;
pos.X=y;
pos.Y=x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
int main()
{
cout<<"sssssssss"<<endl;
gotoxy(0,1);
getchar();
return 0;
}
在控制台程序中获取鼠标事件。
下面给出一个小程序
<span style="font-size:14px;">#include <windows.h>
#include <stdio.h>
int main(void)
{
// 获取标准输入输出设备句柄
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO bInfo;
INPUT_RECORD mouseRec;
DWORD res;
COORD crPos, crHome = {0, 0};
printf("[Cursor Position] X: %2lu Y: %2lu\n", 0, 0); // 初始状态
while (1)
{
ReadConsoleInput(hIn, &mouseRec, 1, &res);
if (mouseRec.EventType == MOUSE_EVENT)
{
if (mouseRec.Event.MouseEvent.dwButtonState==FROM_LEFT_1ST_BUTTON_PRESSED)
{
if (mouseRec.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
{
break; // 左键双击 退出循环
}
}
crPos = mouseRec.Event.MouseEvent.dwMousePosition;
GetConsoleScreenBufferInfo(hOut, &bInfo);
SetConsoleCursorPosition(hOut, crHome);
printf("[Cursor Position] X: %2lu Y: %2lu", crPos.X, crPos.Y);
SetConsoleCursorPosition(hOut, bInfo.dwCursorPosition);
switch (mouseRec.Event.MouseEvent.dwButtonState)
{
case FROM_LEFT_1ST_BUTTON_PRESSED: // 左键 输出A
FillConsoleOutputCharacter(hOut,'1', 1, crPos, &res);
break; // 如果使用printf输出,则之前需要先设置光标的位置
case RIGHTMOST_BUTTON_PRESSED: // 右键 输出a
FillConsoleOutputCharacter(hOut,'2', 1, crPos, &res);
break;
default:
break;
}
}
}
CloseHandle(hOut); // 关闭标准输出设备句柄
CloseHandle(hIn); // 关闭标准输入设备句柄
return 0;
}</span><span style="font-size:24px;">
</span>