关于映射模式和双缓冲的一些细节


正常使用映射模式的话会是这样

SetMapMode( hDC, MM_ANISOTROPIC );
SetViewportExtEx( hDC, 1, 1, NULL );
SetWindowExtEx( hDC, 1, -1, NULL );
SetViewportOrgEx( hDC, rc.right/2, rc.bottom/2, NULL );
			
::Rectangle(hDC,-20, 20, 20,-20) ;
			
SetMapMode( hDC, MM_ANISOTROPIC );
SetViewportExtEx( hDC, 1, 1, NULL );
SetWindowExtEx( hDC, 1, 1, NULL );
SetViewportOrgEx( hDC, 0, 0, NULL );

结果:

按照上面的代码运行,可以看到,矩形是全部显示在正中间,如果用到双缓冲的话会怎么样?


			::BitBlt(hdcBackBuffer, 0,0,rc.right, rc.bottom, NULL, 0,0, WHITENESS) ;

			SetMapMode( hDC, MM_ANISOTROPIC );
			SetViewportExtEx( hDC, 1, 1, NULL );
			SetWindowExtEx( hDC, 1, -1, NULL );
			SetViewportOrgEx( hDC, rc.right/2, rc.bottom/2, NULL );
			
			::Rectangle(hdcBackBuffer,-20, 20, 20,-20) ;
			
			::BitBlt(hDC, 0,0,rc.right, rc.bottom, hdcBackBuffer, 0,0, SRCCOPY) ;
			
			SetMapMode( hDC, MM_ANISOTROPIC );
			SetViewportExtEx( hDC, 1, 1, NULL );
			SetWindowExtEx( hDC, 1, 1, NULL );
			SetViewportOrgEx( hDC, 0, 0, NULL );

结果:

可以看到只显示了四分之一


为什么会只显示四分之一呢?


原因:

hdcBackBuffer对应的位图大小是有限的,在这个设备上绘制矩形时是在左上角进行的,只能画四分之一,多余的部分直接被舍弃了,当把这个设备上的图像之间SRCCOPY到hDC这个设备上时,这四分之一个矩形就被坐标映射到中间了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值