Windows GUI WM_PAINT消息一直发送的问题

    昨天折腾了一天,把Direct 11的初始化,给捣腾了一遍。本来一切看似正常,结果在用D3D设备描述表 清空背景(用的绿色),并用交换链把后台缓冲区和前台缓冲区对调以后,仍然显示的是,窗口类的背景颜色。于是,好好看了一下是不是,初始化或者绘制方面出了什么问题。自己比较了一下,发现并没有问题,和书上的程序比较了一下,模式也是基本一样的。但是书上并没出问题,无奈只能单步调试找原因了。

  调试以后,发现了一个非常奇怪的地方。

while(msg.message != WM_QUIT)
{
	// If there are Window messages then process them.
	if(PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
	{
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}
	// Otherwise, do animation/game stuff.	
	else
	{
		if( KEYDOWN(VK_ESCAPE) )
		{
			SendMessage(g_hWnd,WM_CLOSE,0,0);
			break;
		}
		DrawScreen();
	}
}


       这是,程序的主循环,单步调试的时候,每次循环都进入if中,而不会进入else中。 这让我相当的想不明白,按理说,需要每层循环中,都要有消息处理才会一直进入if中,那这个消息究竟是什么那? 通常情况下,系统不可能一直发送消息的吧? 后来,看到msg的消息ID是 0x000f去查了一下。结果发现,竟然是WM_PAINT,也就是说,这个程序不断地发送WM_PAINT消息,然后再不断地处理。后来查了一下,BAIDU才发现,原来被自己薄弱的WIN32基础给坑了。

罪魁祸首,是WM_PAINT的处理代码:

case WM_PAINT:
    return;  


      本来是不需要用到WM_PAINT的,但是,不想让WndProc空着,于是塞了个WM_PAINT和WM_DESTORY消息的处理进去。为了图方便,WM_PAINT直接就写成了上面的形式,结果就把自己坑了。果然,写程序不能做这种表面功夫啊。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值