2011-05-22 9 views
10

ओएस: विंडोज 7 64 बिटएकाधिक मॉनीटर पर SetConsoleWindowInfo

दो मॉनीटर, एक चित्र में, एक परिदृश्य में। लैंडस्केप एक प्राथमिक है।

मैं SetConsoleWindowInfo का उपयोग कर एक कंसोल का आकार बदलने का प्रयास कर रहा हूं, लेकिन अगर मैं इसे आकार के आकार में आकार देता हूं और आकार बदलता हूं जो पोर्ट्रेट मॉनीटर पर फिट होगा लेकिन लैंडस्केप (प्राथमिक) मॉनिटर नहीं, तो फ़ंक्शन असफल हो जाता है, भले ही कंसोल वास्तव में पोर्ट्रेट मॉनीटर पर है।

मुझे पता है कि विंडोज़ स्क्रीन आकार को कंसोल विंडो के आयामों पर ऊपरी सीमा के रूप में उपयोग करता है। हालांकि, यह केवल प्राथमिक मॉनिटर के स्क्रीन आकार का उपयोग कर रहा है। क्या यह निर्दिष्ट करने का कोई तरीका है कि स्क्रीन के आयामों का उपयोग करने के लिए, या इससे भी बेहतर, संयुक्त डेस्कटॉप क्षेत्र को अधिकतम आयामों के रूप में उपयोग करने के लिए?

+0

अच्छा सवाल है। +1 – 0xC0000022L

+0

+1 - दस्तावेज़ इंगित करते हैं कि [GetLargestConsoleWindowSize] (http://msdn.microsoft.com/en-us/library/ms683193.aspx) फ़ंक्शन का उपयोग चीजों को निर्धारित करने के लिए किया जाता है, इस मामले में आप ' फिर एसओएल :( –

+0

तो पूरे कंसोल विंडोिंग सिस्टम को रिकोड करने के बाहर इस तरह के आसपास कोई रास्ता नहीं है? – tentonwire

उत्तर

2

निम्नलिखित मदद कर सकता है:

#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

पूरी तरह से काम करता है! – kennyzx

संबंधित मुद्दे