Я хочу получить (точные) экранные X
и Y
координаты окна ( клиентская область ).Моя проблема в том, что мне нужно определить горизонтальный сдвиг, который нужно добавить к координате 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 пикселей).Есть ли способ убедиться, что это горизонтальное смещение учитывается автоматически?Это может быть связано с ноутбуками, так как сделать так, чтобы он вел себя так, как ожидалось?