对于windows编程不是很熟悉,说错了大家帮忙纠正,呵呵。
DX9的例子中创建了一个Window,然后进入以下的一个循环。
这些代码来自DX9的sdk,我稍微改动了一下,让大家看起来简单些:
bool bGotMsg;
MSG msg;
msg.message = WM_NULL;
PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ); while( WM_QUIT != msg.message )
{
bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 ); if( bGotMsg )
{
if( m_hWnd == NULL )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{
Render3DEnvironment();
}
}一般说来,Render3DEnvironment();总是能够循环执行的,但是在程序窗口处理一些响应的时候就被block了,比如:右键按住caption,弹出sysmenu,按下alt,按下f10等等。我估计,在peekmessage调用defwndproc后就在停在里面了该死的windows机制,
现在我的解决方法很丑陋:把各种相关的消息拦截,自己做处理,太丑陋了
想用多线程吧,还是很害怕的,没有做过。
也别告诉我自己去画caption什么的提议,烦。有没有高手能够帮忙说个漂亮的解决方法?
DX9的例子中创建了一个Window,然后进入以下的一个循环。
这些代码来自DX9的sdk,我稍微改动了一下,让大家看起来简单些:
bool bGotMsg;
MSG msg;
msg.message = WM_NULL;
PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ); while( WM_QUIT != msg.message )
{
bGotMsg = ( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) != 0 ); if( bGotMsg )
{
if( m_hWnd == NULL )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{
Render3DEnvironment();
}
}一般说来,Render3DEnvironment();总是能够循环执行的,但是在程序窗口处理一些响应的时候就被block了,比如:右键按住caption,弹出sysmenu,按下alt,按下f10等等。我估计,在peekmessage调用defwndproc后就在停在里面了该死的windows机制,
现在我的解决方法很丑陋:把各种相关的消息拦截,自己做处理,太丑陋了
想用多线程吧,还是很害怕的,没有做过。
也别告诉我自己去画caption什么的提议,烦。有没有高手能够帮忙说个漂亮的解决方法?
解决方案 »
- MFC对话框程序怎么显示通过TCP传输过来的视频啊
- 具有WMI操作的代码在用户登录成功后立刻执行,获取信息不准
- 父窗口拖动,子窗口抖动且刷新闪烁问题
- 编程--断开U盘
- 如何缩小GIF动态图,并保存为文件。
- 求教根据两点经纬度得到球面距离算法
- 在 release 方式下,map文件有用吗?
- 在 VC.NET 用ATL 7。0写COM+组建时怎样传递SAFEARRAY数组? 参数该怎么定义?
- 对象的静态类型和动态类型具体怎么 样来定义 ?
- 请问atl中有下拉框的吗?
- 请问谁有<<Visual C++ 6.0数据库开发技术与工程实践>>这本书的电子版呢?
- 如何在基于对话框的MFC,程序中动态建一个窗口?
//{
Render3DEnvironment();
//}不管有没有消息都……
另外你那个 m_hWnd == NULL 是什么意思? 是写错了吧
if( hAccel == NULL || m_hWnd == NULL ||
0 == TranslateAccelerator( m_hWnd, hAccel, &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
让大家误会了,不好意思
说真的,我对于这个写法也不是很理解,谁能帮忙解释一下?我先去查查msdn
一般在erasebkground之后会调用paint的。