绘制菜单背景

kbsoft 2011-06-28 03:23:23
通过SetBackBitmap来设置背景图片的句柄
void SetBackBitmap(HBITMAP hBmp)
{
if (hBmp == NULL && m_hBitmap)
{
::DeleteObject(m_hBitmap);
m_hBitmap = NULL;
m_memBackgroundDC.DeleteDC();
return;
}
m_hBitmap = hBmp;
if (!m_memBackgroundDC.m_hDC)
{
CWindowDC dc(NULL);
m_memBackgroundDC.CreateCompatibleDC(dc.m_hDC);
}

::SelectObject(m_memBackgroundDC.m_hDC, m_hBitmap);

}


然后通过DrawBackground来绘制出来

void DrawBackGround(HDC pDCHandle, const CRect& rect)
{
if (m_hBitmap)
{
CDCHandle dcTemp(NULL);
dcTemp.CreateCompatibleDC(pDCHandle);
dcTemp.SelectBitmap(m_hBitmap);


CDCHandle dc(pDCHandle);
dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), dcTemp.m_hDC,
0, rect.top, SRCCOPY);
}
}


调用方法:
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP2);
SetBackBitmap((HBITMAP)bmpBackground.Detach());


可是这样放到OnDraw里为何没有绘制出来呢?
屏蔽了OnDraw里的所有的操作,都是绘制不出背景来,费解啊
...全文
47 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kbsoft 2011-06-28
我是自绘菜单,刚才说错了,是在WM_DRAWITEM里绘制的,但没画出来?
回复
kyotrue 2011-06-28
菜单是在非客户区域吧,相对于客户区域坐标都是负的,你这样画不上去啊。
非客户区域不是在WM_PAINT消息处理中,而是在WM_NCPAINT
回复
发动态
发帖子
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
社区公告
暂无公告