BOOL CTestdrawDlg::OnInitDialog()
{
................................
int m_left,m_top,m_right,m_bottom; CWnd* pWnd = GetDlgItem(IDC_COORD); //图片控件的ID
         CDC   *pDC=pWnd-> GetDC();
pWnd->GetClientRect(&rect);
pDC->Rectangle(&rect);
m_left = rect.left+10;
m_top = rect.top+10;
m_right = rect.right-10; 
m_bottom = rect.bottom-20; // 绘制坐标轴
pDC->MoveTo(m_left,m_top);

// 垂直轴
pDC->LineTo(m_left,m_bottom);

// 水平轴
pDC->LineTo(m_right,m_bottom);
}程序运行后,对话框中没有图形!
我想程序生成后,对话框有图形。必须在OPaint中画吗 才有嘛

解决方案 »

  1.   

    OnPaint会循环执行,所以会刷掉在初始化函数里画上去的线
    必须在OnPaint中来画
      

  2.   

    即使不在OnPaint里面画也不要在OnInitDialog()里面画。
      

  3.   

    OnInitDialog()里面负责初始化对话框的,这里面写画的代码无用!
    最好写到OnPaint()
      

  4.   

    AfxGetMainWnd()->ShowWindow(SW_SHOW);   
    AfxGetMainWnd()->UpdateWindow();以上这段代码可以加在  画图的动作之前   就可以画了
      

  5.   

    必须在OPaint中画,否则一刷新就没了.
      

  6.   

    为什么要在OnInitDialog()中?
    应该在OnPaint()吧
      

  7.   

    OnInitDialog()通常用来初始化对话框里的控件  不要用来绘图必须在OnPaint()里绘图 将静态控件ID转化成CWnd指针 得到其设备环境 
    这里的一个技巧在于  我们既要在控件窗口内绘图又要防止Windows对它进行重复绘制
    解决方法是采用Invalidate()/UpdateWindow()这一调用序列例如:
    void CMyDialog::OnPaint()
    {
      CWnd* pWnd = GetDlgItem(IDC_STATIC);
      CDC* pControlDC = pwnd->GetDC();
      pWnd->Invalidate();
      pWnd->UpdateWindow();
      //添加绘图代码
      pWnd->ReleaseDC(pControlDC );

      

  8.   

    还有一个函数。
    BKEraseGround  消息里
      

  9.   

    自己写个Cstatic的类,然后在OnInitDialog()中create,在create的控件中画图就行了。
      

  10.   

    貌似说的都很有道理,那可不可以放在OnTimer中?