Индекс координат щелчка мыши начинается с 0 или с 1?

#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:

Значение основано на нуле, а не на единице