windows C++ 窗口程序在扩展屏显示

typedef BOOL (__stdcall * pEnumDiaplayDevices)
(
    LPCTSTR lpDevice,                // device name
    DWORD iDevNum,                   // display device
    PDISPLAY_DEVICE lpDisplayDevice, // device information
    DWORD dwFlags                    // reserved
);

bool GetScreenRect(int ScreenNo, RECT *rect)
{
    pEnumDiaplayDevices xenum;
    DISPLAY_DEVICE hDisplayDevice;
    ZeroMemory(&hDisplayDevice, sizeof(hDisplayDevice));
    hDisplayDevice.cb = sizeof(hDisplayDevice);
    HMODULE hModule = LoadLibrary(L"user32.dll");
    if(hModule){
        xenum = ( pEnumDiaplayDevices )GetProcAddress(hModule, "EnumDisplayDevicesW");
    }
    if(!xenum){
        FreeLibrary(hModule);
        return false;
    }

    BOOL flag = xenum( NULL, ScreenNo, &hDisplayDevice, 0);
    if(!flag){
        FreeLibrary(hModule);
        return false;
    }


    DEVMODE DeviceMode;
    ZeroMemory(&DeviceMode, sizeof(DeviceMode));
    DeviceMode.dmSize = sizeof(DeviceMode);
    flag = EnumDisplaySettings(hDisplayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &DeviceMode);
    rect->left = DeviceMode.dmPosition.x;
    rect->top = DeviceMode.dmPosition.y;
    rect->right = DeviceMode.dmPelsWidth;
    rect->bottom = DeviceMode.dmPelsHeight;

    FreeLibrary(hModule);
    return true;
}

调用:

RECT rec;
        int result = GetScreenRect(1, &rec);
        MoveWindow((HWND)winId(), rec.left, 0, rec.right, rec.bottom,true );

猜你喜欢

转载自blog.csdn.net/sz76211822/article/details/81289356