高手请帮看一下,我的程序运行没错误,为什么显示不出来网格呢,我忽略那里了
void CWANGDlg::OnPaint() 
{CPaintDC dc(this);}在头文件中添加成员变量: 
 CDC *pDC; //屏幕绘图设备
int m_High; //绘图起点
int m_Low; //绘图终点
int m_lCount[1024]; //数据存储数组  
int m_now; //记录波形当前点
int m_time; 
添加一个成员函数DrawWave(CDC *pDC)添加代码如下:void CMYDlg::DrawWave(CDC *pDC)
{
int i;int m_left,m_top,m_right,m_bottom;
  int m_Interval = (m_High - m_Low)/10;
  if (m_Interval < 1) m_Interval = 1;
  // 获取绘制坐标的文本框
  CWnd* pWnd = GetDlgItem(IDC_COORD);
  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;
  int m_IntervalPan = (m_right - m_left)/11;
  if (m_IntervalPan < 1 ) m_IntervalPan =1;
  // 创建画笔对象
  CPen* pPenRed = new CPen;
  // 红色画笔
  pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
  // 创建画笔对象
  CPen* pPenBlue = new CPen;    CPen* pPenGreen = new CPen;
  // 蓝色画笔
  pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0, 255));
  // 创建画笔对象CPen* pPenGreen = new CPen;
  // 绿色画笔
  pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));
  // 选中当前红色画笔,并保存以前的画笔
  CGdiObject* pOldPen = pDC->SelectObject(pPenRed);
  // 绘制坐标轴pDC->MoveTo(m_left,m_top);
  // 垂直轴
  pDC->LineTo(m_left,m_bottom);
  // 水平轴
  pDC->LineTo(m_right,m_bottom);
  // 写X轴刻度值
  for(i=0;i<10;i++){//
  //str.Format(_T("%d"),m_Min+i*m_Interval);
  str.Format(_T("%d"),m_Low+i*m_Interval);
  pDC->TextOut(m_left+i*m_IntervalPan,m_bottom+3,str);}//
//  str.Format(_T("%d"),m_Max);
  str.Format(_T("%d"),m_High);
  pDC->TextOut(m_left+10*m_IntervalPan,m_bottom+3,str);
  // 绘制X轴刻度
  for (i = m_left; i < m_right-20; i += 5){if ((i & 1) == 0)
  {// 10的倍数
  pDC->MoveTo(i + 10, m_bottom);
  pDC->LineTo(i + 10, m_bottom+4);}
  else{// 10的倍数
  pDC->MoveTo(i + 10, m_bottom);pDC->LineTo(i + 10, m_bottom+2);}
  }// 绘制Y轴箭头
  pDC->MoveTo(m_right-5,m_bottom-5);
  pDC->LineTo(m_right,m_bottom);
  pDC->LineTo(m_right-5,m_bottom+5);
  // 绘制X轴箭头
  pDC->MoveTo(m_left-5,m_top+5);
  pDC->LineTo(m_left,m_top);
  pDC->LineTo(m_left+5,m_top+5);
  // 绘制Y轴网格 选择绿色画笔 
  pDC->SelectObject(pPenGreen); 
  //
  int iTemp = (m_bottom - m_top)/5; 
  for (i = 1 ;i <= 5 ;i++){pDC->MoveTo(m_left,m_bottom - i*iTemp);
  pDC->LineTo(m_right,m_bottom - i*iTemp);}
  // 恢复以前的画笔
  pDC->SelectObject(pOldPen);delete pPenRed;
  delete pPenBlue;
  delete pPenGreen;
  return;
}

解决方案 »

  1.   

    void CMYDlg::DrawWave(CDC *pDC)这个函数你在什么地方调用的啊?前面的OnPaint中没有调用它啊
      

  2.   

    把你的绘图的代码放到OnPaint函数中,或者在OnPaint函数中调用你封装的绘图的函数
      

  3.   

    我照着这样做了 但是运行时弹出了一个对话框:
                                  0x5f48f63指令引用的0xcccccdc内存,该内存不能为read
                              要终止程序请单击确定
                               .....
    这是怎么情况啊
      

  4.   


    你怎么做的?void CWANGDlg::OnPaint()  
    {
        CPaintDC dc(this);
         DrawWave(&dc);
    }
      

  5.   

    你看看这个会不会对你有帮助
    http://blog.csdn.net/xianglitian/article/details/6100767
      

  6.   

    我已经把程序都放在OnPaint函数中了
      void CMyDlg::OnPaint() 
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting
                            ...
                      dc.DrawIcon(x, y, m_hIcon);
             }
            else
           {    CPaintDC dc(this); 
                  下面都是我程序了
                    ....
                  ...
                      CDialog::OnPaint();
            }
     怎么会弹出指令框     0x5f48f63指令引用的0xcccccdc内存,该内存不能为read
    要终止程序请单击确定
      

  7.   


     void CMyDlg::OnPaint()  
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting
      ...
      dc.DrawIcon(x, y, m_hIcon);
      }
      else
      { CPaintDC dc(this);  
      下面都是我程序了
      ....
      ...
      //CDialog::OnPaint();   //注释掉
      }
      

  8.   

    注释掉还不行的话,就在paint里面设置断点,看看哪句错的错误
      

  9.   

    debug状态,在OnPaint开头设置断点,单步调试
      

  10.   

    谢谢你指导,我在 else
    {    
         CPaintDC dc(this); 这设置断点,刚运行出现对话框:Unhandled exception in CMyDlg.exe
    0XC00000 Access Uio...  什么意思啊
      

  11.   

    我已经把程序放入放在OnPaint函数中执行了了不用DrawWavevoid CMyDlg::OnPaint()  
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting
      ...
      dc.DrawIcon(x, y, m_hIcon);
      }
      else
      { CPaintDC dc(this);  
      下面都是我程序了
      ....
      ...
      //CDialog::OnPaint();   //注释掉
      }
      

  12.   

    你确定CWnd* pWnd = GetDlgItem(IDC_COORD);这里的IDC_COORD控件在对话框CWANGDlg上?
      

  13.   

    //CDialog::OnPaint(); //已经注释掉
    我确定CWnd* pWnd = GetDlgItem(IDC_COORD);这里的IDC_COORD控件在对话框CWANGDlg上
    我把断点放在这: else  
    { CPaintDC dc(this);  刚执行就弹出对话框说:
     Unhandled exception in CMyDlg.exe
    0XC00000 Access Uio... 
      

  14.   

    一般不会是CPaintDC dc(this)这个出错的,你判断一下CWnd* pWnd = GetDlgItem(IDC_COORD);这里的pWnd是不是有效的。
      

  15.   

    LZ不妨给出ONPAINT和ONINTIALDIALOG的代码