工控编程吧
标题:
66上位机VC MFC列表框任意设置背景图片
[打印本页]
作者:
qq263946146
时间:
2015-12-7 21:56
标题:
66上位机VC MFC列表框任意设置背景图片
(, 下载次数: 5)
上传
点击文件名下载附件
66上位机VC MFC列表框任意设置背景图片
功能展示
有时我们开发上位机时想要设置列表框的背景图片,美化下程序界面。但VC默认的是不支持列表框背景的设置,我们就得自己动手实现,我们当前例程就实现 了列表框背景图片的任意设置,效果如图;
要点提示
列表框的背景图片设置主要是通过列表框的绘制背景方法实现OnEraseBkgnd(); 在此函数中我们为防止绘制背景时闪烁,定义一个缓冲CDC memDC;先将背景图片加载到此DC中,再进行绘制;
另外我们在CtlColor()函数返回时,得返回透明的画刷还是实现背景图片绘制效果return (HBRUSH)GetStockObject (HOLLOW_BRUSH) ;;
实现功能
1.新建基于对话框的应用程序
2.再创建我们自己的派生类class CBmpList : public CListBox;添加一位图变量作为背景图片的保存public: CBitmap m_bmp;再添加它的设置函数void CBmpList::SetBkBmp(UINTnIDSource) { if(m_bmp.GetSafeHandle() ){ m_bmp.DeleteObject(); }
m_bmp.LoadBitmap(nIDSource); Invalidate();}
3.添加OnLButtonDown(), OnVScroll()函数实现鼠标按下和滚动条滚动时的生绘if(m_bmp.GetSafeHandle())Invalidate();
4.添加CtlColor()及OnEraseBkgnd()实现我们背景图片的绘制
HBRUSH CBmpList::CtlColor(CDC* pDC, UINT nCtlColor)
{
if(m_bmp.GetSafeHandle() )
{
pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(255,0,255));
return (HBRUSH)GetStockObject (HOLLOW_BRUSH) ;
}
return NULL;
}
复制代码
BOOL CBmpList::OnEraseBkgnd(CDC* pDC)
{
if(m_bmp.GetSafeHandle())
{
SendMessage( WM_SETREDRAW, FALSE, 0L);
CRect rc;
GetClientRect(rc);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(m_bmp);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY);
SendMessage( WM_SETREDRAW, TRUE, 0L);
}
return CListBox::OnEraseBkgnd(pDC);
}
复制代码
5.最后就是我们自己创建的类的使用,在对话框资源中拖拽一列表框,关联我们创建类的变量CBmpList m_List;给这变量初始化些文字上去 CString str;
for(inti=0;i<68;i++)//给列表框添加些文字
{ str.Format("我是陈工添加的第%d行列表框文字",i);m_List.AddString(str); }
最后就是背景图片的任意设置m_List.SetBkBmp(IDB_BITMAP2);//设置列表框背景
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/d62e208bb996e7de801233228a139d39/0/0/w_19rt66yp0d.swf-albumId=4993681009-tvId=4993681009-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4