gpt4 book ai didi

c++ - window : Window position X coordinate not accurate

转载 作者:行者123 更新时间:2023-11-28 01:20:22 25 4
gpt4 key购买 nike

我想获取窗口 (the client area) 的(准确的)屏幕上 XY 坐标。我的问题是我必须定义一个水平移动,它必须添加到 X 坐标上才能获得正确的结果:

#include <windows.h>

inline int get_title_bar_thickness(const HWND window_handle)
{
RECT window_rectangle, client_rectangle;
GetWindowRect(window_handle, &window_rectangle);
GetClientRect(window_handle, &client_rectangle);
const int height = window_rectangle.bottom - window_rectangle.top -
(client_rectangle.bottom - client_rectangle.top);
const int width = window_rectangle.right - window_rectangle.left -
(client_rectangle.right - client_rectangle.left);
return height - width / 2;
}

#define HORIZONTAL_SHIFT 8

/**
* Gets the window position of the window handle
* excluding the title bar and populates the x and y coordinates
*/
inline void get_window_position(const HWND window_handle, int* x, int* y)
{
RECT rectangle;
const auto window_rectangle = GetWindowRect(window_handle, &rectangle);
const auto title_bar_thickness = get_title_bar_thickness(window_handle);
if (window_rectangle)
{
*x = rectangle.left + HORIZONTAL_SHIFT;
*y = rectangle.top + title_bar_thickness;
}
}

可以通过以编程方式移动窗口来观察问题:

const auto window_handle = FindWindow(nullptr, "Command Prompt");
SetWindowPos(window_handle, nullptr, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);

我希望这个 SetWindowPos() 调用能够将窗口完美地放置在屏幕的左上角,但窗口和屏幕边框之间留有一些空间(恰好 8 像素)。有没有办法确保自动考虑这种水平偏移?这可能与笔记本电脑有关,那么如何使其按预期运行?

最佳答案

正如 Castorix 评论的那样, 可以检索水平位移。

#include <dwmapi.h>

#pragma comment(lib, "dwmapi.lib")

inline int get_horizontal_shift(const HWND window_handle)
{
RECT window_rectangle, frame_rectangle;
GetWindowRect(window_handle, &window_rectangle);
DwmGetWindowAttribute(window_handle,
DWMWA_EXTENDED_FRAME_BOUNDS, &frame_rectangle, sizeof(RECT));

return frame_rectangle.left - window_rectangle.left;
}

代码基于this邮政。在我的机器上返回值为 7

关于c++ - window : Window position X coordinate not accurate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com