MFC list control控件(report风格)下不显示图片,总是显示白色图标

guoln1010 2017-11-16 03:37:20
如题,不知道是哪个属性没用对,有图片但是是白色框。
m_cameraList.GetClientRect(&rect);   

// 为列表视图控件添加全行选中和栅格风格
m_cameraList.SetExtendedStyle(m_cameraList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_SUBITEMIMAGES);

// 为列表视图控件添加四列
m_cameraList.InsertColumn(0, _T("是否启用"), LVCFMT_CENTER, rect.Width()/5, 0);
m_cameraList.InsertColumn(1, _T("名字"), LVCFMT_CENTER, rect.Width()/5, 1);
m_cameraList.InsertColumn(2, _T("端口"), LVCFMT_CENTER, rect.Width()/5, 2);
m_cameraList.InsertColumn(3, _T("类型"), LVCFMT_CENTER, rect.Width()/5, 3);
m_cameraList.InsertColumn(4, _T("相机ID"), LVCFMT_CENTER, rect.Width()/5, 4);

//图像列表与CListCtrl控件关联
m_ImageList.Create(32, 32, ILC_COLOR32, 2, 20);
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON2));
m_cameraList.SetImageList(&m_ImageList,LVSIL_SMALL);



m_cameraList.InsertItem(0,false,0);
m_ImageList.Detach();
...全文
520 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoln1010 2017-11-20
  • 打赏
  • 举报
回复
添加png图片的代码
if (nCol == 0)
		{
			Image image_true(_T("res/png/true.png"));
			Image image_false(_T("res/png/false.png"));
			Graphics gh(lpDrawItemStruct->hDC);
			if('t' == lpBuffer[0])
			{
				gh.DrawImage(&image_true,rcItem.left+(rcItem.right-rcItem.left)/2-8,rcItem.top+(rcItem.bottom-rcItem.top)/2-12,16,16);
			}else
			{
				gh.DrawImage(&image_false,rcItem.left+(rcItem.right-rcItem.left)/2-8,rcItem.top+(rcItem.bottom-rcItem.top)/2-12,16,16);
			}
		}else
		{
			CFont nFont ,* nOldFont; 
			nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("微软雅黑"));//创建字体 

			DrawText(lpDrawItemStruct->hDC, lpBuffer,strlenT(lpBuffer), 
				&rcItem, uFormat) ;
			pDC->SelectStockObject(SYSTEM_FONT) ;
		}
guoln1010 2017-11-17
  • 打赏
  • 举报
回复
没有 我2楼贴的其他人的,不知道怎么在drawItem中添加插入icon
Eleven 2017-11-17
  • 打赏
  • 举报
回复
自己解决了?
guoln1010 2017-11-16
  • 打赏
  • 举报
回复
最近在一个小工具的开发中,用到LISTCTRL,其中要更改每行的行高,用了CSDN里面一位网友提供的方法(如下所示),但这个函数里面只能描画文字部分,Image部分应该怎么画?哪位高手给给意见!!!

解决方案:

1. 设置List Control的属性 Owen Draw Fixed.

2. 自定义CMyListCtrl, 继承于CListCtrl,并重载CListCtrl::DrawItem.
必须重载DrawItem函数,而不能自己处理WM_DRAWITEM,否则MFC处理时运行到CListCtrl::DrawItem会抱错。( 此函数的内容只有一条语句: ASSERT(FALSE),所以,坚决不能运行^_^)

3. 为List Control所在的对话框添加对WM_MEASUREITEM消息的处理OnMeasureItem。在响应过程中修改结构中的itemHeight参数。

注意: 不能简单地在CMyListCtrl中响应WM_MEASUREITEM消息,原因很简单,它根本收不到此消息。如果要更好的实现,可以提供一个CMyListCtrl::MeasureItem的函数,在对话框的消息OnMeasureItem中,调用此方法。

以下是重写后的DrawItem函数代码,
void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
TCHAR lpBuffer[256];

LV_ITEM lvi;

lvi.mask = LVIF_TEXT | LVIF_PARAM ;
lvi.iItem = lpDrawItemStruct->itemID ;
lvi.iSubItem = 0;
lvi.pszText = lpBuffer ;
lvi.cchTextMax = sizeof(lpBuffer);
VERIFY(GetItem(&lvi));

LV_COLUMN lvc, lvcprev ;
::ZeroMemory(&lvc, sizeof(lvc));
::ZeroMemory(&lvcprev, sizeof(lvcprev));
lvc.mask = LVCF_WIDTH | LVCF_FMT;
lvcprev.mask = LVCF_WIDTH | LVCF_FMT;

for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
{
if ( nCol > 0 )
{
// Get Previous Column Width in order to move the next display item
GetColumn(nCol-1, &lvcprev) ;
lpDrawItemStruct->rcItem.left += lvcprev.cx ;
lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left ;
}

// Get the text
::ZeroMemory(&lvi, sizeof(lvi));
lvi.iItem = lpDrawItemStruct->itemID;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.iSubItem = nCol;
lvi.pszText = lpBuffer;
lvi.cchTextMax = sizeof(lpBuffer);
VERIFY(GetItem(&lvi));

CDC* pDC;
pDC = CDC::FromHandle(lpDrawItemStruct->hDC);

if ( lpDrawItemStruct->itemState & ODS_SELECTED )
{
pDC->FillSolidRect(&lpDrawItemStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT)) ;
pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
}
else
{
pDC->FillSolidRect(&lpDrawItemStruct->rcItem, GetSysColor(COLOR_WINDOW)) ;
pDC->SetTextColor(GetSysColor(COLOR_WINDOWTEXT)) ;
}

pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));

UINT uFormat = DT_LEFT ;

::DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
&lpDrawItemStruct->rcItem, uFormat) ;

pDC->SelectStockObject(SYSTEM_FONT) ;
}
}
zgl7903 2017-11-16
  • 打赏
  • 举报
回复

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧