绘制图片放在这基类函数中,OnEraseBkgnd (CDC *pDC)

解决方案 »

  1.   

    CPaintDC dc( this ); 改CClientDC(this)
      

  2.   

    我按照shen_wei改了一下BOOL CDlgBase::OnEraseBkgnd(CDC* pDC)
    {
    CRect rcClient, rcUpdate;
    GetClientRect(&rcClient);
    GetUpdateRect(&rcUpdate); BITMAP bm;
    CBitmap m_bitmapBack;
    m_bitmapBack.LoadBitmap(IDB_LOGIN);
    m_bitmapBack.GetBitmap(&bm); //CPaintDC dc( this ); // device context for painting CDC BackDC;
    BackDC.CreateCompatibleDC(pDC);
    CBitmap *pOldBackBitmap = BackDC.SelectObject(&m_bitmapBack); CDC MemDC;
    MemDC.CreateCompatibleDC(pDC);
    CBitmap memBitmap;
    memBitmap.CreateCompatibleBitmap(pDC, rcClient.Width(), rcClient.Height());
    CBitmap *pOldBitmap = MemDC.SelectObject(&memBitmap); MemDC.StretchBlt(0, 0, rcClient.Width(), rcClient.Height(), &BackDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); pDC->BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &MemDC, 0, 0, SRCCOPY);
    MemDC.SelectObject(&pOldBitmap);
    MemDC.DeleteDC(); return CDialog::OnEraseBkgnd(pDC);
    }
    在窗口类中
    BOOL CYearlyMonthlyDlg::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: Add your message handler code here and/or call default return CDlgBase::OnEraseBkgnd(pDC);
    //return true;
    }
    发现背景变成了黑色 不过调用了Onpaint函数 看到了所画的矩形,请问各位大神这是什么情况?
      

  3.   

    void CTestDlg::OnPaint()
    {
    #if  1
    CPaintDC dc( this ); // device context for painting
    #else
    CDlgBase::OnPaint();// 如果调用了 基类, 那么窗口已经有效, 取CPaintDC dc( this );  将 是无效的, 因为没什么可 Paint 的 
    CClientDC dc(.this);// 所以必须取 客户区 DC。
    #enif