代码简写

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. HDU 4714 Tree2cycle(树型DP)

    解题思路: 将一棵树变成一个环.假设一个结点的分叉数目大于等于2.则将它与父节点断开.而且断开子结点数目sum - 2条边,并再次连接sum-2个儿子形成一条直链然后这条游离链与还有一条游离链相连,共 ...

  2. SGU 461 Wiki Lists dfs

    不难的题,不过蛮有意思的dfs #include <iostream> #include <cstdio> #include <fstream> #include ...

  3. double和decimal的ToString("#.##")方法使用的是四舍五入;

    顺带提一下: 1. double和decimal的ToString("#.##")方法使用的是四舍五入: 2. 静态类System.Math下的Round(decimal d, i ...

  4. 安装oracle常见问题分析

    1,之前已经安装过软件,卸载不完全 /tmp/.oracle /tmp/ora* /var/tmp/ora* /etc/ora* 2,安装介质权限或者本身就有问题 3,oracle用户 $/HOME/ ...

  5. WISP > Client+AP > WDS  的区别

    最直白易懂的分别:WISP > Client+AP > WDS WISP,真正万能,兼容任何厂牌的上级AP,毋须设置上级AP,不受上级AP的信道影响,自由DHCP,所带机器或设备的IP,上 ...

  6. Tensorlfow学习笔记----collection

    本文来源:http://blog.csdn.net/u012436149/article/details/53894354 tensorflow  之  collection tensorflow的c ...

  7. 【Henu ACM Round#17 D】Hexagons!

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 题目的图吓人. 找下规律就会发现从内到外是1,6,12,18 即1,16,26,36... 即1+6(1+2+3+...) 等差求和 ...

  8. 【Uva 10118】Free Candies

    [Link]: [Description] 有4堆书; 每本书编号从1..20 每堆书都是N本; 然后每次只能从任意一堆的堆顶拿一本书装到自己的口袋里; 你的口袋最多容纳5本书; 当你的口袋里有两本一 ...

  9. (七十一)关于UITableView退出崩溃的问题和滚动究竟部的方法

    [TableView退出崩溃的问题] 近期在使用TableView时偶然发如今TableView中数据较多时,假设在滚动过程中退出TableView到上一界面.会引起程序的崩溃.经过网上查阅和思考我发 ...

  10. H.264视频编解码SoC满足高清DVR设计需求

    硬盘录像机(DVR)作为监控系统的核心部件之一,在10年里高速发展,从模拟磁带机的替代品演变成具有自己独特价值的专业监控数字平台,并被市场广泛接受.监控系统伴随DVR这些年的发展向着IP化.智能化发展 ...