初学VC  写了一个绘图函数 不知道为什么不能 刷新我得图形  在CButton 里面调用时
void CDrawPicDlg::DrawPic(CStatic &DrawPic)
{
CRect picRect; DrawPic.GetWindowRect(picRect); //DrawPic.GetClientRect(picRect); ScreenToClient(picRect); //CPaintDC dc(this);
CClientDC dc(this); CMemDC memDC(&dc); //绘制背景
CBrush newBrush,*oldBrush; newBrush.CreateSolidBrush(RGB(225,0,0));
oldBrush = memDC->SelectObject(&newBrush); memDC->Rectangle(picRect); newBrush.DeleteObject();
memDC->SelectObject(oldBrush);
    //绘制直线
CPen newPen, *oldPen; newPen.CreatePen(PS_SOLID,2,RGB(0,255,0)); oldPen = memDC->SelectObject(&newPen); 

CPoint fPoint,tPoint; fPoint.x = picRect.left; 
fPoint.y = picRect.top + m_LineHeight;

//fPoint.y = picRect.top + int(picRect.Height() / 2); tPoint.x = picRect.right;
tPoint.y = picRect.top + m_LineHeight; //tPoint.y = picRect.top + int(picRect.Height() / 2);
CString LindHeight;
LindHeight.Format("%s",LindHeight,m_LineHeight); this->SetWindowText(LindHeight); memDC->MoveTo(fPoint);
memDC->LineTo(tPoint); memDC->SelectObject(oldPen); 
newPen.DeleteObject();

}

解决方案 »

  1.   

    CMemDC 是一个内存设备环境类
      

  2.   

    绘制代码写在OnPaint或者OnDraw里面调用
      

  3.   

    memDC里面没有选入位图。
    没有从memDC拷贝到窗口DC上。
      

  4.   

    呵呵 谢谢大家了 昨天晚上用了 
    Invalidate();//重新绘制窗口
    可以刷新图形了 可是 不知道为什么 我得客户区 除了要绘制图形的地方 全部都是黑色地 还好其他的控件没有被覆盖!很怪了!
    还请大家指导!
    下面是我得CMemDC 是一个内存设备环境类;
    class CMemDC : public CDC
    {
    public:
    //构造内存设备场景
    CMemDC(CDC* pDC) : CDC()
        {
    ASSERT(pDC != NULL);

    m_pDC = pDC;
    m_pOldBitmap = NULL;
            m_bMemDC = !pDC->IsPrinting();

            if (m_bMemDC)
    {
                pDC->GetClipBox(&m_rect);
                CreateCompatibleDC(pDC);
                m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
    m_pOldBitmap = SelectObject(&m_bitmap);
                SetWindowOrg(m_rect.left, m_rect.top);
            }
    else
    {
                m_bPrinting = pDC->m_bPrinting;
                m_hDC = pDC->m_hDC;
                m_hAttribDC = pDC->m_hAttribDC;
            }
    }

    //析构
    ~CMemDC()
        {
    if (m_bMemDC) {
    m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
    this, m_rect.left, m_rect.top, SRCCOPY);

                SelectObject(m_pOldBitmap);
    } else {
                m_hDC = m_hAttribDC = NULL;
    }
    }

        CMemDC* operator->() {return this;}

        operator CMemDC*() {return this;}private:
    CBitmap  m_bitmap;
        CBitmap* m_pOldBitmap;
        CDC*     m_pDC;
        CRect    m_rect;
        BOOL     m_bMemDC;
    };
      

  5.   

    3个问题:1 CClientDC dc(this);
    你似乎要在一个控件中绘图,那么应该取得该控件的DC:
    CClientDC dc(&picStatic);2 顺序反了:
    newBrush.DeleteObject();
    memDC->SelectObject(oldBrush);3 最好从CStatic继承一个类,在其中绘图,你的按钮消息中只要设置一些控制变量,然后刷新控件就行了。