我定义了一个函数:
void CMyStatic::DrawCurve(CPaintDC &dc)
然后在里调用
void CMyStatic::OnPaint() 
{
   CPaintDC dc(this);
   DrawCurve(dc);
}我在后面想调用DrawCurve(dc)但是只能声明CClientDC &dc,不能声明成CPaintDC &dc,所以就无法调用DrawCurve(dc),重新写一个DrawCurve(CClientDC &dc)不现实,想问大家有没有别的方法?谢谢

解决方案 »

  1.   

    双缓冲,定义一个内存DC
    void CMyStatic::OnPaint() 
    {
     CPaintDC dc(this); CDC MEMDC;
     MEMDC的创建略.....
     DrawCurve(&MEMDC); dc.bitblt(x,y,宽,高,&MEMDC,0,0,SRCCPY);}
    void CMyStatic::DrawCurve(CDC &memdc)
    {
      在这里操作memdc
    }
      

  2.   

    呵呵,你将参数改为HDC类型的话,可以通用
      

  3.   

    先转成CDC,在转为CPaintDC?
    //CPaintDC里面包含了BeginPaint/EndPaint的调用。CClientDC相当于GetDC调用
      

  4.   

    定义函数: void CMyStatic::DrawCurve(CDC *pDc)
    调用 void CMyStatic::OnPaint() 
    {
       CPaintDC dc(this);
       DrawCurve(&dc);
    }或者其他地方:
       CClientDC dc(this);
       DrawCurve(&dc);
      

  5.   

    按你说的改了,错误
    error C2664: 'DrawCurve' : cannot convert parameter 1 from 'class CPaintDC' to 'class CDC *'
    error C2664: 'DrawCurve' : cannot convert parameter 1 from 'class CClientDC' to 'class CDC *'
    咋回事?
      

  6.   


    看错误提示就知道了,你真的按5楼说的改了吗?好好检查 void CMyStatic::DrawCurve(CDC *pDc), 再看看你的!!
      

  7.   

    实在没看出来
    void CMyStatic::OnPaint() 
    {
     CPaintDC dc(this);
       DrawCurve(dc);
    } void CMyStatic::DrawCurve(CDC *pDc)
    {}void CMyStatic::OnMouseMove(UINT nFlags, CPoint point) 
    {

    CClientDC dc(this);
    DrawCurve(dc);
    }
    ?????