我写了一段用键盘控制位图显示的代码(实现人物行走),想问一下大家为什么断言调试失败。而且我的人物只能移动一次,即
onkeydown函数只被调用一次。
这是断言调试失败的地方
```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);
}
document.addEventListener('keydown', function() {
console.log('我被按下了down');
})