簡體   English   中英

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

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

我想在鼠標光標所在的位置打印一些東西,所以我使用POINT cursorPos; GetCursorPos(&cursorPos); 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 << ")";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM