在OnPaint() 中加入代码画图,可以实现
但是程序一开启,似乎并不会去调用OnPaint()函数
导致我的图一开始没有被画出来
然后是当有其他窗体挡住了我整个应用程序[有其他应用程序完全挡住]
然后我再让我的应用程序最前端,发现图片没有了
被遮住一部分,可以显示出来,非常正常
那么前面的问题应该怎么解决呢,大家帮忙啦,谢谢

解决方案 »

  1.   

    你是何种工程?SDI还是对话框?OnPaint应该被调用啊
      

  2.   

    加断点确定OnPaint没有被调用?
      

  3.   

    OnPaint函数的入口就是画我想要的图片
    如果调用了没理由没有显示
    如果我在Dlg::OnInitDialog()
    中加入PostMessage(WM_PAINT,0,0);//触发OnPaint()函数
    一开启程序就可以显示
      

  4.   

    强制是很简单,问题是我什么时候来强制它重绘
    我的程序又不会自动响应它刚才被其他窗体覆盖了
    然后自动去调用你说的Invalidate
      

  5.   

    你说的很对啊。OnPaint应该自动调用的啊。理论大家都是明白的。你不愿意贴代码,就没有办法了。
      

  6.   

    放在 OnDraw()里呢???
      

  7.   

    对话框的OnPaint中有个if语句的,你的代码加在什么地方啊?
      

  8.   

    void CShowLineDlg::OnPaint() 
    {
    CPen penX,penY,penZ,penT,*oldpen;
    penX.CreatePen(PS_SOLID,1,RGB(255,0,0));
    penY.CreatePen(PS_SOLID,1,RGB(0,255,0));
    penZ.CreatePen(PS_SOLID,1,RGB(0,0,255));
    penT.CreatePen(PS_SOLID,1,RGB(0,0,0)); double x1,x2;
    int i;
    int X=0;
    double OriginX,OriginY,OriginZ;//原点坐标
    double OffsetX=50,OffsetY=100;//横,纵坐标偏移量
    OriginX=_points[0]._x;
    OriginY=_points[0]._y;
    OriginZ=_points[0]._z; //画出时间横轴
    oldpen = _cdc->SelectObject(&penT);
    _cdc->MoveTo(0,OffsetY);
    _cdc->LineTo(800,OffsetY);
    _cdc->SelectObject(oldpen);
    //画出X坐标偏移
    oldpen = _cdc->SelectObject(&penX);
    for(i=0;i<_counter;i++)
    {
    x1=(OriginX-_points[i]._x)+OffsetY;
    x2=(OriginX-_points[i+1]._x)+OffsetY;
    _cdc->MoveTo(X,x1);
    X+=OffsetX;
    _cdc->LineTo(X,x2);
    }
    _cdc->SelectObject(oldpen); //画出Y坐标偏移
    oldpen = _cdc->SelectObject(&penY);
    X=0;
    for(i=0;i<_counter;i++)
    {
    x1=(OriginY-_points[i]._y)+OffsetY;
    x2=(OriginY-_points[i+1]._y)+OffsetY;
    _cdc->MoveTo(X,x1);
    X+=OffsetX;
    _cdc->LineTo(X,x2);
    }
    _cdc->SelectObject(oldpen); //画出Z坐标偏移
    oldpen = _cdc->SelectObject(&penZ);
    X=0;
    for(i=0;i<_counter;i++)
    {
    x1=(OriginZ-_points[i]._z)+OffsetY;
    x2=(OriginZ-_points[i+1]._z)+OffsetY;
    _cdc->MoveTo(X,x1);
    X+=OffsetX;
    _cdc->LineTo(X,x2);
    }
    _cdc->SelectObject(oldpen); if (IsIconic())
    {
    CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
    dc.DrawIcon(x, y, m_hIcon); }
    else
    {
    CDialog::OnPaint();
    }
    }
      

  9.   

    写在else处,CDialog::OnPaint()之后
      

  10.   

    _cdc是怎么定义的?  在OnPaint中为什么不用CPaintDC dc(this); CDialog::OnPaint();  //把这句注释掉
      

  11.   

    _cdc是成员变量?什么时候初始化的?
      

  12.   

    忘记说明了,我是在picture控件上面画图的
    _cdc就是picture控件的CDC,
    初始化什么是没有问题的
    如果有问题就不会有时候可以画出来有时候不可以画出来了哦
      

  13.   

    CStatic pitShow;//picture控件
    CDC *_cdc;
    _cdc = pitShow.GetDC();
      

  14.   

    建议还是检查一下_cdc是不是初始化好了