C语言控制台程序中如何获取光标位置就是(x, y)坐标。

C语言控制台程序中如何获取光标位置就是(x, y)坐标。,第1张

结果:

DeskTopPos:

X: 680 Y: 592

ClientPos:

X: 586 Y: 444

请按任意键继续

代码:

#include <stdioh>

#include "stdlibh"

#include <Windowsh>

main()

{

HWND hConsole = FindWindow("ConsoleWindowClass", NULL);

POINT pt;

GetCursorPos(&pt);

printf("DeskTopPos:\nX:%4i Y:%4i\n", ptx, pty);

ScreenToClient(hConsole, &pt);

printf("ClientPos:\nX:%4i Y:%4i\n", ptx, pty);

fflush(stdin);

system("pause");

}

函数连接:

>

命令行的光标(ConsoleCursor)其实就是一个另类的插入符(Caret)。插入符是什么呢?当你在记事本打字的时候,那个一闪一闪的竖线就叫做插入符。插入符的作用有多大呢?没有了插入符,假如你正在输入第二十个字,突然发现第一个字打错了,那么你得把正确的十九个字和错误的第一个字全删了,再把所有东西重新打一遍。然而,系统没有给任何命令是可以 *** 作命令行光标的,光标的存在实在是名存实亡,完全不能发挥光标的真正用途。本教程的目的,就是让大家学会在命令行程序中控制光标。

一、CONSOLE_CURSOR_INFO 结构体

CONSOLE_CURSOR_INFO 结构体中包含了关于命令行光标的一些信息,是否显示和光标大小两个信息。通过更改这个结构体,再赋给命令行,就可以实现想要的一些效果了。

基本思路:

首先先读取命令行现在的 CONSOLE_CURSOR_INFO 结构体信息,需要用到API函数GetConsoleCursorInfo。GetConsoleCursorInfo 需要用到输出句柄,可以通过API函数GetStdHandle获得。

然后改变结构体信息,再使用API函数SetConsoleCursorInfo

例:

隐藏光标:

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_CURSOR_INFO cci;

GetConsoleCursorInfo(hOut,&cci);

ccibVisible=false;

SetConsoleCursorInfo(hOut,&cci);

二、控制台光标的位置

现在能够控制光标的样式了,但对于批处理来说还远远不够。大部分强大的第三方工具都有设置和获得光标位置的功能,这节我们就来讨论如何实现。

设置光标位置需要用到API函数SetConsoleCursorPosition,需要的参数还是输出句柄,和欲设置的坐标。坐标用COORD结构体就可以了。

例:

将光标移动到(5,3):

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

COORD pos;

posX=5;

posY=3;

SetConsoleCursorPosition(hOut,pos);

获取光标的位置,没有专用的API函数。我们需要通过另一个API函数GetConsoleScreenBufferInfo来获取。其中,GetConsoleScreenBufferInfo的参数分别为输出句柄以及CONSOLE_SCREEN_BUFFER_INFO结构体的指针。CONSOLE_SCREEN_BUFFER_INFO结构体中包含了许多控制台缓冲区的属性,其中我们需要的是一个名为dwCursorPosition的COORD结构体,包含了光标的位置。

例:

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO bInfo;

GetConsoleScreenBufferInfo(hOut, &bInfo);

上面的例子,bInfodwCursorPosition就是当前的坐标

通过win32定义的POINT结构(typedef struct tagPOINT { LONG x;

LONG y;} POINT),来获得当前鼠标光标位置的窗口HWND,这是最直观的武器!常规 *** 作如下:先得到Cursor的POINT(BOOL GetCursorPos(LPPOINT)函数),再用WindowFromPoint。这样,我们几乎可以获得任何打开的有窗口的函数的HWND了!然后通过获取类名的win32 api函数(int GetClassName( HWND hWnd, LPTSTR lpClassName, int nMaxCount ))得到类名这里的lpClassName最好用字符数组地址,nMaxCount就是数组的size了。

以上就是关于C语言控制台程序中如何获取光标位置就是(x, y)坐标。全部的内容,包括:C语言控制台程序中如何获取光标位置就是(x, y)坐标。、C++: 在VC6.0中如何实现将光标移动到任意位置输出 ConSole、VC++6.0如何获取光标的行号和列号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9559185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存