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

Posted

技术标签:

【中文标题】如何在VC++ Win32应用程序中鼠标光标位置打印句子?【英文标题】:How to print sentence in the position of the mouse cursor in VC++ Win32 application? 【发布时间】:2016-10-12 17:26:19 【问题描述】:

我想在鼠标光标所在的位置打印一些东西,所以我使用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;
   

谢谢你~

【问题讨论】:

【参考方案1】:

使用GetConsoleScreenBufferInfo 在控制台窗口中查找光标位置。看到这个example

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

获取控制台窗口的句柄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 << ")";
    

【讨论】:

客户区没有标题栏。 有效!我写这个是因为我想写一个 PlaneWar 并使用鼠标移动飞机。我想知道如何在不等待输入“_getch()”的情况下获取坐标。非常感谢。 我推荐一个常规的windows程序来开发游戏。您需要对鼠标/键盘进行实时消息处理,绘制高分辨率图像,这在控制台中无法完成。

以上是关于如何在VC++ Win32应用程序中鼠标光标位置打印句子?的主要内容,如果未能解决你的问题,请参考以下文章

Python win32gui 获取窗口中虚拟光标的当前位置

如何在 Win32 控制台中隐藏鼠标光标?

如何在应用程序窗口外设置光标位置? (C ++)

在 Win32 控制台应用程序中设置光标位置

如何在 OpenGL/Glut 中更改鼠标光标的位置?

vc新建工程Win32 Application和Win32 Console Application区别