#c #windows #winapi #screen #resolution
#c #Windows #winapi #экран #разрешение
Вопрос:
В Win32 координаты, возвращаемые вызовами GET_X_PARAM и GET_Y_PARAM, начинаются с 0 или с 1? Если у меня есть экран с разрешением 640X480, то какие значения я получаю? Они от 0 до 639 и от 0 до 479? Или от 1 до 640 и от 1 до 480?
extern "C" LRESULT CALLBACK WindowProc (HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
Switch(message)
{
case WM_MOUSEMOVE:
iXPosition = GET_X_LPARAM(lParam);
iYPosition = GET_Y_LPARAM(lParam);
}
}
Ответ №1:
Для WM_MOUSEMOVE координаты относятся к клиентской области окна, а не к экрану — см. MSDN . Учитывая это, точки начинаются с 0,0 для верхнего левого угла клиентской области окна.
Также обратите внимание, что если вы используете API, который возвращает координаты мыши на экране, например GetCursorPos , вы можете получить отрицательные значения обратно в системе с несколькими мониторами: 0,0 — это верхний левый угол основного монитора, над которым может быть установлен дополнительный монитор или слева от него; так чтофактический рабочий стол может «начинаться» с отрицательного или другого значения, отличного от 0,0. (Например, GetSystemMetrics(SM_XVIRTUALSCREEN) вернет левый край.)
Ответ №2:
Значение основано на нуле, а не на единице