我从数据库中读取一副 位图,然后在一个 非模态对话框 的OnPaint函数中显示出来但是,此非模态对话框最小化后,位图就消失了 ,咋办啊,困扰我好久了~~~~

解决方案 »

  1.   

    如果图是在OnPaint中画的话,不应该出现这个问题的。
      

  2.   

    可能是有效区域与无效区域的问题, 你可能是在OnPaint函数里调用基类的OnPaint语句后作图,这样,当你调用CPaintDC(this)后不会对窗口进行重绘,因为这时窗口不存在无效区域。你可以在作图前调用Invalidate()设置成无效区域
      

  3.   


    m_hPhotoBitmap是我从数据库里读出来的HBITMAPDrawCoursePhoto(int x, int y, CDC *pDC)
    {
    if(!m_hPhotoBitmap) return;
      HBITMAP OldBitmap;
      CDC MemDC;
      MemDC.CreateCompatibleDC(pDC);
      OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);
      CBitmap m_bitmap;
      m_bitmap.Attach(m_hPhotoBitmap);
      BITMAP bitmap;
    m_bitmap.GetBitmap(&bitmap);
    pDC->StretchBlt(x,y,100,100,&MemDC,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
      MemDC.SelectObject(OldBitmap);
    }void CDlgCourseShow::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    DrawCoursePhoto(10,30,&dc);
    }
      

  4.   

    那太奇怪了
    感觉你的OnPaint函数根本没起作用
      

  5.   

    应该是没有问题 简单方式试哈
    void Dlg1::OnPaint() 
    {
    CPaintDC dc(this);

    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    CBitmap m_bmp;
    m_bmp.LoadBitmap(IDB_BITMAP1); //位图ID
    memDC.SelectObject(&m_bmp);
    CRect rc;
    GetClientRect(&rc);
    dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
    }
      

  6.   

    问题解决了  调试发现 从第二次开始执行Opaint函数时  
    OldBitmap=(HBITMAP)MemDC.SelectObject(m_hPhotoBitmap);  不成功
    采取的方法是 添加成员变量 CBitmap 和BITMAP;
    在执行Opaint之前 得到位图对象,以及对象信息,就可以了小弟 第一次发帖,谢谢各位