2013-03-31 3 views
2

Краткий вопрос, как получить координаты клиентской области окна относительно экрана? Я думал о GetClientRect + ClientToScreen функция будет работать? И еще один. В окне браузера что такое ClientRect? Только прямоугольник с изображенным в нем документом HTML, или он включает в себя полосы браузера и всплывающие меню, которые могут уменьшить размер для HTML doc?Координаты кликов на экране

Совершен это так:

HWND hWnd; 
RECT rc; 
if(GetClientRect(hWnd, &rc)) // get client coords 
{ 
MapWindowPoints(hWnd, NULL, reinterpret_cast<POINT*>(&rc), 2); //converts rect rc points 
return rc.top; 
} 

Но печально то клиент прямоугольник браузера включает в себя все это меню браузера всплывающего и барин, поэтому не может быть использован для определения точных координат браузеров HTML документа пространство. Если у кого-нибудь есть предложения, как это можно сделать, попробуйте это с удовольствием.

+2

Пожалуйста, не изменяйте свой вопрос. Это аннулирует ответы на ваши предыдущие вопросы, и кто-то, кто хотел задать ваш оригинальный вопрос, не сможет найти ответ, так как название больше не совпадает. –

ответ

8

Да, вы можете сделать это с помощью функции ClientToScreen:

RECT rc; 
GetClientRect(hWnd, &rc); // get client coords 
ClientToScreen(hWnd, reinterpret_cast<POINT*>(&rc.left)); // convert top-left 
ClientToScreen(hWnd, reinterpret_cast<POINT*>(&rc.right)); // convert bottom-right 

Что такое «клиент» прямоугольник в браузере зависит от реализации браузера. Вы можете использовать Spy ++, чтобы открыть это для себя.

+0

Sup, спасибо) –

+2

Обратите внимание, что возвращает недопустимый прямоугольник в RTL-системах. Лучше использовать 'MapWindowPoints' с длиной 2. –

+1

Стек вокруг переменной' rc' был поврежден, кажется, что вы правы, теперь попробуйте «MapWindowPoints» –

-1
POINT origin; 
origin.x = 0; 
origin.y = 0; 
ClientToScreen(hWnd, &origin); 

В настоящее время origin находится в экранных координатах в верхнем левом углу клиентской области.

Чтобы преобразовать (x, y) из координаты клиентской зоны в экранные координаты, добавьте origin. Чтобы сделать обратное, вычтите.

+0

Как указал г-н Раймонд Чен, этот фрагмент вызывает проблемы с системами RTL, поэтому, пожалуйста, не используйте это. – user2120666

+0

Если RTL означает справа налево, у ScreenToClient могут быть проблемы (https://msdn.microsoft.com/en-us/library/windows/desktop/dd162952(v=vs.85).aspx), но документы для ClientToScreen don Я говорю об этом. –

Смежные вопросы