Я пытался получить высоту строки заголовка определенного окна на Windows
. Вы можете скопировать его с Notepad
. Я использую C++
, и ни один из кодов, которые я нашел в Интернете, не дал правильного результата. Используя, например, Screenpresso
Я измерил 31
пикселей для высоты моей оконной панели.
Я попробовал следующие функции:
TitleBarHeight.h
:
#pragma once
#include <windows.h>
inline int get_title_bar_thickness_1(const HWND window_handle)
{
RECT window_rectangle, client_rectangle;
GetWindowRect(window_handle, &window_rectangle);
GetClientRect(window_handle, &client_rectangle);
return window_rectangle.bottom - window_rectangle.top -
(client_rectangle.bottom - client_rectangle.top);
}
inline int get_title_bar_thickness_2(const HWND window_handle)
{
RECT window_rectangle, client_rectangle;
GetWindowRect(window_handle, &window_rectangle);
GetClientRect(window_handle, &client_rectangle);
return (window_rectangle.right - window_rectangle.left - client_rectangle.right) / 2;
}
Результаты:
auto window_handle = FindWindow("Notepad", nullptr);
auto a = get_title_bar_thickness_1(window_handle); // 59
auto b = get_title_bar_thickness_2(window_handle); // 8
auto c = GetSystemMetrics(SM_CXSIZEFRAME); // 4
auto d = GetSystemMetrics(SM_CYCAPTION); // 23
Получение системных показателей с помощью GetSystemMetrics()
не работает, поскольку окна могут иметь разную высоту заголовка, и аргумент для дескриптора окна отсутствует.
Как я могу действительно получить результат 31
?