从鼠标位置计算索引

时间:2013-01-16 22:43:20

标签: c winapi

我有这个棋盘(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;

1 个答案:

答案 0 :(得分:1)

阅读本文:http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607(v=vs.85).aspx

建议您不要使用LOWORDHIWORD宏来提取光标位置。

如果您的系统有多个监视器,则坐标可能是负数,并且这些宏将无法处理它。相反,请使用GET_X_LPARAMGET_Y_LPARAM