CDC dc;
CBitmap bmp,bkgbmp;

mydc.CreateCompatibleDC(&dc);
bmp.CreateCompatibleBitmap(&mydc, 800,800);
mydc.SelectObject(&bmp);
//mydc.PatBlt(0, 0,800,800,PATCOPY);
mydc.SetBkMode(TRANSPARENT); mybkgdc.CreateCompatibleDC(&dc);
bkgbmp.CreateCompatibleBitmap(&mybkgdc, 800,800);
mybkgdc.SelectObject(&bkgbmp);
//mybkgdc.PatBlt(0, 0,800,800,PATCOPY);void CTestsystemView::OnPaint() 
{
CPaintDC dc(this); // device context for painting
CPen *poldpen;
CPen newpen;
mydc.BitBlt(0,0,600,600,&mybkgdc,0,0,SRCCOPY);
......
newpen.CreatePen(PS_SOLID,2,RGB(255,0,0));
poldpen=mydc.SelectObject(&newpen);
DrawAllPulse(&mydc);
mydc.SelectObject(poldpen);
newpen.DeleteObject();
dc.BitBlt(0,0,600,600,&mydc,0,0,SRCCOPY );
}
我在程序中是使用mydc和mybkgdc,主要是为了解决屏幕闪烁的问题.在onpaint()
函数中我使用一个newpen,是希望能产生一个红色的画笔.但是在屏幕上显示的却是黑色的.不知为什么?

解决方案 »

  1.   

    CDC dc;
    CBitmap bmp,bkgbmp;

    mydc.CreateCompatibleDC(&dc);//dc要是实际窗口的dc你这样其实是mydc.CreateCompatibleDC(NULL);
      

  2.   

    在DrawAllPulse中
    是不是用的不是画笔来作图?
      

  3.   

    在DrawAllPulse(&mydc);中我是用这种方法来画线的:
    pdc->MoveTo (beginpoint);
    pdc->LineTo (endpoint);
    原来我直接在onpaint()函数中使用CPaintDC dc,newpen是有效的,改成上面的方法后,就不行了
      

  4.   

    CDC dc;
             mydc.CreateCompatibleDC(&dc);
      
             你应该
             CClientDC dc(this);
             mydc.CreateCompatibleDC(&dc);