//各位友人,我在一个函数里面如果触发了一次wm_drawitem消息的时候,下列断言不会有任何异常,如果在那个函数里面2次触发wm_drawitem消息的时候,为什么就会引发断言失败呢;很奇怪啊;望解答。
//从CBitmapButton继承过来的类
void CMybutton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
ASSERT(lpDIS != NULL);
// must have at least the first bitmap loaded before calling DrawItem
ASSERT(m_bitmap.m_hObject != NULL);     // 就是这儿,断言失败了 // use the main bitmap for up, the selected bitmap for down
CBitmap* pBitmap = &m_bitmap;
UINT state = lpDIS->itemState;
if ((state & ODS_SELECTED) && m_bitmapSel.m_hObject != NULL)
pBitmap = &m_bitmapSel;
else if ((state & ODS_FOCUS) && m_bitmapFocus.m_hObject != NULL)
pBitmap = &m_bitmapFocus;   // third image for focused
else if ((state & ODS_DISABLED) && m_bitmapDisabled.m_hObject != NULL)
pBitmap = &m_bitmapDisabled;   // last image for disabled // draw the whole button
CDC* pDC = CDC::FromHandle(lpDIS->hDC);


CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap* pOld = memDC.SelectObject(pBitmap);
if (pOld == NULL)
return;     // destructors will clean up CRect rect;
rect.CopyRect(&lpDIS->rcItem);
/*
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&memDC, 0, 0, SRCCOPY);
*/
 BITMAP bits;
         pBitmap->GetObject(sizeof(BITMAP),&bits);
         pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),
            &memDC,0,0,bits.bmWidth, bits.bmHeight, SRCCOPY);


pDC->SetBkMode(TRANSPARENT); memDC.SelectObject(pOld);