簡體   English   中英

在Win32控制台應用程序中設置光標位置

[英]Setting the Cursor Position in a Win32 Console Application

如何在Win32控制台應用程序中設置光標位置? 最好,我想避免使用Windows控制台功能。 (我整個上午都在那條黑暗的小巷里奔跑;它造成的問題多於解決的問題。)我似乎回憶起當我在大學時使用stdio相對簡單,但我現在找不到任何如何做的例子。 任何想法或建議將不勝感激。 謝謝。

額外細節

這是我現在要做的事情:

COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL );
char * str = "Some Text\r\n";
DWDORD len = strlen(str);

SetConsoleCursorPosition(hConsole_c, pos);
WriteConsole(hConsole_c, str, len, &dwBytesWritten, NULL);
CloseHandle(hConsole_c)

文本字符串str永遠不會發送到屏幕。 我還應該做些什么嗎? 謝謝。

使用控制台功能,您將使用SetConsoleCursorPosition 沒有它們(或者至少不直接使用它們),你可以在ncurses庫中使用類似gotoxy東西。

編輯:它的包裝非常簡單:

// Untested, but simple enough it should at least be close to reality...
void gotoxy(int x, int y) { 
    COORD pos = {x, y};
    HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(output, pos);
}

請參閱SetConsoleCursorPosition API

編輯:

使用WriteConsoleOutputCharacter()將控制台中的活動緩沖區的句柄移動,並允許您設置其位置。

int x = 5; int y = 6;
COORD pos = {x, y};
HANDLE hConsole_c = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
SetConsoleActiveScreenBuffer(hConsole_c);
char *str = "Some Text\r\n";
DWORD len = strlen(str);
DWORD dwBytesWritten = 0;
WriteConsoleOutputCharacter(hConsole_c, str, len, pos, &dwBytesWritten);
CloseHandle(hConsole_c);

是的,你忘了調用SetConsoleActiveScreenBuffer 創建自己的究竟是什么意思? 使用GetStdHandle(STD_OUTPUT_HANDLE)獲取現有控制台的句柄。

#include <windows.h>
#include <iostream.h>
using namespace std;
int main(int argc, char *argv[])
{
  int x,y;
  cin>>x>>y;
  SetCursorPos(x,y); //set your co-ordinate
  Sleep(500);
  mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0); // moving cursor leftdown
  mouse_event(MOUSEEVENTF_LEFTUP,x,y,0,0); // moving cursor leftup //for accessing your required co-ordinate
  system("pause");
  return EXIT_SUCCESS;
}

您可能正在使用ANSI excape代碼序列 ,它不適用於Windows 32位控制台應用程序。

暫無
暫無

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

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