case WM_LBUTTONDOWN:
{
    // 获取鼠标 X、Y 坐标
    int x = LOWORD(lParam);  // 水平坐标
    int y = HIWORD(lParam);  // 垂直坐标

    MessageBox(hWnd, "左键按下", "鼠标", 0);

    break;
}
case WM_RBUTTONDOWN:
{
    int x = LOWORD(lParam);
    int y = HIWORD(lParam);
    MessageBox(hWnd, "右键按下", "鼠标", 0);
    break;
}
case WM_KEYDOWN:
{
    // wParam 就是 按键的虚拟键码
    int key = wParam;

    // 判断按了什么键
    if (key == VK_UP)    MessageBox(hWnd, "上箭头", "键盘", 0);
    if (key == VK_DOWN)  MessageBox(hWnd, "下箭头", "键盘", 0);
    if (key == VK_LEFT)  MessageBox(hWnd, "左箭头", "键盘", 0);
    if (key == VK_RIGHT) MessageBox(hWnd, "右箭头", "键盘", 0);
    if (key == 'A')      MessageBox(hWnd, "按了A", "键盘", 0);
    if (key == 'W')      MessageBox(hWnd, "按了W", "键盘", 0);
    if (key == VK_SPACE) MessageBox(hWnd, "空格", "键盘", 0);

    break;
}
case WM_MOUSEMOVE:
{
    int x = LOWORD(lParam);
    int y = HIWORD(lParam);
    // 鼠标一直在动,这里可以实时获取坐标
    break;
}
// 窗口消息回调函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        // 窗口创建
        case WM_CREATE:
            break;

        //----------------------
        // 键盘按下
        //----------------------
        case WM_KEYDOWN:
        {
            int key = wParam;

            if (key == VK_UP)    MessageBox(hWnd, "上", "键", 0);
            if (key == VK_DOWN)  MessageBox(hWnd, "下", "键", 0);
            if (key == VK_LEFT)  MessageBox(hWnd, "左", "键", 0);
            if (key == VK_RIGHT) MessageBox(hWnd, "右", "键", 0);
            if (key == 'A')      MessageBox(hWnd, "A", "键", 0);
            if (key == 'W')      MessageBox(hWnd, "W", "键", 0);

            break;
        }

        //----------------------
        // 鼠标左键
        //----------------------
        case WM_LBUTTONDOWN:
        {
            int x = LOWORD(lParam);
            int y = HIWORD(lParam);
            MessageBox(hWnd, "左键点击", "鼠标", 0);
            break;
        }

        //----------------------
        // 鼠标右键
        //----------------------
        case WM_RBUTTONDOWN:
        {
            int x = LOWORD(lParam);
            int y = HIWORD(lParam);
            MessageBox(hWnd, "右键点击", "鼠标", 0);
            break;
        }

        //----------------------
        // 鼠标移动
        //----------------------
        case WM_MOUSEMOVE:
        {
            int x = LOWORD(lParam);
            int y = HIWORD(lParam);
            // 实时坐标
            break;
        }

        // 窗口关闭
        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    return 0;
}