【问题标题】:SetConsoleWindowInfo on Multiple monitors多个监视器上的 SetConsoleWindowInfo
【发布时间】:2011-05-22 01:40:41
【问题描述】:

操作系统:Windows 7 64 位

两台显示器,一台纵向,一台横向。风景一是主要的。

我正在尝试使用 SetConsoleWindowInfo 调整控制台的大小,但如果我尝试将其调整为适合纵向显示器而非横向(主)显示器的大小,即使控制台也无法返回该函数实际上是在纵向监视器上。

我知道 Windows 使用屏幕尺寸作为控制台窗口尺寸的上限。但是,它仅使用主监视器的屏幕尺寸。有没有办法指定使用哪个屏幕的尺寸,或者更好的是,让它使用组合的桌面区域作为最大尺寸?

【问题讨论】:

  • +1 -- 文档似乎表明 GetLargestConsoleWindowSize 函数用于确定事物,在这种情况下你是 SOL。 :(
  • 所以除了重新编码整个控制台窗口系统之外就没有其他办法了吗?

标签: c++ windows multiple-monitors


【解决方案1】:

以下可能会有所帮助:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多