void CXXXView::OnDraw(CDC* pDC)
{
CSpecAssistDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
绘制背景的函数
}这个绘制背景的函数(里面是pDC->MoveTo,LineTo等等一系列函数)可不可以做成全局函数在此调用呢?全局函数中使用的都是SDK的函数,pDC这个CDC类的指针怎么能在全局函数中来画图啊?
或者说各位大侠,要想把此绘制背景的函数做成全局函数应该怎么做呢?给个思路,谢谢

解决方案 »

  1.   

    这个绘制背景的函数(里面是pDC->MoveTo,LineTo等等一系列函数)可不可以做成全局函数在此调用呢? 全局函数中使用的都是SDK的函数,pDC这个CDC类的指针怎么能在全局函数中来画图啊? 
    ======================================
    可以,因为是全局函数,可能要用GetDC来获取HDC来操作,最好是写成CXXXView的成员函数,留一个pDC的参数作入口,可能要方便一点
      

  2.   

    CView可以说在你构建的MFC程序里面随处都可以取到,你就是说它相当于一个全局作用域,你在里面可以保存CDC的指针,然后你制定一个你需要功能的绘制函数,它就相当于是全局的了。
      

  3.   


    谢谢,其中你说可能要用GetDC来获取HDC来操作,没错是这样子,但是这样一来的话,就和OnDraw里的pDC没什么关系了是吧?因为在OnDraw里画图,pDC=GetDC();而全局下变成了 HDC hDC=GetDC(NULL)了。这部就没用上pDC了。是这样吗??
      

  4.   

    在外面直接获得VIEW的DC就可以画了啊
      

  5.   

    线程函数中最好不要直接MFC对象等,(如此处的DC等绘图),应该由线程中发送消息给UI线程来绘图
      

  6.   


    定义一个全局函数image_draw(CDC *pDC, ***)在OnDraw里面直接调用即可,把那个DC指针传递下去
      

  7.   


    但是很多情况下,你需要对DC进行设置,诸如坐标模式,ViewPort之类的,很麻烦,GetDC()使能获取CDC指针,但只能获得一个原始的DC,并不一定是你要的,而在OnDraw里面传入的DC是已经经过一些处理的,可以直接使用,如果你想自己实现,完全可以吧View类的OnPaint给重载了,自己控制绘制
      

  8.   

    把pDC、对象指针等作为参数传给全局函数即可。
      

  9.   

    pDC->GetSafeHDC()就可以获取到HDC了。不过好像关系不大,关键是你的设计思路好像不太明确。