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

C++ 如何在VC+中在鼠标光标位置打印句子+;Win32应用程序?,c++,windows,visual-c++,windows-console,C++,Windows,Visual C++,Windows Console,我想在鼠标光标所在的位置打印一些东西,所以我使用POINT cursorPos;GetCursorPos(&cursorPos) 获取鼠标光标的位置 然后我将控制台光标设置到该位置,并打印鼠标坐标。然而,结果并不正确 代码如下: #include<iostream> #include<Windows.h> #include <conio.h> #include <stdio.h> using namespace std; void g

我想在鼠标光标所在的位置打印一些东西,所以我使用
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;
   }
}
#包括
#包括
#包括
#包括
使用名称空间std;
void gotoxy(int列,int行){
合作社;
坐标X=列;
坐标Y=直线;
设置控制台位置(
GetStdHandle(标准输出句柄),
坐标
);
}
int main(){
而(1){
点游标;
GetCursorPos(&cursorPos);
系统(“暂停”);
gotoxy(cursorPos.x,cursorPos.y);
cout用于在控制台窗口中查找光标位置。参见此

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

获取控制台窗口的句柄
GetConsoleWindow()
使用
ScreenToClient
将鼠标指针位置从屏幕转换到客户端。将坐标映射到
CONSOLE\u screen\u BUFFER\u 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 << ")";
    }
}
COORD getxy()
{
点pt;
GetCursorPos(&pt);
HWND HWND=GetConsoleWindow();
RECT-rc;
GetClientRect(hwnd和rc);
屏幕客户端(硬件、硬件和pt);
HANDLE hout=GetStdHandle(标准输出句柄);
控制台屏幕缓冲区信息inf;
GetConsoleScreenBufferInfo(hout,&inf);
COORD COORD={0,0};
coord.X=MulDiv(pt.X,inf.srWindow.Right,rc.Right);
坐标Y=MulDiv(pt.Y,inf.srWindow.Bottom,rc.Bottom);
返回坐标;
}
int main()
{
HANDLE hout=GetStdHandle(标准输出句柄);
而(1)
{
系统(“暂停”);
COORD-COORD=getxy();
设置控制台位置(hout,coord);

客户端区域内没有标题栏。它可以工作!我写这篇文章是因为我想写一个PlaneWar并使用鼠标移动平面。我想知道如何在不等待输入的情况下获取坐标“\u getch()”。非常感谢。我推荐使用常规的windows程序开发游戏。您需要实时处理鼠标/键盘的消息,绘制高分辨率图像,这在控制台中无法完成。