m0_63133201 2022-10-25 12:45 采纳率: 87%
浏览 34
已结题

如何使用GetKeyState实现向右移动

这样子是不是使用GetKeyState实现向右移动


#include <windows.h>
#pragma comment(lib, "msimg32.lib")
#define KEY_RIGHT(VK_RIGHT)  (GetKeyState(VK_RIGHT) & 0x80) > 0 ? true : false;

//函数声明
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);//窗口处理函数
//变量定义
HWND hwnd;
HDC hdc, hdcmen;
BITMAP bm;
HBITMAP hbm;
PAINTSTRUCT ps;

//主函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
    //设计窗口类
    WNDCLASS wndclass = {
        CS_HREDRAW | CS_VREDRAW,
        WndProc,
        0,
        0,
        hInstance,
        LoadIcon(NULL, IDI_APPLICATION),
        LoadCursor(NULL, IDC_ARROW),
        (HBRUSH)GetStockObject(WHITE_BRUSH),
        NULL,
        TEXT("MYDEMO")
    };
    //注册窗口类
    RegisterClass(&wndclass);
    //创建窗口类
    hwnd = CreateWindow(
        TEXT("MYDEMO"),
        TEXT("MyDemo"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        NULL,
        NULL,
        hInstance,
        NULL);
    //显示窗口
    ShowWindow(hwnd, nCmdShow);
    //更新窗口
    UpdateWindow(hwnd);

    //消息循环
    MSG Msg;
    BOOL bRet;
    PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE);
    while (Msg.message != WM_QUIT)
    {
        bRet = PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE);
        if (bRet)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }

    }

    return Msg.wParam;
}


//窗口过程处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int xMonster = 400, yMonster = 400;
    const int step = 10;
    const int ssep = 5;
    switch (message)
    {
        
    case WM_KEYDOWN:
        switch (wParam) {
        case VK_LEFT:
            xMonster -= step;
            break;
        case VK_RIGHT:
            xMonster += ssep;
            break;
        }
        InvalidateRect(hwnd, NULL, true);
        return 0;
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        hdcmen = CreateCompatibleDC(hdc);
        hbm = (HBITMAP)LoadImage(
            NULL,
            TEXT("car.bmp"),
            IMAGE_BITMAP,
            0,
            0,
            LR_LOADFROMFILE);
        SelectObject(hdcmen, hbm);
        GetObject(hbm, sizeof(BITMAP), &bm);
        BitBlt(hdc, xMonster, yMonster, bm.bmWidth, bm.bmHeight, hdcmen, 0, 0, SRCCOPY);
        DeleteObject(hbm);
        DeleteDC(hdcmen);
        EndPaint(hwnd, &ps);
        return 0;

    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    }

    return DefWindowProc(hwnd, message, wParam, lParam);
}

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月3日
  • 创建了问题 10月25日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。