窗口画图的抖动问题
代码片段:
CRect rc;
m_pWnd = new CWnd;
rc.SetRect(StartX, StartY,StartX+SH_WIDTH, StartY+SH_HEIGHT);
m_SHHQpWnd->CreateEx(0,AfxRegisterWndClass(CS_CLASSDC|CS_SAVEBITS|CS_HREDRAW|CS_VREDRAW),
"",WS_POPUP|WS_VISIBLE,rc,this,0);
m_pThread = new CWinThread;
m_pThread = AfxBeginThread(ShowAll,(LPVOID)(m_pWnd->m_hWnd));
UINT SHShowAll(LPVOID pParam)
{
CWnd *pWnd = new CWnd;
CDC *pdc;
pWnd->Attach((HWND) pParam);
pdc = pWnd->GetDC();
CRect rc;
rc.SetRect(0, 0, SH_WIDTH, SH_HEIGHT);
CDC memdc;
CBrush Brush,*pOldBrush;
CBitmap Bitmap, *pOldBitmap;
CFont font,*poldfont;
memdc.CreateCompatibleDC(pdc);
Brush.CreateSolidBrush(RGB(0,0,0));
pOldBrush = memdc.SelectObject(&Brush);
Bitmap.CreateCompatibleBitmap(pdc, rc.Width(), rc.Height());
pOldBitmap = memdc.SelectObject(&Bitmap);
font.CreateFont(SH_FONT_SIZE,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"楷_GB2312");
poldfont = memdc.SelectObject(&font);
memdc.SetBkMode(TRANSPARENT);
memdc.SetTextColor(RGB(255,255,0));
pdc->BitBlt(0,0,SH_WIDTH,SH_HEIGHT,&memdc,0,0,SRCCOPY);
//pdc->FillSolidRect(rc, RGB(0,0,0));
CDC memdc1;
CBrush Brush1, *pOldBrush1;
CBitmap Bitmap1, *pOldBitmap1;
CFont font1, *poldfont1;
CRect rc1;
memdc1.CreateCompatibleDC(pdc);
Brush1.CreateSolidBrush(RGB(0,0,0));
pOldBrush1 = memdc1.SelectObject(&Brush1);
rc1.SetRect(0, 0, SH_DENG_WIDTH, SH_DENG_HEIGHT);
Bitmap1.CreateCompatibleBitmap(pdc, rc1.Width(), rc1.Height());
pOldBitmap1 = memdc1.SelectObject(&Bitmap1);
font1.CreateFont(16,0,0,0,FW_NORMAL,FALSE,FALSE,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, "楷体_GB2312");
poldfont1 = memdc1.SelectObject(&font1);
memdc1.SetBkMode(TRANSPARENT);
memdc1.SetTextColor(RGB(255,0,0));
while(1)
{
。。。。。。。。。。。
// 在memdc1上写内容,并以某种方式逐步拷贝到memdc上,最后再拷贝到pdc上显示
。。。。。。。。。。。
for (int t = 0; t < 7; t ++)
{
memdc.BitBlt(0, t*32, SH_WIDTH-1, SH_DENG_HEIGHT, &memdc, 1, t*32, SRCCOPY);
memdc.BitBlt(SH_WIDTH-1, t*32, 1, SH_DENG_HEIGHT, &memdc, 0, t*32+32, SRCCOPY);
}
memdc.BitBlt(0, t*32, SH_WIDTH-1, SH_DENG_HEIGHT, &memdc, 1, t*32, SRCCOPY);
memdc.BitBlt(192-1, t*32, 1, SH_DENG_HEIGHT, &memdc1, CurPos, 0, SRCCOPY);
CurPos = CurPos + 1; // 每次递进一个像素点
pdc->BitBlt(0, 0, SH_WIDTH, SH_HEIGHT, &memdc, 0, 0, SRCCOPY);
Sleep(5);
}
}
问题:用以上方式的显示过程有明显的抖动,但是前面AfxRegisterWndClass函数的参数为CS_CLASSDC|CS_SAVEBITS|CS_HREDRAW|CS_VREDRAW时比为NULL时的抖动要小,但是仔细看还是能看出来,请各位兄弟帮帮看看,已经用了双缓冲了,为什么还会抖动?谢谢!