c++ - 我可以让 MoveWindow 使用 Windows 10 中的屏幕坐标吗? C++

标签 c++ winapi windows-10

我编写了一个简单的实用程序,可让您通过键入新的所需窗口宽度、高度和左上角来移动屏幕上的任何窗口和/或调整其大小。它在 100% 缩放时效果很好,但当我更改缩放比例时它会失败。

例如,在我的 4k 显示器上,我设置了 150% 缩放。 MoveWindow 将我的 3840x2160 显示器视为 2560x1440 显示器。当我告诉一个窗口移动到(1280,0)时,它会将左上角移动到屏幕的顶部中心。当我输入 (1920,0) 时,我希望我的程序能够做到这一点。问题是我仍然可以将窗口物理移动到屏幕上的每个像素。 MoveWindow 只是无法访问中间的额外像素。

我可以做些什么来强制MoveWindow忽略缩放值吗?

最佳答案

正如 IInspectable 之前所说,该程序在 Windows 7 上确实失败了,直到我进行了以下更改。到目前为止,这似乎在 Windows 7 到 10 上运行良好。

    if (IsWindows8Point1OrGreater())
    {
        HINSTANCE hinstLib;
        MYPROC ProcAdd;
        BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

        hinstLib = LoadLibrary(TEXT("SHCore.dll"));

        if (hinstLib != NULL)
        {
            ProcAdd = (MYPROC)GetProcAddress(hinstLib, "SetProcessDpiAwareness");

            if (NULL != ProcAdd)
            {
                fRunTimeLinkSuccess = TRUE;
                HRESULT ejHR = (ProcAdd)(PROCESS_PER_MONITOR_DPI_AWARE);
            }

            fFreeResult = FreeLibrary(hinstLib);
        }

        if (!fRunTimeLinkSuccess)
        {
            SetProcessDPIAware();
        }
    }
    else if (IsWindowsVistaOrGreater())
    {
        SetProcessDPIAware();
    }

关于c++ - 我可以让 MoveWindow 使用 Windows 10 中的屏幕坐标吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102688/

相关文章:

c++ - 如何在控制台窗口中找到光标的坐标?

c++ - ShowWindow() 立即隐藏 SW_HIDE 窗口,没有效果

linux - Chef 厨房无法从 Windows 10 集成 bash 工作

windows-10 - WSL2 使用 "localhost"访问 Windows 服务

C++:无法使用 Mini-XML 从 XML 文件加载长字符串

c++ - 如何在 C++ 中设置大小并将映射初始化为零

c++ - SIMD 减少 4 个 vector 而没有 hadd

c++ - 如何使用 Win32 API 创建多个窗口

c# - 我的线程在就绪队列中吗?

keyboard - 如何在不按shift键的情况下使用键盘上的特殊字符?