紧急!高分求助--如何给状态条设置背景图

sdl2005lyx 2010-03-26 05:39:24
各位大侠:
本人用VC遇到一个关于状态条的问题,卡住了:为了美化界面,需要把状态条加上背景图片,我在工具条上已经成功加入背景图片,想用同样的方法给状态条也加上背景图片,却不成功!请教各位高手有什么好的办法!
...全文
208 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijianli9 2010-03-31
  • 打赏
  • 举报
回复
顶,学习了,
cnzdgs 2010-03-31
  • 打赏
  • 举报
回复
给你段简单的示例:
class CMyStatusBar : public CStatusBar
{
DECLARE_DYNAMIC(CMyStatusBar)
DECLARE_MESSAGE_MAP()
protected:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};

IMPLEMENT_DYNAMIC(CMyStatusBar, CStatusBar)

BEGIN_MESSAGE_MAP(CMyStatusBar, CStatusBar)
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

BOOL CMyStatusBar::OnEraseBkgnd(CDC* pDC)
{
RECT r;
GetClientRect(&r);
pDC->FillSolidRect(&r, RGB(0,128,128));
return TRUE;
}
Fireway2008 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sdl2005lyx 的回复:]
cnzdgs:非常感谢你的回复,我原先也是这样的做法,在工具栏成功了,但状态栏却不成功!下面是我的具体代码:(你能否给一个成功的例子发给我,万分感谢!)

class CStatusBarCtrlEx : public CStatusBar
{
..............
}
CStatusBarCtrlEx::CStatusBarCtrlEx()
{
bmpBackground……
[/Quote]

LZ可以换一种方法:
BOOL CStatusBarCtrlEx::OnEraseBkgnd(CDC* pDC) 
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);//创建兼容的设备
CBitmap *pOldBmp = memDC.SelectObject(&m_bmpBackground);//将位图选进设备
CRect rect;
GetWindowRect(&rect);//获取状态栏窗体大小
pDC->BitBlt(0,0, rect.GetWidth(), rect.GetHeight(), &memDC, 0,0, SRCCOPY);//设备之间的拷贝
memDC.SelectObject(pOldBmp);//恢复设备

return TRUE;
}
herocxw2005 2010-03-30
  • 打赏
  • 举报
回复
LZ
工具条上已经成功加入背景图片,
能不能把代码贴出来啊!我正需要的,谢谢
Eleven 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 laiyiling 的回复:]
看这里:
http://www.codeguru.com/Cpp/controls/statusbar/article.php/c5927

http://www.codeguru.com/forum/archive/index.php/t-357421.html
[/Quote]
up
Kudeet 2010-03-30
  • 打赏
  • 举报
回复
看这里:
http://www.codeguru.com/Cpp/controls/statusbar/article.php/c5927

http://www.codeguru.com/forum/archive/index.php/t-357421.html
chaoyong110 2010-03-29
  • 打赏
  • 举报
回复
学习学习 UP
sdl2005lyx 2010-03-29
  • 打赏
  • 举报
回复
cnzdgs,我按你的办法,还是不行,你能否给个例子给我,邮箱:sdl2002lyx@163.com,如果能行,我另外再送分。
hrjhrj12345 2010-03-28
  • 打赏
  • 举报
回复
up,分多,哈哈.
cnzdgs 2010-03-28
  • 打赏
  • 举报
回复
GetWindowRect(&rect);
改成
GetClientRect(&rect);
sdl2005lyx 2010-03-27
  • 打赏
  • 举报
回复
cnzdgs:非常感谢你的回复,我原先也是这样的做法,在工具栏成功了,但状态栏却不成功!下面是我的具体代码:(你能否给一个成功的例子发给我,万分感谢!)

class CStatusBarCtrlEx : public CStatusBar
{
..............
}
CStatusBarCtrlEx::CStatusBarCtrlEx()
{
bmpBackground.LoadBitmap(IDB_BK_STATUS);

brush.DeleteObject( );
brush.CreatePatternBrush(&bmpBackground);
}

BOOL CStatusBarCtrlEx::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
pDC->FillRect(&rect,&brush);

return TRUE;
// return CStatusBar::OnEraseBkgnd(pDC);
}
-小仙- 2010-03-27
  • 打赏
  • 举报
回复
应该是!
SullenSun 2010-03-27
  • 打赏
  • 举报
回复
O(∩_∩)O~,分多 up一下。。
wuhuwy 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cnzdgs 的回复:]
从CStatusBar派生一个类,在构造函数中载入图片,响应WM_ERASEBKGND消息贴图。
[/Quote]
正解!
deshare 2010-03-27
  • 打赏
  • 举报
回复
我也正想做这个呢,LZ 研究好了 可以给我学习一下么?
cnzdgs 2010-03-27
  • 打赏
  • 举报
回复
补充一句,响应WM_ERASEBKGND消息贴图后返回TRUE,不要调用基类的OnEraseBkgnd函数。
cnzdgs 2010-03-27
  • 打赏
  • 举报
回复
从CStatusBar派生一个类,在构造函数中载入图片,响应WM_ERASEBKGND消息贴图。

15,979

社区成员

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

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