这个代码有没有达到第一个的原因?我从vairous来源得到了完全相同的东西.比我做了自己的封装.一切都很顺利.创建窗口,处理消息,生成事件到客户区域中的keyborad输入,gl画布工作正常(当我强制它绘制时).
唯一的问题是消息循环永远不会离开第一个if.:/我真的被卡住了.
while (!done)
{
if (::PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
{
done = TRUE;
}
else
{
::TranslateMessage (&msg);
::DispatchMessage (&msg);
}
}
else
{
// Code is never reaching this!
draw ();
::SwapBuffers(hDC);
idle ();
}
}
return msg.wParam;
Run Code Online (Sandbox Code Playgroud)
在您的情况下,消息队列绝不能为空 - 为什么?那么这取决于你的程序的其余部分在做什么.一些可能性:
您的代码以一种使队列不为空的方式将新消息发布到队列.我建议在处理消息时注销消息ID.
你没有处理绘制消息 - 来自msdn:"PeekMessage函数通常不会从队列中删除WM_PAINT消息.WM_PAINT消息在处理之前一直保留在队列中.但是,如果WM_PAINT消息有一个NULL更新区域,PeekMessage会将其从队列中删除."
希望这可以帮助.
[编辑]要处理WM_PAINT,请调用BeginPaint和EndPaint或转发到DefWindowProc
| 归档时间: |
|
| 查看次数: |
2619 次 |
| 最近记录: |