2017-04-24 2 views
1

J'ai besoin de mettre en forme du texte parfait pour les caractères dans la console Windows, j'ai donc besoin de la taille des onglets pour gérer les onglets. J'ai regardé le Console functions mais il ne semble pas contenir de telles informations.Obtenir la largeur de l'onglet sur Windows avec WINAPI?

Existe-t-il un moyen d'obtenir la taille des onglets, ou quelque chose qui n'est pas exposé par l'API WIN?

+0

Il n'y a pas d'option pour le changer. C'est comme si c'était sur les télétypes d'antan. Si vous le voulez parfait, vous devez utiliser des espaces. –

+0

La console utilise des taquets de tabulation toutes les 8 colonnes, de sorte qu'un caractère de tabulation n'a pas de taille constante. – eryksun

+0

@eryksun Je sais que ce n'est pas vraiment la taille, c'est "la distance entre chaque arrêt", mais je pensais que la question avait plus de sens de cette façon. –

Répondre

1

Si vous ne souhaitez pas coder en dur la largeur de l'onglet, vous pouvez interroger la position du curseur après l'impression \r\t. Par exemple:

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; 
} 

Cela devrait retourner 8 sur toutes les versions de Windows, en supposant que le processus est attaché à une console.