CClientDC dc(this);
CLine kkk;
kkk.m_ptFrom.x=0;
kkk.m_ptFrom.y=0;
kkk.m_ptTo.x=1000;
kkk.m_ptTo.y=1000;
kkk.Draw(&dc);
其中class CLine : public CObject  
{
public:
Draw(CDC *pDC);
CLine(CPoint m_ptFrom,CPoint m_ptTo);
CLine();
virtual ~CLine(); CPoint m_ptTo;
CPoint m_ptFrom;
};其中draw函数
CLine::Draw(CDC *pDC)
{
pDC->MoveTo(m_ptFrom);
pDC->LineTo(m_ptTo);
}
为什么画不出来图呢?按照我的想象应该是一条从(0,0)到(1000,1000)的直线的。

解决方案 »

  1.   

    试了一下,没有问题。感觉若有问题的话,可能出在
    CClientDC dc(this);也就是它得到是否是你想要画的那个区域的CDC指针
      

  2.   

    CClientDC dc(this);
    CLine kkk;
    kkk.m_ptFrom.x=0;
    kkk.m_ptFrom.y=0;
             kkk.m_ptTo.x=1000;
    kkk.m_ptTo.y=1000;
    kkk.Draw(&dc);
    我上面这段代码写在自己定义的一个对话框类里面,而我是想在view类中画出图形来,请问该怎么办:)
      

  3.   


    CClientDC dc(this);
    改为
    CDC* pDC = GetDC( );//对称你的Draw(CDC *pDC)
      

  4.   

    CMyView *pView = (CMyView *)((CMainFrame *)
          AfxGetMainWnd()->GetActiveView());
    CDC* pDC = pView->GetDC( ); //U must Get the DC of your view firstly.
    kkk.Draw(pDC); //then it is ok.
      

  5.   

    CDC* pDC = GetDC( );//对称你的Draw(CDC *pDC)
    //if U do only like this, that is to say, CDC *pDC = this->GetDC();
    //so, U get the dc of current dialog.
    //what U draw is on dialog certainly.
      

  6.   

    我按照你说的改了,可是编译的时候会出现这样的错误,
    F:\c++_study\wen1\DuanshuZ.cpp(88) : error C2039: 'GetActiveView' : is not a member of 'CWnd'
            d:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(1899) : see declaration of 'CWnd'
    为什么呢?希望allenhai1980(心蓝世界)或其它大虾多多指教,谢谢。
      

  7.   

    之前大致在对话框程序试过, 不过不是自建类。你原先的CClientDc也是可以的。待会再建类试下吧。
      

  8.   

    不把画图代码放到视图OnDraw()函数里面也可以。
    但你也要考虑到视图被刷新后(比如使用Alt+Tab切换)这个部分所画的图可能会丢失的啊!推荐的办法:1,所有的画图都在OnDraw()中作,通过调用Invalidate()来改变视图内容。
                2,在外部画图的同时做好记录,深入浅出中的例程是这样做的:响应ButtonDown和ButtonUp消息画图,并同时将所有点记录在文档中,OnDraw()函数直接调用文档中数据画图,这样刷新时数据才不会丢失。