растягивание BitMap на диалог (CBrush)

From
Stas Khatsko (2:5080/220)
To
All ()
Date
2003-04-11T23:12:10Z
Area
SU.WINDOWS.NT.PROG
Привет, All.

Вообще непонятные вещи происходят:

Создаю проект Dialog-Based, растягиваю на нем BitMap вот так:
(сразу скажу: этот диалог прорисовывается как надо, проблема ниже)

В конструкторе:

=== Начало Windows Clipboard ===
 VERIFY(m_bkBmap.LoadBitmap(IDB_BKBMAP));
=== Конец Windows Clipboard ===

В OnInitDialog:

=== Начало Windows Clipboard ===
 CSystemFaceDlg* pFrm = (CSystemFaceDlg*)AfxGetMainWnd();
 CBitmap* dlgBmap;

 dlgBmap = &(pFrm->m_bkBmap);

    RECT rectClient;

    // Load hollow brush;
    m_brush.CreateStockObject(NULL_BRUSH);

    // Get bitmap information
    dlgBmap->GetObject(sizeof(BITMAP), &m_bmInfo);


    GetClientRect(&rectClient);

    m_size.cx = rectClient.right;    // zero based
    m_size.cy = rectClient.bottom;    // zero based
    m_pt.x = rectClient.left;
    m_pt.y = rectClient.top;

    // Get temporary DC for dialog, will be released in dc destructor
    CClientDC dc(this);

    // Create compatible memory DC using the dialogs DC
    VERIFY(m_dcMem.CreateCompatibleDC(&dc));

 m_dcMem.SelectObject(dlgBmap);
=== Конец Windows Clipboard ===

(CSystemFaceDlg - это класс этого диалога)

Далее переопределение WM_CTLCOLOR и WM_ERASEBKGND:

=== Начало Windows Clipboard ===

HBRUSH CSystemFaceDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{

 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

 // TODO: Change any attributes of the DC here

 CSystemFaceDlg* pFrm= (CSystemFaceDlg*)AfxGetMainWnd();

 if (pFrm->m_transparentText)
  pDC->SetBkMode(TRANSPARENT);

//  pDC->SetTextColor(RGB(125, 125, 125));
    return (HBRUSH)m_brush;


 // TODO: Return a different brush if the default is not desired
// return hbr;
}

BOOL CSystemFaceDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default

    RECT rectClient;

    GetClientRect(&rectClient);

    m_size.cx = rectClient.right;    // zero based
    m_size.cy = rectClient.bottom;    // zero based
    m_pt.x = rectClient.left;
    m_pt.y = rectClient.top;

    pDC->StretchBlt(m_pt.x, m_pt.y, m_size.cx, m_size.cy,
        &m_dcMem, 0, 0, m_bmInfo.bmWidth-1, m_bmInfo.bmHeight-1,
        SRCCOPY );

 return FALSE;

// return CDialog::OnEraseBkgnd(pDC);
}
=== Конец Windows Clipboard ===

Переменные из хедера:

=== Начало Windows Clipboard ===
protected:

   CDC m_dcMem;            // Compatible Memory DC for dialog
   CBrush m_brush;        // Handle of background brush

   BITMAP m_bmInfo;        // Bitmap Information structure
   CPoint m_pt;            // Position for upper left corner of bitmap
   CSize m_size;        // Size (width and height) of bitmap

 CBitmap m_bkBmap;
 CBitmap m_bmapBrush;
 CBitmap m_bmapCentered;
 BOOL m_transparentText;
=== Конец Windows Clipboard ===

Проблема в том, что при вызове из этого диалога по нажатию кнопки другого модального диалога (и в этот диалог вся эта закраска вставлена буква-в-букву)
фон второго диалога - прозрачен, т.е. ни bitmap'а, ни дефолтового цвета диалога (оба диалога созданы в ресурсах) - просто на нем та часть экрана которая находилась под этим диалогом.

Вроде такая проблема знакома (давно такое возникало), но непонятность в том, что у обоих диалогов код закраски букву-в-букву.

Из-за чего такое может происходить?

Elvis.                                                mailto:elvis(_at_)beep.ru

---
 * Origin: Elvis Station, Ekaterinburg, Russia (2:5080/220)