小弟有三个问题:问题一:就是如何不用双缓冲绘图,贴图BMP的时候一般不都是先CDC dcmem这种双缓冲方式。但是我现在只要求速度,能接受闪一下,突然发现,非爽缓冲的贴图方式不会了求解答。问题二:通过GetDC(NULL)可以获得全屏DC,然后可以全屏贴图,但是当我想更换另外一张图时,是覆盖在原图上面的,并且只要你不覆盖贴图的地方,那张图会一直显示在那里。请问如何在全屏贴图前先去掉原来的图???问题三:一些突然弹出窗后覆盖在你的全屏图片上后,会产生一个缺口,请问如何检测这个消息并进行重绘呢?
调试欢乐多
2.可以先取得全屏大小,先在兼容DC上绘制一个底色来覆盖原有内容
3......
3. 出现空洞,说明你的OnPaint函数内部没有调用绘制图片相关的函数。避免办法,所有的绘制在你的OnPaint函数内部绘制。
::SetDIBitsToDevice()倒数第三个参数直接指向数据,可以是文件读来或者任意创建的内存块,倒数第二个参数指向一个BITMAPINFOHEADER。2. 显示前刷新背景3. 在OnDraw里面绘图,有屏幕刷新时自动重绘。
第二个问题和我想的类似,我想的是用截图的方式截取贴图前的背景,然后在贴图前先绘制一遍背景,然后贴其他的图。
问题三,我是在CreateWindow上贴图的,但是因为这个window是HTMLwindow。总是贴不上去,没办法只好全屏贴图,贴上后就会出现被覆盖的情况。可是我的这个窗口是在主程序窗口上的,并不响应主程序的OnPaint消息隐藏无法重绘...问题比较麻烦...
用CreateCompatibleDC创建与绘图窗口兼容的内存DC,在内存DC中绘图, 可以在全屏窗口内用内存DC先绘好背景,再叠加其他图,这样窗口内容能保持,不被其他窗口抹掉。
然后在OnPaint里再用BitBlt拷到窗口DC
2. 没看明白,应该刷新一下即可。
3. 在OnPaint内处理应该不会有这种情况发生吧?
问题2,用BitBlt把先前的图复制一下
问题3,把绘制放在OnPaint里,如果某个区域无效,会自动调用绘制的。