19

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が画面に送信されることはありません。他にすべきことはありますか?ありがとう。

4

5 に答える 5

15

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);
于 2010-04-28T18:57:22.950 に答える
15

コンソール機能を使用すると、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);
}
于 2010-04-28T18:58:08.017 に答える
4

ええ、あなたは電話するのを忘れましたSetConsoleActiveScreenBuffer。独自に作成したポイントは何ですか?GetStdHandle(STD_OUTPUT_HANDLE)既存のコンソールへのハンドルを取得するために使用します。

于 2010-04-29T00:49:37.743 に答える
1

Windows 32 ビット コンソール アプリケーションでは動作しないANSI 例外コード シーケンスを使用していた可能性があります。

于 2010-04-28T22:50:46.340 に答える
1
#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;
}
于 2015-01-27T18:17:07.370 に答える