Comment définir la position du curseur dans une application console Win32? De préférence, j'aimerais éviter de créer un descripteur et d'utiliser les fonctions de la console Windows. (J'ai passé toute la matinée à courir dans cette allée sombre; cela crée plus de problèmes qu'il n'en résout.) Je me souviens de l'avoir fait assez simplement quand j'étais à l'université avec stdio, mais je ne trouve aucun exemple de la façon de le faire maintenant. . Toutes les pensées ou suggestions seraient grandement appréciées. Merci.
Détails supplémentaires
Voici ce que j'essaie maintenant de faire:
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)
La chaîne de texte str
n'est jamais envoyée à l'écran. Y a-t-il autre chose que je devrais faire? Merci.
Voir SetConsoleCursorPosition API
Modifier:
Utilisez WriteConsoleOutputCharacter () qui récupère le handle de votre tampon actif dans la console et vous permet également de définir sa position.
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);
En utilisant les fonctions de la console, vous utiliseriez SetConsoleCursorPosition
. Sans eux (ou du moins, ne les utilisez pas directement), vous pourriez utiliser quelque chose comme gotoxy
dans la bibliothèque ncurses .
Edit: un wrapper car c'est assez trivial:
// 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);
}
Oui, vous avez oublié d'appeler SetConsoleActiveScreenBuffer
. Quel était le but de créer le vôtre? Utilisez GetStdHandle(STD_OUTPUT_HANDLE)
pour obtenir un descripteur de la console existante.
Vous utilisiez probablement/ Les séquences de code de copie ANSI , qui ne fonctionnent pas avec les applications console 32 bits de Windows.
#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;
}