我有这个棋盘(0,0在左上角):
并且假设一个块是LABEL_SIZE的高度和宽度。 并且让我们说红色和蓝色点是鼠标点击。 我有一个2维数组的电路板,我想访问该单元格 我用鼠标点击的地方(蓝色或红色圆点)。所以它看起来就像是简单的逻辑 计算ptCursor.x / LABEL_SIZE以访问该列,并将ptCursor.y / LABEL_SIZE访问该行。但是当我尝试这个时,它会向另一个小区(就像数英里之外)寻址。
出了什么问题?
#define LABEL_SIZE 40
#define XLOCATION ptCursor.x / LABEL_SIZE
#define YLOCATION ptCursor.y / LABEL_SIZE
case WM_LBUTTONDOWN:
ptCursor.x = LOWORD(lParam);
ptCursor.y = HIWORD(lParam);
return 0;
case WM_KEYDOWN:
if (wParam >= VK_NUMPAD0 && wParam <= VK_NUMPAD9)
{
wsprintf(szWndText, szFormat, wParam - VK_NUMPAD0);
SetWindowText(hwndLabels[XLOCATION][YLOCATION],
szWndText);
}
return 0;
答案 0 :(得分:1)
阅读本文:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx
建议您不要使用LOWORD
和HIWORD
宏来提取光标位置。
如果您的系统有多个监视器,则坐标可能是负数,并且这些宏将无法处理它。相反,请使用GET_X_LPARAM
和GET_Y_LPARAM
。