::OnPaint()
{   
      CPaintDC dc(this); // device context for painting
CDC *pDC = &dc;
pDC->Rectangle(m_rectView);

CBitmap *pBmp = NULL;
pBmp = ...; m_ViewDC.SelectObject(pBmp);
BITMAP bm ;
m_pMonoBmp->GetBitmap(&bm);
int iWidth = bm.bmWidth;
int iHeight = bm.bmHeight; CRect rt = ...;

pDC->StretchBlt(rt.left, rt.top, rt.right, rt.bottom, &m_ViewDC, 
0, 0, iWidth, iHeight, SRCCOPY); if(pBmp != NULL)
{
pBmp->DeleteObject();
delete pBmp;
}
ReleaseDC(pDC);
}====>上面是在对话框中显示一图片,我把这段代码放到onInitDialog()里面,并删除OnPaint()函数,就不显示图片了,怎么解决这个问题,多谢!

解决方案 »

  1.   

    OnPaint是即时刷新的,onInitDialog()只是初始化执行一遍,每次刷新都调用OnPaint()
    所以不会显示图片,你只能在OnPaint中画图
      

  2.   

    还是放在OnPaint()中较好,如果只想在启动时显示一次,加一个变量作为标记就可以了。有些功能是不能放在onInitDialog()中的,因为执行onInitDialog()时,还没显示出窗口。
      

  3.   

    在OnInitDialog中SendMessage(MW_PAINT...)以下。使用OnPaint()方式。
      

  4.   

    在onInitDialog()只是装载了一次,别忘了屏幕是不断刷新的。
      

  5.   

    放在OnPaint()中,或是放在OnDraw()中,因为屏幕是不断刷新的。
    前者在刷新时需要你手工用InvalidRect(),
    后者自动刷新。我建议用后者。
      

  6.   

    我就是想让这个过程执行一次,因为图像处理的过程时间较长,如果放在onPaint()里面,会死循环
      

  7.   

    OnInit..()其实就是对WM_CREATE的响应,由于窗口正在创建的“途中”,不用响应任何的绘图命令
      

  8.   

    使用CClientDC dc(this);代替CPaintDC
      

  9.   

    是不是可以把处理的部分放在oninitial中,绘制部分放在onpaint中