有关directinput的问题

antiMight 2012-02-21 12:16:40
我刚学directx,接触到键盘编程,遇到如下问题。真心求解答
void Game_Run(HWND hwnd)
{
if(!d3ddev) return;
char keys[256];
dinputdev->GetDeviceState(sizeof(keys),(LPVOID)&keys);
if(keys[DIK_ESCAPE] & 0x80)
PostMessage(hwnd,WM_DESTROY,0,0);
if(keys[DIK_LEFT] & 0x80)
MessageBox(hwnd,"left key is pressed","test",MB_OK);
if(keys[DIK_RIGHT] & 0x80)
MessageBox(hwnd,"right key is pressed","test",MB_OK);
if(keys[DIK_UP] & 0x80)
MessageBox(hwnd,"up key is pressed","test",MB_OK);
if(keys[DIK_DOWN] & 0x80)
MessageBox(hwnd,"down key is pressed","test",MB_OK);

winmain中消息循环是这样的
MSG message;
while(!gameover)
{
if(PeekMessage(&message,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
Game_Run(window);
}
Game_End(window);
return message.wParam;
问题是,我运行后,一按方向键,点确定就弹出程序,不应该这样吧?不是应该继续运行才对吗?
...全文
110 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
antiMight 2012-02-24
  • 打赏
  • 举报
回复
是这样的,messagebox弹窗导致程序丢失对键盘设备控制权,需要再次获取
HRESULT result = inputdev->>GetDeviceState(sizeof(keys),(LPVOID)&keys);
if(result == DIERR_INPUTLOST)
       {
        result= inputdev->Acquire(); // 试图重新取回设备
        if FAILED(result)
        {
         return false; // 失败
        }
       }
wmyfc 2012-02-23
  • 打赏
  • 举报
回复
确实不知道

18,141

社区成员

发帖
与我相关
我的任务
社区描述
Windows客户端使用相关问题交流社区
社区管理员
  • Windows客户端使用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧