在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);
}
}
答案 0 :(得分:5)
对于WM_MOUSEMOVE,坐标是相对于窗口的客户区,而不是屏幕 - 请参阅MSDN。鉴于此,窗口客户区左上角的点开始于0,0。
另请注意,如果使用返回基于屏幕的鼠标坐标的API(如GetCursorPos),则可以在多监视器系统上获得负值:0,0是主监视器的左上角,可以在其上方或左侧设置辅助监视器;所以实际桌面可能会以负值或其他非0,0值“开始”。 (例如,GetSystemMetrics(SM_XVIRTUALSCREEN)将返回左边缘。)
答案 1 :(得分:3)
该值从零开始,而不是基于一个