void CDrawSin::DrawSin(CDC *pDC)
{
CRect rect;
GetClientRect(rect);

CPen pen_Grid(PS_DOT,1,m_Pen);
pDC->SelectObject(&pen_Grid);
int i = 0;
for(i=rect.top;i<rect.Height();i+=5)
{
pDC->MoveTo(rect.left,rect.top);
pDC->LineTo(rect.right,rect.top);

}
for(i=rect.left;i<rect.Width();i+=5)
{
       pDC->MoveTo(rect.left,rect.top);
   pDC->LineTo(rect.left,rect.bottom);
   
   
}
for(i=0;i<1000;i++)
{
     //m_lCount[i]=500+500*sin(3.14*m_now/180);
        pDC->MoveTo(3+i,(int)(200+80*sin(100*6.28*(i))));
pDC->LineTo(3+i,(int)(200+80*sin(100*6.28*(i))));
}

 
}void CDrawSin::MemDraw()
{
// CRect rect;

// 获取绘制坐标的文本框
// CWnd* pWnd = GetDlgItem(IDC_STATIC);

// pWnd->GetClientRect(&rect);
// 指针
// pDC = pWnd->GetDC();
// pWnd->Invalidate();
// pWnd->UpdateWindow();

//pDC->Rectangle(&rect); CRect rect;
GetClientRect(rect);
    //内存绘图
    CBitmap m_MemBitmap;
CBitmap* pOldBmp = NULL;
m_MemDC.CreateCompatibleDC(pDC);
m_MemBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
pOldBmp = m_MemDC.SelectObject(&m_MemBitmap);
m_MemDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);
DrawSin(&m_MemDC);
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&m_MemDC,0,0,SRCCOPY); m_MemDC.SelectObject(pOldBmp);
    m_MemDC.DeleteDC();
m_MemBitmap.DeleteObject();
}
我把上述代码写到了一个继承自CWnd类,然后在对话框的PICTURE里实现.可是为什么一调用就出错啊?

解决方案 »

  1.   

    在MemDraw中,没看到pDC怎么来的。最好从OnPaint中把DC传递给MemDraw。
      

  2.   

    for(i=0;i <1000;i++)
    {
        //m_lCount[i]=500+500*sin(3.14*m_now/180);
            pDC->MoveTo(3+i,(int)(200+80*sin(100*6.28*(i))));
    pDC->LineTo(3+i,(int)(200+80*sin(100*6.28*(i))));
    } ==============
    没试过上面的代码,不知道MoveTo和LineTo为同一个点时是否会打点?!
    改成:
    pDC->MoveTo(30,200);for(i=1;i <1000;i++)
    {
        //m_lCount[i]=500+500*sin(3.14*m_now/180);
    pDC->LineTo(3+i,(int)(200+80*sin(100*6.28*(i))));

    如何