代码简写

MyListBox.h

class CUseListBox : public CListBox
{
typedef struct _ListBox_Data
{
CString strAppend; //第二排附加数据
LPTSTR hIcon; //图标
_ListBox_Data()
{
strAppend = _T("");
hIcon = NULL;
}
} List_AppendData;
public: virtual void DrawItem(LPDRAWITEMSTRUCT /*lpDrawItemStruct*/); virtual void MeasureItem(LPMEASUREITEMSTRUCT /*lpMeasureItemStruct*/);
void InsertStr(CString str,int iIndex,CString strAppend,LPTSTR icon);
afx_msg void OnDestroy(); afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
}

MyListBox.cpp

BEGIN_MESSAGE_MAP(CUseListBox, CListBox)
ON_WM_DESTROY()
ON_WM_ERASEBKGND()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP() void CUseListBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if (GetCount() == )
{
return;
}
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
List_AppendData * pData =(List_AppendData *) GetItemDataPtr(lpDrawItemStruct->itemID); //获取列表数据
CString str;
GetText(lpDrawItemStruct->itemID,str);
if (lpDrawItemStruct->itemAction | ODA_SELECT && lpDrawItemStruct->itemState & ODS_SELECTED)
{
CBrush t_brush1;
t_brush1.CreateSolidBrush(RGB(,,));
dc.FillRect(&lpDrawItemStruct->rcItem,&t_brush1); }
else
{
CBrush t_brush1;
t_brush1.CreateSolidBrush(RGB(,,));
dc.FillRect(&lpDrawItemStruct->rcItem,&t_brush1);
}
//画图标
HICON t_hIcon;
t_hIcon = LoadIcon(AfxGetInstanceHandle(),pData->hIcon);
DrawIcon(dc.m_hDC,,lpDrawItemStruct->rcItem.top+,t_hIcon);
//第一排字体
HFONT t_hFont= CreateFont(,,,,,,,,,,,,FF_MODERN,_T("宋体"));
dc.SelectObject(t_hFont);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(,,));
dc.TextOut(,lpDrawItemStruct->rcItem.top+,str,str.GetLength());
//第二排字体
HFONT t_hFont1= CreateFont(,,,,,,,,,,,,FF_MODERN,_T("宋体"));
dc.SelectObject(t_hFont1);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(,,));
str = pData->strAppend;
dc.TextOut(,lpDrawItemStruct->rcItem.top+,str,str.GetLength());
//底部边线
CPen t_pen(PS_SOLID,,RGB(,,));
dc.SelectObject(t_pen);
dc.MoveTo(,lpDrawItemStruct->rcItem.bottom-);
dc.LineTo(lpDrawItemStruct->rcItem.right,lpDrawItemStruct->rcItem.bottom-); dc.Detach();
} void CUseListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{ // TODO: 添加您的代码以确定指定项的大小
lpMeasureItemStruct->itemHeight = ;
}
void CUseListBox::InsertStr(CString str,int iIndex,CString strAppend,LPTSTR icon)
{
List_AppendData * pData = new List_AppendData;
pData->hIcon = icon;
pData->strAppend = strAppend;
int i = SetItemDataPtr(InsertString(iIndex,str),pData);
}
void CUseListBox::OnDestroy()
{
CListBox::OnDestroy(); // TODO: 在此处添加消息处理程序代码
int iCount = GetCount();
for (int i=; i<iCount; i++)
{
List_AppendData * pData = (List_AppendData *)GetItemDataPtr(i);
delete pData;
pData = NULL;
}
} BOOL CUseListBox::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 return CListBox::OnEraseBkgnd(pDC);
} void CUseListBox::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 CListBox::OnMouseMove(nFlags, point);
}

调用直接InsertStr就行

我写的加载图片

  CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CBitmap bmp, *pOldBmp;
HBITMAP bitmap;
CDC memDC;
memDC.CreateCompatibleDC(pDC);
if (pCell)
{
CRect rect;
GetCellRect(pCell->dwRow, pCell->dwCol, rect);
if (!pCell->FilePathName ==NULL )
{ BITMAP bm;
HBITMAP hBitmap = (HBITMAP)::LoadImage(
AfxGetInstanceHandle(),
pCell->FilePathName,
IMAGE_BITMAP,
, ,
LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE); bmp.DeleteObject();
bmp.Attach(hBitmap);
bmp.GetObject(sizeof(BITMAP), &bm);
memDC.CreateCompatibleDC(pDC);
pOldBmp =memDC.SelectObject(&bmp); int offH = rect.Height() - bm.bmHeight;
int offW = rect.Width() - bm.bmWidth;
if (offH>)
{
rect.top += offH / ;
rect.bottom -= (offH - offH / );
}
if (offW>)
{
rect.left += offW / ;
rect.right -= (offW - offW / );
}
//显示
pDC->StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(), &memDC, , , \
bm.bmWidth, bm.bmHeight, SRCCOPY); //Clean
memDC.SelectObject(pOldBmp);
bmp.DeleteObject(); }
}
//Clean
memDC.DeleteDC();

做了一下位置调整一般般吧

代码

今天发现里一个非常好用的Listbox自绘类,带不同文字字体和图片,觉得很有必要记下来的更多相关文章

  1. APACHE如何里一个站点绑定多个域名?用ServerAlias

    APACHE2如何里一个站点绑定多个域名?用ServerAlias以前很笨,要使多个域名指向同一站点总是这样写: <VirtualHost *:80>ServerAdmin i@kuigg ...

  2. VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug

    今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...

  3. APACHE如何里一个站点绑定多个域名?用ServerAlias servername

    APACHE2如何里一个站点绑定多个域名?用ServerAlias以前很笨,要使多个域名指向同一站点总是这样写: <VirtualHost *:80>ServerAdmin i@kuigg ...

  4. APACHE如何里一个站点绑定多个域名?用ServerAlias 转

    APACHE2如何里一个站点绑定多个域名?用ServerAlias以前很笨,要使多个域名指向同一站点总是这样写:<VirtualHost *:80>ServerAdmin i@kuigg. ...

  5. 排查dubbo接口重复注销问题,我发现了一个巧妙的设计

    背景 我在公司内负责自研的dubbo注册中心相关工作,群里经常接到业务方反馈dubbo接口注销报错.经排查,确定是同一个接口调用了两次注销接口导致,由于我们的注册中心注销接口不能重复调用,调用第二次会 ...

  6. artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.

    artTemplate里一个比不上jQuery tmpl模板的地方就是放一个数组进去它不会自动循环.

  7. 发现了一个非常棒的pyqt5的例子集

    发现了一个非常棒的pyqt5的例子集 https://github.com/892768447/PyQt 各种各样的PyQt测试和例子 [Python3.4.4 or Python3.5][PyQt5 ...

  8. Java 读数据库字段时发现的一个现象

    早上发现有一个网名叫“帅!是不需要理由”的一个人,在后台只能看到“帅!是不需要理”,“由”字就是不显示出来. 经过分析发现,在Access数据库中,name这个字段的长度是15,因为我知道Access ...

  9. 发现XMind一个超级牛逼的功能

    本来想要自己手动建立下文件夹的结构图,一不小心发现了一个大惊喜. 比如想要看一下360Downloads文件夹下的文件结构,可以先创建一个名叫360Downloads的主节点,然后把其文件夹下的文件直 ...

随机推荐

  1. 7. java操作MongoDB,采用_id查询

    转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...

  2. Centos7 网络出错(failed to start LSB: Bring up/down networking )

    这是我更换了VM虚拟机内存,重启后无法连接网络. 然后这是因为NetworkManager.service这个程序造成 解决方法: systemctl disable NetworkManager.s ...

  3. Windows平台下使用pthreads开发多线程应用

    pthreads简介 POSIX 1003.1-2001标准定义了编写多线程应用程序的API(应用程序编程接口),这个接口通常被称为pthreads.在常见的操作系统中,例如Unix.Linux.Ma ...

  4. Linux常用系统管理软件

    1.BleachBit是一款开源的系统清理工具,它可以释放磁盘空间,保护您的隐私,清除缓存,删除cookies.internet历史.临时文件.日志和丢弃的垃圾文件等,支持清除应用的残留数据,切碎文件 ...

  5. 在Windows下如何创建指定的虚拟环境

    前几天给大家分享了如何在默认的情况下创建虚拟环境,没来得及上车的伙伴,可以戳这篇文章:在Windows下如何创建虚拟环境(默认情况下).今天小编给大家分享一下,如何创建的指定的Python环境. 创建 ...

  6. BZOJ2115: [Wc2011] Xor(Dfs树,Xor线性无关组)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  7. 【VC++学习笔记一】MFC操作Excel

    最近在做一个读取Excel的功能,之前也做过相关的,但总是零零闪闪的,趁着正在劲头上,归纳一下: 利用Automation添加相关的类,在Excel2010中可以在安装文件夹下直接点击Excel.ex ...

  8. Python入门:全站url爬取

    <p>作为一个安全测试人员,面对一个大型网站的时候,手工测试很有可能测试不全,这时候就非常需要一个通用型的网站扫描器.当然能直接扫出漏洞的工具也有很多,但这样你只能算是一个工具使用者,对于 ...

  9. P2186 小Z的栈函数

    P2186 小Z的栈函数 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. INV:将栈顶 ...

  10. JAVA实现排队论

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/50401727 http://www.llwjy.com/blogdetail/3 ...