代码简写

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. (WPF)XAML 过程式代码

    当代码编译.x:Code 元素的内容将被放到.g.cs文件. <Window x:Class="WpfApplication7.MainWindow" xmlns=" ...

  2. Linux 6.2配置yum本地

    yum 1.挂在iso文件 [root@localhostmedia]# mount /dev/cdrom /media 2.安装createrepo createrepo是配置YUM源的配置工具,检 ...

  3. setTimeOut函数传参数

    这样使用,后面的4000无效 setTimeout(removeGift(customer_id,gift_id),4000); function removeGift(customer_id,gif ...

  4. doT.js灵活运用之嵌入使用

    基础的base_info_area <div id="base_info_area"></div> <script type="text/h ...

  5. ASE加、解密

    AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. /** * 加密 * * @param content 需要加密的内容 * ...

  6. POJ 1671 第二类斯特林数

    思路: 递推出来斯特林数 求个和 if(i==j)f[i][j]=1; else f[i][j]=f[i-1][j-1]+f[i-1][j]*j; //By SiriusRen #include &l ...

  7. Flex 集合 ArrayCollection 的使用

    转:http://keren.iteye.com/blog/380847 转:http://callan.iteye.com/blog/335551 集合是ActionScript 中功能强大的基于索 ...

  8. uni-app 地图初用 map

    一.uni-app 地图初用 map 代码如下: <template> <view> <!-- <page-head :title="title" ...

  9. HRBUST 1819 石子合并问题--圆形版

    石子合并问题--圆形版 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HRBUST. Original ...

  10. HypericHQ

    https://sourceforge.net/projects/hyperichq-zh-cn/?source=typ_redirect