处理键盘输入使用windows消息和directx 9
Handling keyboard input using windows messages and directx 9
我到处读到使用windows消息比DirectInput更可取。尽管如此,有很多DirectInput教程,几乎没有处理Windows消息传递中的键盘。在没有找到任何好的来源之后,我开始自己尝试。
我创建了两个256个成员的bool数组来保存按下的键。我想这样做,以便我可以查看m_bKeyDown[256],看看是否有一个键被按下这一帧,和m_bKeyDown,看看它被按下,但没有按下这一帧。我的MsgProc开关语句如下:
LRESULT D3DApp::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_KEYDOWN:
if(m_bKeyPressed[wParam])
m_bKeyDown[wParam] = false;
else
m_bKeyDown[wParam] = true;
break;
m_bKeyPressed[wParam] = true;
case WM_KEYUP:
m_bKeyDown[wParam] = false;
m_bKeyPressed[wParam] = false;
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
我通过让它在我按住F1键时发出声音来测试它。理想情况下,声音不应该重复,直到我释放按钮并再次按下它:
if(m_bKeyDown[VK_F1])
m_fMod.FPlaySound(testSound);
似乎没有区别,虽然,声音重复当我按下按钮。我如何修复循环或设置Windows消息传递来做到这一点?我是走在正确的轨道上,还是应该走完全不同的方向?
编辑:我使用iedoc的下面的例子,现在它做得更好,但声音仍然播放三次前停止,就像有一个延迟出于某种原因。知道怎么避免这种情况吗?
try this:
LRESULT D3DApp::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch(msg){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_KEYDOWN:
if(!m_bKeyPressed[wParam])
{
m_bKeyDown[wParam] = true;
m_bKeyPressed[wParam] = true;
}
else
m_bKeyDown[wParam] = false;
break;
case WM_KEYUP:
m_bKeyDown[wParam] = false;
m_bKeyPressed[wParam] = false;
break;
}
return DefWindowProc(hwnd, msg, wParam, lParam);
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 如何在directx/c++中进行平移/缩放操作
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- Directx 11 - CompileFromFile() is not compiling
- 处理键盘输入使用windows消息和directx 9