VC实现在ListBox中选择背景位图

vc修改列表框LISTBOX的背景颜色及字体颜色及其使用方法  一、修改背景颜色及字体颜色①   先创建一个基于对话框的工程,命名为test,然后在对话框上加入一个ListBox控件。     ②   在testDlg.h中加入一个成员变量:HBRUSH   m_hbrush;     ③   在OnInitDialog()中,加入m_hbrush=CreateSolidBrush(RGB(0,0,0);此处设置的RGB值可以改变ListBox的背景色。为了 阅读详情

VC实现在ListBox中选择背景位图
本文介绍如何在ListBox中添加更换背景位图,并提供源代码供参考。本文源代码运行效果图如下:

 

  一、基本原理:

  构造一个LISTBOX的子类CMYLISTBOX,在刷新背底的时候,选择背景位图。此时需要设置背景模式为透明,当你在其上写入文字的时候,文字背底就不会变白色,而是背景色;刷子也必须是空的,这样每次刷新的后,背景就不会改变。

  其中特别需要注意的是,当你的LISTBOX出现了滚动条的时候需要重新设置背底位图的尺寸的大小,减去相应的滚动条区域,否则,底图会把滚动条覆盖。

  二、实现代码

  下面把CMYLISTBOX类几个重载函数再说明一下:

//当你选择的ITEM变化时刷新;

void CMyListBox::OnSelchange()
{
iSelectChange = TRUE;
}

void CMyListBox::OnLButtonDown(UINT nFlags, CPoint point)
{
if(iSelectChange)
{
iSelectChange= FALSE;
Invalidate();
}
CListBox::OnLButtonDown(nFlags, point);
}

//设置画刷,背景模式,文字颜色HBRUSH CMyListBox::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT); //设置背景模式透明
pDC->SetTextColor(RGB(64,32,0));//设置文字颜色;
return m_brHollow; //设置空心画刷;
}
//在垂直滚动时刷新;void CMyListBox::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
Invalidate();
CListBox::OnVScroll(nSBCode, nPos, pScrollBar);
}
//在水平滚动时刷新;void CMyListBox::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
Invalidate();
CListBox::OnHScroll(nSBCode, nPos, pScrollBar);
}

//将背景位图画出来; BOOL CMyListBox::OnEraseBkgnd(CDC* pDC)
{
BITMAP bm;
m_bmp.GetBitmap(&bm);
m_pbmCurrent = &m_bmp;
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dcMem.SelectObject(m_pbmCurrent);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
return CListBox::OnEraseBkgnd(pDC);
}

  对于背景位图的大小,我们事先先判断一下区域大小;

m_listbox.GetClientRect(LPRECT);

  然后判断如果需要更改背景位图大小的话,可以调用HBITMAP CMylistboxDlg::GetSizeBITMAP(HBITMAP hBitmap, int w, int h)函数,这个函数可以根据把你的HBITMAP减切至适当大小(w,h)。具体一些其它函数就不一一介绍。

  说明,可能有人通过对LISTBOX的DRAWITEM函数进行重载,实现的方法与此方法原理不同,每个ITEM都是画出来的,不是作为一个整体,所以其在刷新的时候可能会慢一点,但或许程序界面的抖动会少些。

  代码我已经整理了一遍,可能还可以部分优化,如果有兴趣可以可以在下面留言探讨。

实现在listbox中加入图标 实现在listbox中加入图标,vc6.0平台 立即下载

相关推荐

ListBox 贴背景图 VC

ListBox 贴背景图 美化ListBox

列表类设置背景图片(VC+MFC)

在重载的类里添加消息响应函数HBRUSH CBitmapListBox::CtlColor(CDC* pDC, UINT nCtlColor){  CBrush m_brHollow; m_brHollow.CreateStockObject(HOLLOW_BRUSH); pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(64,32,0));

深未来技术 1042

WPF listBox 漂亮的listBOX

WPF listBox 漂亮的listBOX

listbox美化——添加图片、修改背景色

先上图:   这里添加固定的图片的。 代码: private Color RowBackColorAlt = Color.FromArgb(200, 200, 200);//交替色 private Color RowBackColorSel = Color.FromArgb(150, 200, 250);//选择项目

蝉音荷律 5532

VIO实战前传:手把手教你解读Kalibr双目IMU标定报告与参数应用

本文详细解析Kalibr双目IMU联合标定报告的核心参数与应用方法,涵盖重投影误差分析、IMU误差指标解读、关键变换矩阵原理及VINS-Fusion实战配置。通过手把手教学帮助开发者准确理解标定结果,解决VIO算法落地中的参数配置难题,提升视觉惯性里程计的系统稳定性与精度。

weixin_42699679的博客 334

IQA图像质量评价 数据集介绍(LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K)

LIVE、TID2013、CSIQ、LIVEC、KonIQ-10K 数据集介绍

qq_37925923的博客 1万+

在Listbox加背景图

1.  建立一个窗体2.  放一个ComboBox和Listbox3.  改变Component的Style为csOwnerDrawVariable和ListBox的Style为lbOwnerDrawVariable。4.  声明5个TBitmap的全局变量5.  覆盖Form的OnCreate.6.  覆盖ComboBox的OnDraw.7.  覆盖ComboBox的OnMeasureItem.

chenzhechenge的专栏 1308

GBT 27930-2015/2023国标充电协议A类CAN报文ID说明

国标充电CAN的ID,仅供学习参考。

qqq080的博客 7819

如何在EDITBOX控件中使用背景位图

在VC中,标准的WINDOWS控件如TREEVIEW,EDITBOX,COMBOBOX和LISTBOX等控件都不支持选择背景位图的属性,所以如果要使这些标准控件达到这种效果,必须有些非常规的方法。本文介绍一个CEDIT类如何实现背景位图,并且可以更换背景的例子。可能实现的方法还有其它种,如果有兴趣可以大家探讨。 本文程序运行效果图下面介绍CMYEDITCTRL类几个关键变量和函数。 第一步在该类中

beatle.Y 866

LaTeX双栏浮动结构实战:用dblfloatfix解决跨栏图表排版难题

本文深入探讨了LaTeX双栏浮动结构在学术论文排版中的常见问题,特别是IEEE会议论文中的跨栏图表定位难题。通过介绍dblfloatfix包的整合解决方案,帮助用户实现精准的底部定位和浮动顺序保持,提升排版效率与质量。

weixin_30872499的博客 443

Quartus II 13.0安装避坑指南:从下载到破解的完整流程(附常见错误解决方案)

本文提供Quartus II 13.0软件的详细安装与破解指南,涵盖从下载准备、路径设置、主程序安装到授权配置的全流程。重点解析了破解过程中生成和修改license.dat文件的核心步骤,并针对“无法找到有效的License文件”等常见错误提供了实用的解决方案,帮助用户快速构建稳定的FPGA开发环境。

weixin_29291863的博客 760

图片背景编辑框的实现

作者:zhoudb在VC中,标准的WINDOWS控件如TREEVIEW,EDITBOX,COMBOBOX和LISTBOX等控件都不支持选择背景位图的属性,所以如果要使这些标准控件达到这种效果,必须有些非常规的方法。本文介绍一个CEDIT类如何实现背景位图,并且可以更换背景的例子。可能实现的方法还有其它种,如果有兴趣可以大家探讨。本文程序运行效果图下面介绍CMYEDITCTRL类几个关键变量和函

Y___Y的专栏 2118

FFmpeg 开发(14):Android FFmpeg + MediaCodec 实现视频硬解码

MediaCodec 是 Android 提供的用于对音视频进行编解码的类,它通过访问底层的 codec 来实现编解码的功能,是 Android media 基础框架的一部分,通常和 MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface和AudioTrack 一起使用。

字节流动 3万+

Edit控件中字体、颜色、的局部改变及背景的改变

<br />http://hi.baidu.com/%D0%A1%C2%DF%BC%AD/blog/item/0a988d3965f1112cb9998f38.html<br /> <br />=以下来自优快云、vckbase、百度空间、百度知道=<br />利用CFontDialog和CColorDialog两个类创建两个对话框,使选择的字体大小、类型和字体的颜色应用到EDIT中<br />。<br /> CFontDialog fontDlg; <br /> if (fontDlg.DoModal

abin_gha的专栏 9273

30. 如何使用 SEGW 的 redefine 功能对 SAP 标准 OData 服务进行扩展

SAP 发布了很多标准的 Fiori 应用,可以通过笔者的文章里提到的进行浏览。比如 My Opportunities 就是 SAP CRM 领域的一个 Fiori 应用:下图是 Opportunity 明细页面的 Info 标签页:假设我们想在这些标准字段的末尾增添一个新字段 Created By,用来维护当前 Opportunity 的创建者。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1175

《派出你的AI同事:WorkBuddy案例实战》062:投研资讯摘要与预警

投研资讯摘要与预警:新闻、公告、行情交给 AI 同事提炼与预警,投研从“刷资讯”变成“读摘要”。

LuckyHanMo的博客 184

MFC中各种控件透明的实现方法总结

<br /><br />Button:<br />资料来源:<br />http://www.cnblogs.com/songsu/articles/1370665.html<br />关键是其中的OnEraseBkgnd。OnDrawItem只是在原来BUTTON的位置上画了一个椭圆显示BUTTON的位置。<br />/*<br /> *    画项<br /> */<br />void CImageButton::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDra

天道酬勤 3084

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ListBox重绘

void CUIList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { BITMAP bmp; GetObject(m_hBitmap, sizeof(bmp), &bmp); HDC hDC = lpDrawItemStruct->hDC; CRect rc = lpDrawItemStruct->rcItem; HDC hMemD

pud_zha的专栏 1942

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mfc控件透明方法

MFC中各种控件透明的实现方法总结 Button: 资料来源: http://www.cnblogs.com/songsu/articles/1370665.html 关键是其中的OnEraseBkgnd。OnDrawItem只是在原来BUTTON的位置上画了一个椭圆显示BUTTON的位置。 /*  *    画项  */ void CImageButton

myqq1690957的专栏 1501

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

listbox的使用

VC ListBox的用法列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOL Create( DWord dwStyle, const RECT& rect,

.. 5126

VC基本常识(转)

AfxMessageBox("Copy");表示弹出一个消息框 消息是Copy;1.启动界面的步骤  a.创建一个单文档框架  b.在工程菜单里选择添加工程  c.在添加工程里选择Components and Controls Gallery  d.Components and

nabela1123的专栏 838

VC++中CList使用

VC++中CList使用 2011-03-27 10:32 435人阅读 评论(0) 收藏 举报 在Clist控件中显示网格 m_ctrlListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES );   VC++ 列表控件(CList) 使用方法2009-12-07 19:06VC++ 列表控件(CList) 使用方法2009-11-25 1

远有青山 7245
上一篇: 用VC++制作变形窗体
下一篇: 用VC++制作MSN、QQ 的消息提示窗口
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值