void CDrawPicDlg::OnButton2() 
{ CWindowDC clientDc(this); CDC memDC;
memDC.CreateCompatibleDC(&clientDc);

CRect reClient;
//m_DrawPic.GetClientRect(&reClient);
         //m_DrawPic CStatic 控件
m_DrawPic.GetWindowRect(reClient); ScreenToClient(reClient); CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(&clientDc,reClient.Width(),reClient.Height()); memDC.SelectObject(&memBitmap);
         //填充CStatic控件
for(int x=0;x<reClient.right;x++)
{
for(int y=0;y<reClient.bottom;y++)
{
memDC.SetPixel(x,y,x*y);
}
}         CString cTemp;
cTemp.Format("%d   %d",reClient.TopLeft().x,reClient.TopLeft().y);
AfxMessageBox(cTemp); clientDc.BitBlt(reClient.TopLeft().x,reClient.TopLeft().y,reClient.Width(),
reClient.Height(),&memDC,0,0,SRCINVERT);
/**/
}可是为什么运行后 填充区域却不对呢?

解决方案 »

  1.   

    或者是在一个指定区域中绘图 !
    重载 CStatic可是我的绘图代码放在哪里呢?
    小弟初学VC 还请大家指教!
      

  2.   

    static上面画要设置裁减区域,要不然就画到外面去了
      

  3.   

    bobob(PDFViewer2.0 Release拉!)
    谢谢了 可是怎么设置啊?
      

  4.   

    将m_DrawPic.GetWindowRect(reClient);
    替换为:
    CStatic *m_DrawPic=(CStatic *)(this->GetDlgItem(IDC_STATIC));//IDC_STATIC为CStatic控件的ID

    m_DrawPic->GetWindowRect(reClient);
      

  5.   

    呵呵 效果好像还是一样的啊 还是跑到CStatic区域外面去了
      

  6.   

    不过 你的方法和我的 m_DrawPic.GetWindowRect(reClient); 应该没有什么区别吧(m_DrawPic为CStatic对象的映射变量啊)
      

  7.   

    重载CSTATIC,在ONERASEBKGROUD中画图
      

  8.   

    //得到IDC_STATIC的句柄
    CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);//根据句柄得到dc
    CDC* pDC = pWnd->GetDC();//得到dc的客户区域,并创建画刷填充这个区域
    CRect rc;
    pWnd->GetClientRect(&rc);
    CBrush brush;
    brush.CreateSolidBrush(RGB(0,255,0));
    pDC->FillRect(&rc,&brush);//设置dc的裁减区域为客户区域,因为STATIC并不具有真正的dc
    //而是其父窗口的dc,所以用裁减来避免画到客户区域外面去
    CRgn rgn;
    rgn.CreateRectRgn(rc.left,rc.top,rc.right,rc.bottom);
    pDC->SelectClipRgn(&rgn);//创建画笔并选中到pDC
    CPen pen,*pOldPen;
    pen.CreatePen(PS_SOLID, 2, RGB(255,0,0));//2个像素,红色
    pOldPen =pDC->SelectObject(&pen);pDC->MoveTo(100,100);//移动到第一个点
    pDC->LineTo(200,200);//连结第一个和第二个点
    pDC->LineTo(300,200);//连结第二个和第三个点//安全清理
    pDC->SelectObject(pOldPen);
    pWnd->ReleaseDC(pDC);
      

  9.   

    多谢 bobob(PDFViewer2.0 Release拉!)  的指教 ^_^ 解决了 !
    bobob(PDFViewer2.0 Release拉!)   你真厉害!困扰了我好久的问题!一下子就被你解决了!
      

  10.   

    哈哈,楼上的太具体了学习ing