dyibcyijv 2023-05-28 17:37 采纳率: 0%
浏览 18

mfc为什么断言调试失败?

我写了一段用键盘控制位图显示的代码(实现人物行走),想问一下大家为什么断言调试失败。而且我的人物只能移动一次,即
onkeydown函数只被调用一次。
这是断言调试失败的地方

img


这是相关代码:


```c++
//定义人物,画人物
void Game::RolePaint()
{
    
    HDC hDC = ::GetDC(this->m_hWnd);
    HBITMAP hBmp = (HBITMAP)::LoadImage(::GetModuleHandle(NULL), (LPCWSTR)IDB_BITMAP7, IMAGE_BITMAP, 0, 0, NULL);
    HDC hMDC = ::CreateCompatibleDC(hDC);
    ::SelectObject(hMDC, hBmp);
    //Tran函数
    //绘制位置第二三个参数,显示大小为第四五个参数,
    ::TransparentBlt(hDC, Posx, Posy,40 ,60, hMDC, 0, 0, 40, 60, RGB(255, 255, 255));
    ::DeleteDC(hMDC);
    ::ReleaseDC(this->m_hWnd, hDC);
    
}

//画背景
void Game::PaintBG()
{
    CDC* cDC = this->GetDC();   //获得当前窗口的DC   
    GetClientRect(&m_client);   //获得窗口的尺寸
    m_bgcDC.CreateCompatibleDC(NULL);
    m_bgBitmap.LoadBitmap(IDB_BITMAP3);
    m_bgcDC.SelectObject(&m_bgBitmap);//将图放在内存DC中
    cDC->BitBlt(0, 0, m_client.Width(), m_client.Height(), &m_bgcDC, 0, 0, SRCCOPY);
    ReleaseDC(cDC);           //释放DC   
}
//为了调用Keydown函数
BOOL Game::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 在此添加专用代码和/或调用基类
    SendMessage(pMsg->message, pMsg->wParam, pMsg->lParam);
    return 0;
    //return CDialog::PreTranslateMessage(pMsg);
}




//人物移动
void Game::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    switch (nChar)
    {
    case'd':
    case'D':
    {  
    Posx =Posx+ 10;
    PaintBG();
        RolePaint();
        
    }
    case'a':
    case'A':
    {
        Posx = Posx-10;
        PaintBG();
        RolePaint();

    }
    case'w':
    case'W':
    {
        Posy = Posy+ 10;
        PaintBG();
        RolePaint();

    }
    case's':
    case'S':
    {
        Posy=Posy- 10;
        PaintBG();
        RolePaint();

    }
    }
    CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-28 23:24
    关注
    • 这篇博客: 18.常见鼠标和键盘事件以及事件对象中的 2. onkeydown  按键按下时候触发 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    •         document.addEventListener('keydown', function() {

                      console.log('我被按下了down');

                  })

    评论

报告相同问题?

问题事件

  • 创建了问题 5月28日

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记