这是Onpain函数中有这样的代码
CClientDC dc(this);
                  CDC memDC;
  
 memDC.CreateCompatibleDC(&dc);

 memDC.MoveTo(CPoint(100,100));
 memDC.LineTo(CPoint(0,50));
   CRect rcDlg;
 GetClientRect(&rcDlg);
 dc.BitBlt(0,0,rcDlg.Width(),rcDlg.Height(),&memDC,0,0,SRCCOPY);
但屏幕上并没有显示出来直线,为什么阿?谁告诉我?

解决方案 »

  1.   

    必须生成一个兼容位图,有没有生成兼容位图:CClientDC dc(this);
                      CDC memDC;
                      CBitmap bmp;
      
       CRect rcDlg;
     GetClientRect(&rcDlg);
     memDC.CreateCompatibleDC(&dc);
                       bmp.CreateCompatibleBitmap(&dc,rcDlg.Width(),rcDlg.Height());
    CBitmap * pOldBitmap=memDC.SelectObject(&bmp);
     memDC.MoveTo(CPoint(100,100));
     memDC.LineTo(CPoint(0,50));
     dc.BitBlt(0,0,rcDlg.Width(),rcDlg.Height(),&memDC,0,0,SRCCOPY);'
    memDC.SelectObject(pOldBitmap);
      

  2.   

    OnPaint函数应当使用CPaintDC而不是CClientDC。
      

  3.   

    stonespace(stonespace)老兄,屏幕上黑乎乎的,什么都看不到呀
      

  4.   

    有没有生成兼容位图,如果没有,memDC使用的是黑白位图,可能初始化为黑色。在上面画线当然看不见。还有,生成兼容位图之后,还必须设置一个底色,这样画线才能看得见,用FillSolidRect。
      

  5.   

    CClientDC dc(this);
                      CDC memDC;
                      CBitmap bmp;
      
       CRect rcDlg,rtTemp;
     GetClientRect(&rcDlg);
                        // ----------------
                        // 设置RECT 
                        rtTemp.SetRect(0,0,rcDlg.Width(),rcDlg.Height());
                       // ----------------  
     memDC.CreateCompatibleDC(&dc);
                  
                       // ----------------  
                       // BMP的RECT
                       bmp.CreateCompatibleBitmap(&dc,rtTemp.Width(),rtTemp.Height());
                      // ---------------- 
    CBitmap * pOldBitmap=memDC.SelectObject(&bmp);
     memDC.MoveTo(CPoint(100,100));
     memDC.LineTo(CPoint(0,50));
     dc.BitBlt(0,0,rcDlg.Width(),rcDlg.Height(),&memDC,0,0,SRCCOPY);'
    memDC.SelectObject(pOldBitmap);
      

  6.   

    在对话框中做的吗?如果不行的话就试一下GetDC().
      

  7.   

    我只是做的一个测试,这个函数不怎么会用,现在碰到的问题是我怎么用dc的背景色来设置memDC的背景色,我用FillSolidRect的第三个参数dc.GetBkColor(),来设置结果背景色为白色,而不是对话框的的那种灰色?请问这是怎么回事?
      

  8.   

    stonespace(stonespace) 见解非常正确!