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 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);
コンソール関数を使用する場合は、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);
}
ええ、あなたは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 code sequence を使用していましたが、これはWindows 32ビットコンソールアプリケーションでは機能しません。