2011-05-22 9 views
10

SO: Windows 7 64bitSetConsoleWindowInfo en varios monitores

Dos monitores, uno en el retrato, uno en el paisaje. El paisaje uno es primario.

Estoy tratando de cambiar el tamaño de una consola utilizando SetConsoleWindowInfo, pero si trato de redimensionarlo a un tamaño que se ajuste al monitor vertical pero no al monitor horizontal (primario), la función regresa como fallida, aunque el la consola está realmente en el monitor de retrato.

Sé que Windows usa el tamaño de la pantalla como un límite superior en las dimensiones de la ventana de la consola. Sin embargo, solo está usando el tamaño de pantalla del monitor principal. ¿Hay alguna manera de especificar qué dimensiones de la pantalla usar, o mejor aún, hacer que use el área de escritorio combinada como las dimensiones máximas?

+0

Niza cuestión. +1 – 0xC0000022L

+0

+1 - Los documentos parecen indicar que la función [GetLargestConsoleWindowSize] (http://msdn.microsoft.com/en-us/library/ms683193.aspx) se usa para determinar cosas, en cuyo caso ' re SOL. :( –

+0

así que no hay forma de evitar esto recodificar todo el sistema de ventanas de la consola? – tentonwire

Respuesta

2

El siguiente podría ayudar:

#include "windows.h" 
#include <conio.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    bool hasSecondary = false; 
    POINT secondaryPosition; 
    POINT secondarySize; 
    POINT primarySize; 
    { 
     DISPLAY_DEVICE displayDevice; 
     displayDevice.cb = sizeof(DISPLAY_DEVICE); 

     DEVMODE deviceMode; 
     ZeroMemory(&deviceMode, sizeof(DEVMODE)); 
     deviceMode.dmSize = sizeof(DEVMODE); 

     int i = 0; 
     while(::EnumDisplayDevices(NULL, i++, &displayDevice, 0)) 
     { 
      if(displayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP && 
       !(displayDevice.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER)) 
      { 
       if(EnumDisplaySettingsEx(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &deviceMode, 0) == FALSE) 
        EnumDisplaySettingsEx(displayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &deviceMode, 0); 
       if(deviceMode.dmPosition.x != 0 || deviceMode.dmPosition.y != 0) 
       { 
        hasSecondary = true; 
        secondaryPosition.x = deviceMode.dmPosition.x; 
        secondaryPosition.y = deviceMode.dmPosition.y; 
        secondarySize.x = deviceMode.dmPelsWidth; 
        secondarySize.y = deviceMode.dmPelsHeight; 
       } 
       else 
       { 
        primarySize.x = deviceMode.dmPelsWidth; 
        primarySize.y = deviceMode.dmPelsHeight; 
       } 
      } 
     } 
    } 

    MoveWindow(GetConsoleWindow(), 
     secondaryPosition.x, secondaryPosition.y, 
     secondarySize.x, secondarySize.y, 
     TRUE); 

    _getch(); 

    return 0; 
} 
+0

funciona a la perfección! – kennyzx

Cuestiones relacionadas