onpaint的函数里面,已经初始化坐标变换,窗体大小等等,我定义的画图函数就是画一个界面的横纵坐标刻度,所以我要在onpaint的函数里面,调用pDC 变量,但是一直进行死循环,不断刷新。
望各位大神出手我的画图函数必须要放在onpaint函数里面,怎么解决这个问题?

解决方案 »

  1.   

    画图函数中不能调用 Invalidate 或 InvalidateRect,因为这个会触发 OnPaint,就进入死循环。
      

  2.   

    画图函数中不能调用 Invalidate 或 InvalidateRect,因为这个会触发 OnPaint,就进入死循环。
      

  3.   

    不必在onpaint里画的,每次刷新都会调有onpaint函数,你可以在onsize()中写这个函数,当窗口大小发生变化时,会刷新
    也可以用这个OnEraseBkgnd(CDC* pDC) 还有个“位图缓存‘的概念可以消除闪烁你可以在网上查一下;
      

  4.   

    pDC
    memDC
    双缓存画图吧
      

  5.   

    你是不是这个意思
    http://blog.csdn.net/xianglitian/article/details/6100767
      

  6.   

    在mfc的****view中添加OnEraseBkgnd函数,在里面更新就ok
      

  7.   

    加标志位?你要画的时候置为TRUE,在Paint函数中画完就置为FALSE。它会自己调用一次的。
      

  8.   

    画图函数一般是要放在OnPaint里面的,不过我觉得这个不是原因。
      

  9.   

    一样能拿到pDC的,不用纠结于OnPaint里面。
    CPaintdc(this);
    CDC * dc = GetDC();这样你控制起来可能方便许多了
      

  10.   

    建议用ST_Curve控件
    www.st-curve.cn
      

  11.   

    程序结构有问题吧,理解一下OnPaint,Ondraw之类函数的作用及消息响应,重新考虑一下你的程序结构,将你的代码单独做成函数加入到适当位置。
      

  12.   

    用 myknowledge 方法:上面的问题弄好了,但是问题又来了
    我是画了一个图片的散点图,打印在静态文本上,现在我想画一个坐标获取静态文本的rect属性   CRect rect;
       CWnd* pWnd=GetDlgItem(IDC_STATIC);
       pWnd->GetWindowRect(&rect);
       CPen PlotLine;
       PlotLine.CreatePen(PS_SOLID, 1,RGB(255,255,255));
       pDC->MoveTo(rect.left,-rect.top);
       pDC->LineTo(rect.left,-rect.bottom);
    这个 直线看不到
    这个能看到结果
        pDC->TextOut(rect.left,-rect.top,L"1");
       我估计是被设置桌面的画刷给刷掉了
        现在没辙了。。
        大家给出自己的想法也可以给点小段代码
        明天晚上11点结贴哈哈多劳多得了,讲的好的还会追加分数了。
      

  13.   

    坐标已经画出来,用了一次for循环,选定3断点,现在小系统终于搞完了不过还是谢谢大家哈