MFC listcontrol 展示系统图标

MFC listcontrol 显示系统图标第一次打开子对话框能够显示系统图标,关了对话框后再打开就不能显示了。请问

MFC listcontrol 显示系统图标
MFC listcontrol 展示系统图标

第一次打开子对话框能够显示系统图标,关了对话框后再打开就不能显示了。请问大侠们,这是怎么回事,俺是业余的。。多多指点啊。。下面是部分代码...

BOOL CfilesDlg::OnInitDialog()
{
CDialog::OnInitDialog();

/*m_list1.SetHeaderTextColor(RGB(0,0,0)); //设置头部字体颜色
m_list1.SetHeaderBKColor(100,255,100,8); //设置头部背景色
m_list1.SetHeaderFontHW(12,0);         //设置头部字体高度,和宽度,0表示缺省,自适应 */

CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_list1.InsertColumn(1,_T("文件名"),LVCFMT_CENTER,340);
m_list1.InsertColumn(2,_T("文件大小"),LVCFMT_CENTER,80);
m_list1.InsertColumn(3,_T("ID"),LVCFMT_CENTER,0);


m_list1.SetBkColor(RGB(188,197,230)); 
m_list1.SetTextColor(RGB(0,0,0)); 
m_list1.SetTextBkColor(RGB(188,197,230));

m_button1.SetBkColor(RGB(188,197,230));
m_button1.SetRounded(TRUE);
m_button2.SetBkColor(RGB(188,197,230));
m_button2.SetRounded(TRUE);
m_button8.SetBkColor(RGB(188,197,230));
m_button8.SetRounded(TRUE);


m_clrBkgnd = RGB(188,197,230);
m_brBkgnd.CreateSolidBrush(m_clrBkgnd);

if (!m_tooltip.Create(this, TTS_ALWAYSTIP))
{
       TRACE(_T("Unable To create ToolTip\n"));
        return FALSE;
}

m_tooltip.SetTipTextColor(RGB(0,0,255));//font color
m_tooltip.SetDelayTime(150);//delay time

    //m_tooltip.AddTool(GetDlgItem(IDC_PARTINFO),_T("this is button"));
m_tooltip.AddTool(GetDlgItem(IDC_BUTTON1),_T("这是一个按钮"));

HIMAGELIST himlSmall;
HIMAGELIST himlLarge;
SHFILEINFO sfi;
char cSysDir[MAX_PATH];
CString strBuf;
memset(cSysDir,0,MAX_PATH);
GetWindowsDirectory(cSysDir,MAX_PATH);
strBuf = cSysDir;
sprintf(cSysDir,"%s",strBuf.Left(strBuf.Find("\")+1));
himlSmall = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,0,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,0,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_LARGEICON);
if(himlSmall && himlLarge)
{
::SendMessage(m_list1.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_SMALL,(LPARAM)himlSmall);
::SendMessage(m_list1.m_hWnd,LVM_SETIMAGELIST,(WPARAM)LVSIL_SMALL,(LPARAM)himlLarge);//LVSIL_NORMAL
}
m_list1.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

readallinfo();

return 0;  // return TRUE  unless you set the focus to a control
}

void CfilesDlg::readallinfo()
{
CString strSQL;
int g =button_logo;
int open_logo;
switch(g)
{
    case 1:
open_logo =button_logo+3;
break;
case 2:
open_logo =button_logo+3;
break;
case 3:
open_logo =button_logo+3;
break;
}

//初始化ListCtrl
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
pListCtrl->DeleteAllItems();
openbiao(open_logo);
if(m_pRecordset->BOF)
{
//closebiao();/////////////////关闭连接////////////////////
return;
}
pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

m_pRecordset->MoveFirst();

double length;
int n = 0;
while (!m_pRecordset->isEOF)
{
_variant_t varValue;


int strNumber = NULL;
int strLength = NULL;
int strID = NULL;
CString strFile = _T("");

varValue = m_pRecordset->GetCollect(_variant_t(_T("序号")));
if (varValue.vt != VT_NULL)
{
strNumber = varValue.lVal;
}
else
{
strNumber = NULL;
}

varValue = m_pRecordset->GetCollect(_variant_t(_T("文件大小")));
if (varValue.vt != VT_NULL)
{
strLength = varValue.lVal;
length =(double)(strLength/1024.0/1024.0);
}
else
{
strLength = NULL;
}

varValue = m_pRecordset->GetCollect(_variant_t(_T("文件名")));
if (varValue.vt != VT_NULL)
{
strFile = varValue.bstrVal;
}
else
{
strFile = _T("");
}

int gg =0;
        char *filename = (LPSTR)(LPCTSTR)strFile;
char name[64];
for(int g=0;filename[g]!='\0';g++)
{
if(filename[g] == '.')
{
for(;filename[g]!='\0';g++,gg++)
{
name[gg] = filename[g];
}
name[gg] = '\0';
break;
}
}

CString strText = "";
    m_list1.InsertItem(n,strFile,GetIconIndex(name,false,false));
strText.Format("%.2fM", length);
m_list1.SetItemText(n, 1, strText);
strText.Format("%d", strNumber);
m_list1.SetItemText(n, 2, strText);
    n++;
m_pRecordset->MoveNext();
}
closebiao(); /////////////////关闭连接////////////////////
}

int CfilesDlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)
{
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));
if(bIsDir)
{
SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_DIRECTORY,&sfi,sizeof(sfi),SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_USEFILEATTRIBUTES|(bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
else
{
SHGetFileInfo(lpszPath,FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),SHGFI_SMALLICON|SHGFI_SYSICONINDEX|SHGFI_USEFILEATTRIBUTES|(bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
return -1;
} MFC
[解决办法]
你显示图标是在OnInitDialog,有可能是你对话框没关掉,
你关闭子对话框的代码贴下,如果每次都有调用OnInitDialog,应该是会显示的
[解决办法]
CListCtrl    &RightList=pRight->GetListCtrl();
// set list style
LONG NewStyle=GetWindowLong(RightList.GetSafeHwnd(),GWL_STYLE);
NewStyle=(NewStyle & 0xFFFF0000)
[解决办法]
LVS_REPORT
[解决办法]
LVS_EDITLABELS
[解决办法]

                             LVS_SHOWSELALWAYS
[解决办法]
LVS_SHAREIMAGELISTS;
//


[解决办法]
LVS_SINGLESEL
[解决办法]
LVS_SORTASCENDING;
[解决办法]
LVS_AUTOARRANGE
SetWindowLong(RightList.GetSafeHwnd(),GWL_STYLE,NewStyle);

系统 image 不能删除的