简单的自绘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 ...
随机推荐
- Mac上安装brew
用过ubuntu系统的都知道,上面有一个命令apt-get 很方便可以快速的安装很多软件 特别lamp环境 都是一键安装. 在mac上也有类似的命令 brew brew用法可以访问官网地址 http ...
- mysql数据库表格导出为excel表格
在本地数据库中操作如下: 由于excel表格的编码是GBK,所以导出时要加一个设置字符编码: select * from 某个表 into outfile 'd:/文件名.xls' CHARACTER ...
- js javascript:void(0) 真正含义
我想使用过ajax的都常见这样的代码:<a href="javascript:doTest2();void(0);">here</a>但这儿的void(0) ...
- c语言知识点总结(摘自head first c)
gcc name.c -o name; ./name或者gcc name.c -o name && ./name;同时执行关键字:void sizeof(运算符,它能告诉你某样东 ...
- c#使用easyhook库进行API钩取
目标:使calc程序输入的数自动加1 (当别人使用时,总会得不到正确的结果,哈哈) 编写注入程序 ————————————————————————————————— class Program中的方法 ...
- WIN7右下角的声音图标不见了
有时候电脑启动了,但是声音图标却不见了,造成调试声音相当的麻烦,那么怎么来处理呢? 一:ctrl+shit+Esc键打开任务管理器 二:找到exeplore.exe,结束进程. 三:重新建立进程 上述 ...
- 为什么我们使用192.168.0.1作为内网ip
私有IP地址是一段保留的IP地址.只是使用在局域网中,在Internet上是不使用的. 私有IP地址的范围有: 10.0.0.0-10.255.255.255 172.16.0.0—172.31.25 ...
- iOS多线程编程Part 2/3 - NSOperation
多线程编程Part 1介绍了NSThread以及NSRunLoop,这篇Blog介绍另一种并发编程技术:NSOPeration. NSOperation & NSOperationQueue ...
- 帝国cms刷洗内容页提示.phome_ecms_news_data_' doesn't exist
帝国cms后台刷新提示.phome_ecms_news_data_' doesn't exist解决方法: 刷新所有信息内容页面时提示“Table '*.phome_ecms_article_data ...
- 如何导入ShareSDK的sample
由于项目需要,最近需要做10几个平台的分享,如果自己去集成,浪费很多时间,而且还很难成功.最后发现Sharesdk,可以满足项目需求. 首先,需要到他们的官网http://sharesdk.cn/下载 ...