代码之家  ›  专栏  ›  技术社区  ›  Jamie Keeling

扩展鼠标单击事件-c

  •  2
  • Jamie Keeling  · 技术社区  · 14 年前

    目前我正在检测鼠标单击的X和Y位置,将其存储在 并通过消息框显示。

    如果按下另一个键盘键(如shift或control按钮),我希望能够阅读。

    查看msdn,我发现以下信息:

    wParam指示 虚拟密钥已关闭。这个参数 可以是以下一个或多个 价值观。

    mk_control,ctrl键关闭。

    鼠标中键是 下来。

    鼠标右键是 下来。

    mk ou shift键按下。

    mk_xButton1 Windows 2000/xp:第一个 X按钮关闭。

    mk_xbutton2 Windows 2000/xp: 第二个X按钮关闭。

    我面临的问题是,我不确定如何存储每个参数的wParam结果,并像必须通过消息框显示结果一样使用它们。

    以下是我目前的进展:

    LRESULT CALLBACK WindowFunc(HWND hMainWindow, UINT message,
        WPARAM wParam, LPARAM lParam)
    {
     POINTS mouseXY;
     WCHAR buffer[256];
    
        // Act on current message
        switch(message)    
        {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
     case WM_LBUTTONUP:
      // Get mouse x, y
      mouseXY = MAKEPOINTS(lParam);
    
      // Output the co-ordinates
      swprintf(buffer, 255, L"x = %d, y = %d", mouseXY.x, mouseXY.y);
      MessageBox(0, buffer, L"Mouse Position", MB_OK);
      break;
        default:
            return DefWindowProc(hMainWindow, message, wParam, lParam);
        }
        return 0;
    }
    

    谢谢你的帮助

    2 回复  |  直到 14 年前
        1
  •  1
  •   gclj5    14 年前

    不同的虚拟密钥在 wParam . 要检查单个值,必须将其取出(考虑基本的位操作)。

    例子:

    swprintf(buffer, 255, L"x = %d, y = %d, Shift = %s, Ctrl = %s",
             mouseXY.x, mouseXY.y,
             wParam & MK_SHIFT ? L"yes" : L"no",
             wParam & MK_CONTROL ? L"yes" : L"no");
    
        2
  •  1
  •   Ryan    14 年前

    GetAsyncKeyState

    SHORT lshift = GetAsyncKeyState(VK_LSHIFT);
    SHORT rshift = GetAsyncKeyState(VK_RSHIFT);
    // etc...
    

    Here

    GetKeyboardState

    BYTE keyboardState[256];
    GetKeyboardState(keyboardState);