社区
界面
帖子详情
CListCtrl 能同时加载不同大小的位图吗?
sjchao
2007-09-17 06:03:33
为一个CListCtrl添加几个item,设为report,如下:
组1
成员1
成员2
组2
成员3
成员4
组的那些item 加载的图标为16*16;
成员的那些item加载的图标为24*24;
能做到吗?
...全文
222
11
打赏
收藏
CListCtrl 能同时加载不同大小的位图吗?
为一个CListCtrl添加几个item,设为report,如下: 组1 成员1 成员2 组2 成员3 成员4 组的那些item 加载的图标为16*16; 成员的那些item加载的图标为24*24; 能做到吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sjchao
2007-09-19
打赏
举报
回复
可以
你会揭贴吗?
-------------不带这样的吧,可以的话,请把实现写一下吧,写了就结帖。
covsno
2007-09-19
打赏
举报
回复
当然你也可以将16*16的图标转成24*24的,只不过有效区仍然是16*16,
JacksonFox
2007-09-19
打赏
举报
回复
楼上的问得好。。。。
顶楼上的。。。
covsno
2007-09-19
打赏
举报
回复
凑合着看吧
covsno
2007-09-19
打赏
举报
回复
.h
CImageList m_imglist,m_imglist2;
afx_msg LRESULT OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult );
virtual void PreSubclassWindow();
.cpp
ON_NOTIFY_REFLECT ( NM_CUSTOMDRAW, OnCustomDrawList )
void CMyCustomDrawListCtrl::PreSubclassWindow()
{
CListCtrl::PreSubclassWindow();
}
LRESULT CMyCustomDrawListCtrl::OnCustomDrawList ( NMHDR* pNMHDR, LRESULT* pResult )
{
NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( pNMHDR );
static bool bHighlighted = false;
/*
pLVCD->nmcd.dwItemSpec//行号
pLVCD->iSubItem //列号
*/
*pResult = CDRF_DODEFAULT;
switch(pLVCD->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
{
*pResult = CDRF_NOTIFYITEMDRAW;
break;
}
case CDDS_ITEMPREPAINT:
{
*pResult = CDRF_DODEFAULT|CDRF_NOTIFYSUBITEMDRAW;
break;
}
case CDDS_ITEMPOSTPAINT :
{
*pResult = CDRF_DODEFAULT;
break;
}
case CDDS_SUBITEM|CDDS_ITEMPREPAINT :
{
if(pLVCD->iSubItem==1)
{
if(pLVCD->nmcd.dwItemSpec==2)
{
CString str=GetItemText(pLVCD->nmcd.dwItemSpec,pLVCD->iSubItem);
CRect mrc,mrc2;
this->GetSubItemRect(pLVCD->nmcd.dwItemSpec,pLVCD->iSubItem,0,mrc);
mrc2=mrc;
ScreenToClient(&mrc2);
POINT pt={mrc.left,mrc.top};
::SelectObject(pLVCD->nmcd.hdc,GetFont());
this->m_imglist2.Draw(CDC::FromHandle(pLVCD->nmcd.hdc),1,pt,ILD_TRANSPARENT);
mrc.left+=24;
::DrawText(pLVCD->nmcd.hdc,str,str.GetLength(),&mrc,0);
::InvalidateRect(m_hWnd,mrc2,TRUE);
*pResult=CDRF_DODEFAULT;
*pResult = CDRF_SKIPDEFAULT;
break;
}
if(pLVCD->nmcd.dwItemSpec==1)
{
CString str=GetItemText(pLVCD->nmcd.dwItemSpec,pLVCD->iSubItem);
CRect mrc,mrc2;
this->GetSubItemRect(pLVCD->nmcd.dwItemSpec,pLVCD->iSubItem,0,mrc);
mrc2=mrc;
ScreenToClient(&mrc2);
POINT pt={mrc.left,mrc.top};
::SelectObject(pLVCD->nmcd.hdc,GetFont());
this->m_imglist.Draw(CDC::FromHandle(pLVCD->nmcd.hdc),1,pt,ILD_TRANSPARENT);
mrc.left+=16;
::DrawText(pLVCD->nmcd.hdc,str,str.GetLength(),&mrc,0);
::InvalidateRect(m_hWnd,mrc2,TRUE);
*pResult=CDRF_DODEFAULT;
*pResult = CDRF_SKIPDEFAULT;
break;
}
}
*pResult=CDRF_DODEFAULT;
break;
}
}
return 1L ;
}
调用
m_SkinList.m_imglist.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);
HBITMAP bmp=::LoadBitmap(::AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP2));
CBitmap pBitmap;
pBitmap.m_hObject=bmp;
m_SkinList.m_imglist.Add(&pBitmap,RGB(0,255,0));
::DeleteObject(bmp);
bmp=::LoadBitmap(::AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
pBitmap.m_hObject=bmp;
m_SkinList.m_imglist.Add(&pBitmap,RGB(255,255,255));
::DeleteObject(bmp);
m_SkinList.m_imglist2.Create(24,24,ILC_COLOR24|ILC_MASK,0,0);
bmp=::LoadBitmap(::AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP2));
pBitmap.m_hObject=bmp;
m_SkinList.m_imglist2.Add(&pBitmap,RGB(0,255,0));
::DeleteObject(bmp);
bmp=::LoadBitmap(::AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
pBitmap.m_hObject=bmp;
m_SkinList.m_imglist2.Add(&pBitmap,RGB(255,255,255));
::DeleteObject(bmp);
char pingdao[32]={0};//
LV_COLUMN lvcolumn;
CRect rect;
this->m_SkinList.GetWindowRect(&rect);
char* rgtsz[16]={"测试1","测试2","测试3"};
for(int i=0;i<3;i++)
{
lvcolumn.cx = rect.Width()/3;
lvcolumn.mask = LVCF_FMT|LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
lvcolumn.fmt = LVCFMT_LEFT;
lvcolumn.pszText = rgtsz[i];
lvcolumn.iSubItem = i;
lvcolumn.iOrder=i;
m_SkinList.InsertColumn(i, &lvcolumn);
}
for(int nIndex=0;nIndex<3;nIndex++)
{
LV_ITEM lvitemAdd={0};
lvitemAdd.mask=LVIF_TEXT;
lvitemAdd.iItem=nIndex;
lvitemAdd.iSubItem=0;
lvitemAdd.pszText="ch";
if(-1!=m_SkinList.InsertItem(&lvitemAdd))
{
LV_ITEM lvitem={0};
lvitem.mask=LVIF_TEXT;
lvitem.iItem=nIndex;
lvitem.iSubItem=1;
lvitem.pszText=_T("nodeCPT");
m_SkinList.SetItem(&lvitem);
memset(&lvitem,0,sizeof(lvitem));
lvitem.mask=LVIF_TEXT;
lvitem.iItem=nIndex;
lvitem.iSubItem=2;
lvitem.pszText=_T("sdfsdf");
m_SkinList.SetItem(&lvitem);
}
}
ListView_SetExtendedListViewStyle(m_SkinList.m_hWnd, LVS_EX_FULLROWSELECT | LVS_EX_HEADERDRAGDROP);
covsno
2007-09-18
打赏
举报
回复
可以
2个ImageList就行了
vocanicy
2007-09-18
打赏
举报
回复
CListCtrl肯定不行,你得找第三方写的List控件
Chivalry
2007-09-18
打赏
举报
回复
够呛
好像得使用ImageList,但是这个图像大小是固定好的
sjchao
2007-09-18
打赏
举报
回复
怎么又没人理睬啊,人丁渐少啊
covsno
2007-09-18
打赏
举报
回复
可以
你会揭贴吗?
sjchao
2007-09-18
打赏
举报
回复
可以
2个ImageList就行了
-----------------------
能给出实现代码吗?要同时能显示的。
MFC 自绘
CLi
stCtrl
列表框控件
在CSkinList基础上整理了代码 修改部分:check图标改为自绘 下拉框滑块部分由
加载
位图
改为自绘 说明:可自由修改背景色、文本色 文本
大小
行列
大小
、去掉标题栏等操作 能直接运用到工程 待完善: 0、列排序; 1、...
VC++ 专家指导.doc
(30) 怎样
加载
其他的应用程序? 27 (31) 如何在代码中获取工具条和状态条的指针 28 (33) 如何设置工具条标题 29 (34) 如何使窗口始终在最前方? 30 (35) 如何在对话框中显示一个
位图
30 (36) 如何改变对话...
VC++常用功能实例
5.怎样
加载
其他的应用程序? 39 6. 确定应用程序的路径 39 7. 获得各种目录信息 40 8. 如何自定义消息 40 9. 如何改变窗口的图标? 40 10. 如何改变窗口的 缺省风格? 40 11. 如何将窗口居中显示? 41 12. 如何让窗口和 ...
VC++常用的共用函数100多页
5.怎样
加载
其他的应用程序? 39 6. 确定应用程序的路径 39 7. 获得各种目录信息 40 8. 如何自定义消息 40 9. 如何改变窗口的图标? 40 10. 如何改变窗口的 缺省风格? 40 11. 如何将窗口居中显示? 41 12. 如何让窗口和 ...
VC之美化界面篇本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础:
图6是个简单的例子,通过OnEraseBkgnd为对话框
加载
了一副
位图
背景: 图6 利用WM_ ERASEBKGND消息美化界面 实现代码也很简单: BOOL CUi4Dlg::OnInitDialog() { //… //
加载
位图
//CBitmap m_Back; m_Back....
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章