又是断言失败

mengde007 2010-08-31 10:23:49

//各位友人,我在一个函数里面如果触发了一次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);
}
...全文
66 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mengde007 2010-08-31
  • 打赏
  • 举报
回复
自己的一个小失误,谢谢了;
stonewater 2010-08-31
  • 打赏
  • 举报
回复
在这个函数的开始下断点,然后在第一次调用时一步一步运行,注意观察m_bitmap.m_hObject什么时候为空

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧