2017-04-24 17 views
1

Windowsコンソールで文字の完全なテキストをフォーマットする必要があるので、タブを処理するにはタブサイズを取得する必要があります。私はConsole functionsを見ましたが、そのような情報は含まれていません。WINAPIでウィンドウのタブ幅を取得しますか?

タブサイズを取得する方法はありますか、またはWIN APIで公開されていないものはありますか?

+0

変更するオプションはありません。それは旧式のテレタイプにあったような8です。あなたが完璧にしたい場合は、スペースを使用する必要があります。 –

+0

コンソールでは8列ごとにタブストップが使用されるため、タブ文字には一定のサイズがありません。 – eryksun

+0

@eryksun私はそれが実際にサイズではないことを知っています、それは "あらゆる停留所の間の距離"ですが、私はこの質問がもっと理にかなっていると思いました。 –

答えて

1

タブストップ幅をハードコーディングする必要がない場合は、\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を返します。

関連する問題