简单的自绘CListBox,重载虚MeasureItem和DrawItem这两个虚函数
[cpp] view plain copy
- //例如CNewListBox继承自CListBox,重载虚MeasureItem和DrawItem这两个虚函数,代码如下:
- void CNewListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
- {
- // TODO: Add your code to draw the specified item
- ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
- LPCTSTR lpszText = (LPCTSTR) lpDrawItemStruct->itemData;
- ASSERT(lpszText != NULL);
- CDC dc;
- dc.Attach(lpDrawItemStruct->hDC);
- // Save these value to restore them when done drawing.
- COLORREF crOldTextColor = dc.GetTextColor();
- COLORREF crOldBkColor = dc.GetBkColor();
- // If this item is selected, set the background color
- // and the text color to appropriate values. Also, erase
- // rect by filling it with the background color.
- if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
- (lpDrawItemStruct->itemState & ODS_SELECTED))
- {
- dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
- dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
- dc.FillSolidRect(&lpDrawItemStruct->rcItem,
- ::GetSysColor(COLOR_HIGHLIGHT));
- }
- else
- {
- if(lpDrawItemStruct->itemID%2)
- dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(128,128,128));
- else
- dc.FillSolidRect(&lpDrawItemStruct->rcItem, RGB(255,128,255));
- }
- // If this item has the focus, draw a red frame around the
- // item's rect.
- if ((lpDrawItemStruct->itemAction | ODA_FOCUS) &&
- (lpDrawItemStruct->itemState & ODS_FOCUS))
- {
- CBrush br(RGB(0, 0, 128));
- dc.FrameRect(&lpDrawItemStruct->rcItem, &br);
- }
- lpDrawItemStruct->rcItem.left += 5;
- // Draw the text.
- dc.DrawText(
- lpszText,
- strlen(lpszText),
- &lpDrawItemStruct->rcItem,
- DT_LEFT|DT_SINGLELINE|DT_VCENTER);
- // Reset the background color and the text color back to their
- // original values.
- dc.SetTextColor(crOldTextColor);
- dc.SetBkColor(crOldBkColor);
- dc.Detach();
- }
- void CNewListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
- {
- // TODO: Add your code to determine the size of specified item
- ASSERT(lpMeasureItemStruct->CtlType == ODT_LISTBOX);
- LPCTSTR lpszText = (LPCTSTR) lpMeasureItemStruct->itemData;
- ASSERT(lpszText != NULL);
- CSize sz;
- CDC* pDC = GetDC();
- sz = pDC->GetTextExtent(lpszText);
- ReleaseDC(pDC);
- lpMeasureItemStruct->itemHeight = 2*sz.cy;
- }
- // 其中m_listBox为CNewListBox类型的对象
- #define IDC_LISTBOX 0x1101
- m_listBox.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|WS_VSCROLL|WS_HSCROLL|
- LBS_OWNERDRAWVARIABLE, CRect(0, 0, 380, 280), this, IDC_LISTBOX);
效果图如下所示:
http://blog.csdn.net/visualeleven/article/details/5935430
简单的自绘CListBox,重载虚MeasureItem和DrawItem这两个虚函数的更多相关文章
- 简单的自绘CListBox(多行显示)(覆盖DrawItem函数,然后用CDC绘制)
之前写过一个自绘的CListBox类,详细请参考http://blog.csdn.net/VisualEleven/archive/2010/10/12/5935430.aspx现在修改这之前的代码, ...
- Ubuntu虚机中SVN连接出错,虚机本机可正常CO,CIN,解决方法
Ubuntu虚机中SVN连接出错,虚机本机可正常CO,CIN,外面机器无法正常连接. 解决: 虚机换个IP即可正常连接,原因不明,有可能为公司网管对该IP做了某些限制. PS:VMware中只需将网络 ...
- Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
Batch Normalization Batch Normalization是深度学习领域在2015年非常热门的一个算法,许多网络应用该方法进行训练,并且取得了非常好的效果. 众所周知,深度学习是应 ...
- C++ 虚函数表与多态 —— 多重继承的虚函数表 & 内存布局
多重继承的虚函数表会有两个虚表指针,分别指向两个虚函数表,如下代码中的 vptr_s_1.vptr_s_2,Son类继承自 Father 和 Mather 类,并且改写了 Father::func_1 ...
- Python中使用cutecharts实现简单的手绘风格的图表
场景 效果 cutecharts的Github: https://github.com/chenjiandongx/cutecharts 注: 博客: https://blog.csdn.net/ba ...
- 简单的class及运算符重载
#include <iostream> #include <vector> #include <algorithm> using namespace std; cl ...
- C#通过重载构造函数传递参数、实现两个窗体下的方法的互相调用
直接切入主题 有时候同一个项目下我们可能会使用多个窗体,窗体间方法互相调用也不可避免,好了,使用无参无返回值的方法,开始上图 1.新建一个winform项目Form1,并再添加一个窗体Form2:拖入 ...
- <经验杂谈>C#中一种最简单、最基本的反射(Reflection):通过反射获取方法函数
说起反射之前和很多用C#/.net的同仁们一样,相比于一般应用层对数据的增删改查总有点觉得深奥到难以理解.其实程序这东西,用过.实践过就很简单,我一直这么认为. 先说下概念:反射 Reflection ...
- kvm 虚机环境碰到的两个小坑
1)当部署一个商用VA的时候,出现virsh version|grep "Using library" 返回错误,经过查看,发现里面有汉字,猜应该是这个原因导致无法检索到libvi ...
随机推荐
- sqlServer2008 手工注入
接着上一篇的<mysql手工注入> 参考:http://hi.baidu.com/ciqing_s/item/971bf994365130accc80e5ed http://hi.baid ...
- Use a layout_width of 0dip instead of wrap_content for better performance.......【Written By KillerLegend】
当你在一个Linearlayout布局中只为一个组件设置android:layout_weight属性时,那么这个组件将默认填充Linearlayout的剩余空间(宽度与高度方向),而不用事先进行测量 ...
- sublimetext2 中运行Python提示EOFError: EOF when reading a line
解决方法:一.安装sublimeREPL 打开sublimeText2按CTRL+SHIFT+P,英文版输入:install后选择Package Control: Install Package ...
- linux驱动路径
1. 按键驱动 \drivers\input\keyboard\utu2440_buttons.c 2. LED驱动 \drivers\char\utu2440-led.c 3. DM9000网卡驱动 ...
- 10大iOS开发者最喜爱的类库
该10大iOS开发者最喜爱的库由“iOS辅导团队”成员Marcelo Fabri组织投票选举而得,参与者包括开发者团队,iOS辅导团队以及行业嘉宾.每个团队都要根据以下规则选出五个最好的库:1)不能投 ...
- mysql笔记整理
删除整个表 TRUNCATE TABLE 表名; 持久链接 自动提交
- C语言中的字符串拷贝函数strcpy和内存拷贝函数memcpy的区别与实现
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符'\0'. 已知st ...
- Windows下将txt导入MySQL及远程连接设置
1.修改字符编码,全部修改为gbk.这样修改,重启后又会恢复默认值. show variables like '%char%'; set character_set_database=gbk; 其中, ...
- WPF 多线程处理(4)
WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 开始一个线程处理读取的文件并且更新到list ...
- ffmpeg mp3转ogg的命令
ffmpeg.exe -y -i bb.mp3 -acodec libvorbis -ab 128k bb.ogg