Win32/MFC Получить прямоугольник окна из прямоугольника клиента

Я знаю, что где-то есть функция, которая примет клиентский прямоугольник и преобразует его в оконный прямоугольник для вас. Никак не могу найти/вспомнить!

Кто-нибудь знает, что это?

Он сделает что-то похожее на:

const CRect client(0, 0, 200, 200);
const CRect window = ClientRectToWindowRect(client);
SetWindowPos(...)

person Mark Ingram    schedule 26.09.2008    source источник


Ответы (5)


Вероятно, вы имеете в виду AdjustWindowRectEx(). Имейте в виду, что это предназначено для использования при создании окна — нет гарантии, что он создаст точный набор размеров окна для существующего окна; для этого используйте GetWindowRect().

person Shog9    schedule 26.09.2008

Это то, что вы ищите?

КлиентТоЭкран

http://msdn.microsoft.com/en-us/library/ms532670(VS.85).aspx

person Ken    schedule 26.09.2008
comment
Нет, это берет координаты клиента и преобразует их в координаты экрана. - person Mark Ingram; 26.09.2008
comment
Это не учитывает границы окна. У меня был тот же ответ, пока я не понял свою ошибку. - person Mark Ransom; 26.09.2008

Если вы хотите сопоставить координаты клиента с координатами окна, используйте API ClientToWindow.

Если вы хотите сопоставить координаты клиента с координатами экрана, используйте API ClientToScreen.

person jussij    schedule 29.09.2008

Для контроля репозиции используют:

RECT client;
::SetRect(&client, 0, 0, 200, 200);
::MapWindowPoints(hwndControl, ::GetParent(hwndControl), (POINT*)&client, 2);
::SetWindowPos(...)
person aMarCruz    schedule 08.01.2014

Это даст вам прямоугольник окна в координатах клиента, поэтому вы можете использовать прямоугольник (сверху, слева) в качестве смещения

CRect rectFrame;
GetWindowRect(&rectFrame);
ScreenToClient(&rectFrame);
person akovar    schedule 01.04.2021