这个控件画出来应该像windows中点开一个文件夹,当为“图标”时,里面的样子。然后,再每项下方加一个checkbox。应该怎么构造它,并为它添加子项。能不能给一段代码?
解决方案 »
- Scoket通信的简单问题!
- MDI,子框架 永远处于 最底层 、且是最大化状态??
- 求一个2001版的msdn谢谢
- 自动填表,怎么样判断哪个表是当前选中的表呢?
- 急!求救:VC下关于Windows域编程的问题
- 请问哪里有<< 深入浅出MFC >>中的 源代码下载?谢谢了
- 紧急提问,有没有一种软件,可以设置某些个IP能连到我的机器上,期于的都不能连
- 可能很简单但还是要问
- 好像有一种比TOP_MOST还要更高级的窗口
- 在VC6.0中使用WebBrowser控件,为什么SetVisable不起作用?
- 向有经验的高手求教:如何处理中文目录和中文文件名?
- 为什么运行了swimmingfish2004的可编辑flexgrid代码后,出错
为什么Icon型的ListControl里,先不不住图片,只有一个白色的方框,里面有文本和checkbox,而且通过这句话:((CStatic*)GetDlgItem(IDC_TEST))->SetIcon(m_image.ExtractIcon(0));使得picture控件IDC_TEST里已经显示了这个icon,说明这个ImageList没问题。
CListCtrl* listctrl = (CListCtrl *)GetDlgItem(IDC_LISTCONTROL_DATA);
ASSERT(listctrl);
DWORD dwStyle = ::GetWindowLong(listctrl->m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
SetLastError(0);
int err=SetWindowLong(listctrl->m_hWnd, GWL_STYLE, dwStyle|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS);
if(err==0&&GetLastError()!=0)
{
TRACE("\nERROR:SetWindowLong() in createListControl(),in Page2.cpp\n");
return FALSE;
}
DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_SUBITEMIMAGES;//|LVS_REPORT;//|LVS_EX_GRIDLINES
ListView_SetExtendedListViewStyleEx(listctrl->m_hWnd, styles, styles ); DWORD dwStyle = ::GetWindowLong(listctrl->m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_REPORT);
SetLastError(0);
int err=SetWindowLong(listctrl->m_hWnd, GWL_STYLE, dwStyle|LVS_ICON);
if(err==0&&GetLastError()!=0)
{
TRACE("\nERROR:SetWindowLong() in createListControl(),in Page2.cpp\n");
return FALSE;
}
TCHAR rgtsz[2][10] = {_T("列头1"), _T("列头2")};
LV_COLUMN lvcolumn;
CRect rect;
listctrl->GetWindowRect(&rect);
for(int i=0;i<2;i++)
{
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;
if(i==0)
{
lvcolumn.cx = rect.Width()*3/5;
}
else
lvcolumn.cx = rect.Width()*2/5;
listctrl->InsertColumn(i, &lvcolumn);
}
CImageList m_image;
m_image.Create(16,16, TRUE|ILC_COLOR24, 3, 1);
listctrl->SetImageList(&m_image,LVSIL_NORMAL);
HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
m_image.Add(hIcon);
m_image.Add(hIcon);
m_image.Add(hIcon);
ASSERT(m_image.ExtractIcon(0));
((CStatic*)GetDlgItem(IDC_TEST))->SetIcon(m_image.ExtractIcon(0));
LV_ITEM lvitemAdd = {0};
lvitemAdd.mask = LVIF_TEXT|LVIF_IMAGE;
lvitemAdd.iItem = 0 ;
lvitemAdd.iSubItem = 0;
lvitemAdd.iImage = 0;
lvitemAdd.pszText =_T("毛毛1");;
listctrl->InsertItem(&lvitemAdd);
这个东西已经困扰我两天了,不能再拖了。帮帮忙呀
m_pImgList = new CImageList();
m_pImgList->Create(BIG_ICON_WIDTH, BIG_ICON_WIDTH, ILC_COLOR8, 0, 1);//可以先设定为一个,然后更改数量
m_pImgList->SetImageCount(**) CBitmap* pBmp = NULL;
for(int i = 0;i < **;i++)
{
//create pBmp or ICON
m_pImgList->Replace(i,pBmp,NULL); //delete pBmp; }
谢谢三楼,按照你说的,我的Icon显示出来了。
我改造了一下构建ImageList的方法,代码如下:
m_image = new CImageList();
m_image->Create(32, 32, ILC_COLOR24, 0, 1);
m_image->SetImageCount(3);
HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
m_image->Replace(0,hIcon);
m_image->Replace(1,hIcon);
m_image->Replace(2,hIcon);
m_image=listctrl->SetImageList(m_image,LVSIL_SMALL);
我的ListControl是SmallIcon型的。
Item的显示:checkbox在Icon左侧,文本在Icon右侧,可客户要求的是icon和文本都在Icon下面,这样的东西怎么实现
LVSIL_SMALL ,用 NORMAL看看