【发布时间】:2013-12-18 05:41:41
【问题描述】:
我定义了一些函数来使用 WM_KEYDOWN / WM_KEYUP 处理输入,但似乎只有 WM_KEYUP 可以正常工作。当使用利用 WM_KEYDOWN 的函数时,没有任何反应。 (不显示调试信息)
在我的框架对象中初始化我的输入类的实例时,我将一个指针传递给我的框架使用的 MSG 对象。 (另外我的函数中的 ESCAPE 参数与 VK_ESCAPE 相同)
这是我的代码:
//输入.cpp
bool Input::KeyPressed( Keys key )
{
if( InputMsg->message == WM_KEYDOWN )
{
if( InputMsg->wParam == key )
return true;
}
return false;
}
bool Input::KeyReleased( Keys key )
{
if( InputMsg->message == WM_KEYUP )
{
if( InputMsg->wParam == key )
return true;
}
return false;
}
//Framework.cpp
bool Framework::Frame()
{
ProcessInput();
return true;
}
void Framework::ProcessInput()
{
if( m_Input->KeyPressed( ESCAPE ) )
{
OutputDebugString("Escape was pressed!\n");
}
}
有人知道为什么只有 KeyReleased() 函数有效,而 KeyPressed() 无效吗?
提前致谢
【问题讨论】:
-
Frame()什么时候被调用?InputMsg何时/何地被定义? -
@JonathanPotter
Frame()在我的Run()函数中被调用,这是一个 while 循环:while( msg.message != WM_QUIT && m_result) { if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } else { m_result = Frame(); } }。当我初始化我的输入对象时,我将一个指针传递给我在我的框架类中创建的一个 MSG 对象,这样它就变成了InputMsg(这个初始化也在框架对象内完成)。我的while()循环与来自 Framwework 的 MSG 对象一起使用 -
我认为我们需要查看更多代码。你的窗口程序在做什么?
-
@JonathanPotter 我在第一个答案中添加了指向源代码的链接
标签: c++ winapi message-queue