在用内存DC来做双缓存消除闪烁的时候,通常做法是三步走:
mem_hdc=CreateCompatibleDC(present_hdc);
m_bitmap=CreateCompatibleBitmap(mem_hdc,m_view_width,m_view_height);
SelectObject(m_hdc,m_bitmap);
这时就会发现当BitBlt到present_hdc的时候,图像是黑白的,明显,问题出在了bitmap上,原因在于第二行的第一个参数,在使用CreateCompatibleDC创建DC的时候,new_hdc可能在内部数据上多少有所缺失,导致以此为基准创建的bitmap有问题,应该以原始的present_hdc为基准创建,改成
m_bitmap=CreateCompatibleBitmap(present_hdc,m_view_width,m_view_height);
问题得以解决。至于为什么CreateCompatibleDC得来的DC会有问题,我也没有深入研究。