1
Windowsコンソールで文字の完全なテキストをフォーマットする必要があるので、タブを処理するにはタブサイズを取得する必要があります。私はConsole functionsを見ましたが、そのような情報は含まれていません。WINAPIでウィンドウのタブ幅を取得しますか?
タブサイズを取得する方法はありますか、またはWIN APIで公開されていないものはありますか?
Windowsコンソールで文字の完全なテキストをフォーマットする必要があるので、タブを処理するにはタブサイズを取得する必要があります。私はConsole functionsを見ましたが、そのような情報は含まれていません。WINAPIでウィンドウのタブ幅を取得しますか?
タブサイズを取得する方法はありますか、またはWIN APIで公開されていないものはありますか?
タブストップ幅をハードコーディングする必要がない場合は、\r\t
の印刷後にカーソル位置を照会することができます。例:
int get_tab_stop_width()
{
int tab_stop_width = -1;
HANDLE h = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
if (h != INVALID_HANDLE_VALUE) {
DWORD n;
if (WriteConsoleW(h, L"\r\t", 2, &n, NULL)) {
CONSOLE_SCREEN_BUFFER_INFO info;
if (GetConsoleScreenBufferInfo(h, &info))
tab_stop_width = info.dwCursorPosition.X;
}
CloseHandle(h);
}
return tab_stop_width;
}
これは、プロセスがコンソールに接続されていると仮定すると、すべてのバージョンのWindowsでは8を返します。
変更するオプションはありません。それは旧式のテレタイプにあったような8です。あなたが完璧にしたい場合は、スペースを使用する必要があります。 –
コンソールでは8列ごとにタブストップが使用されるため、タブ文字には一定のサイズがありません。 – eryksun
@eryksun私はそれが実際にサイズではないことを知っています、それは "あらゆる停留所の間の距離"ですが、私はこの質問がもっと理にかなっていると思いました。 –