如何在vc++ Win32应用程序中打印句子在鼠标光标的位置

How to print sentence in the position of the mouse cursor in VC++ Win32 application?

本文关键字:鼠标 句子 光标 位置 打印 vc++ Win32 应用程序      更新时间:2023-10-16

我想在鼠标光标所在的位置打印一些东西,所以我使用POINT cursorPos; GetCursorPos(&cursorPos);获取鼠标光标的位置。

然后我将控制台光标设置到该位置,并打印鼠标坐标。然而结果是不正确的。

代码如下:

 #include<iostream>
 #include<Windows.h>
 #include <conio.h>
 #include <stdio.h>
 using namespace std;
 void gotoxy(int column, int line){
     COORD coord;
     coord.X = column;
     coord.Y = line;
     SetConsoleCursorPosition(
         GetStdHandle(STD_OUTPUT_HANDLE),
         coord
     );
 }
int main(){
   while (1){
       POINT cursorPos;
       GetCursorPos(&cursorPos);
       system("pause");
       gotoxy(cursorPos.x, cursorPos.y);
       cout << cursorPos.x << " " << cursorPos.y;
   }
}

谢谢你~

使用GetConsoleScreenBufferInfo查找控制台窗口中的光标位置。请看下面的例子

在控制台程序中跟踪鼠标位置可能没有用。如果你真的需要鼠标指针的位置,你必须从桌面坐标转换到控制台窗口坐标。

获取控制台窗口的句柄GetConsoleWindow()使用ScreenToClient将鼠标指针位置从屏幕转换到客户端。将坐标映射到CONSOLE_SCREEN_BUFFER_INFO::srWindow

COORD getxy()
{
    POINT pt; 
    GetCursorPos(&pt);
    HWND hwnd = GetConsoleWindow();
    RECT rc;
    GetClientRect(hwnd, &rc);
    ScreenToClient(hwnd, &pt);
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO inf;
    GetConsoleScreenBufferInfo(hout, &inf);
    COORD coord = { 0, 0 };
    coord.X = MulDiv(pt.x, inf.srWindow.Right, rc.right);
    coord.Y = MulDiv(pt.y, inf.srWindow.Bottom, rc.bottom);
    return coord;
}

int main() 
{
    HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
    while (1)
    {
        system("pause");
        COORD coord = getxy();
        SetConsoleCursorPosition(hout, coord);
        cout << "(" << coord.X << "," << coord.Y << ")";
    }
}