listview控件不显示图标

alln0211 2010-11-26 12:54:14
如题,我找不到原因,希望大家帮忙。
// icon.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"
#include "MainDlg.h"
#include <COMMCTRL.H>
#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include <commctrl.h>
#include <shellapi.h>
#include <stdio.h>

HINSTANCE hin;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//Enable IPAddress、Calendar.etc
InitCommonControls();
hin=hInstance;
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, Main_Proc);
return 0;
}


/*
Template designed by RuPeng.com. Please visit http://www.rupeng.com for more information
如鹏网(http://www.rupeng.com)大学生计算机学习社区,提供大量免费视频学习教程,提供个性化一对一学习指导
*/
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
// hin=hInstance;
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}

return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
HWND hwndv=GetDlgItem(hwnd,IDC_LIST1);
LV_COLUMN lvc;
lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM;
lvc.cchTextMax =20;
lvc.pszText = TEXT("文件");
lvc.cx = 380;
lvc.fmt=LVCFMT_CENTER;
lvc.iSubItem=0;
SendMessage(hwndv, LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
WIN32_FIND_DATA FindFile;
HANDLE hfile;
LV_ITEM lvi;
SHFILEINFOA psfi;
char FileN[256];

HIMAGELIST iconlist;
HBITMAP hiconoffile;
int i=0;
// iconlist=ImageList_Create(16,16,ILC_COLOR16,1,1);
// hiconoffile = LoadBitmap(hin,MAKEINTRESOURCE(IDI_ICON5));
// ImageList_Add(iconlist,hiconoffile,0);
// hiconoffile = LoadBitmap(hin,MAKEINTRESOURCE(IDI_ICON5));
// ImageList_Add(iconlist,hiconoffile,0);
switch(id)
{
case IDC_OK:
// hfile=FindFirstFile("C:\\*.*",&FindFile);
// if(lstrcmp(FindFile.cFileName,".")&&lstrcmp(FindFile.cFileName,"..") ) //FindFile.dwFileAttributes!=FILE_ATTRIBUTE_DIRECTORY
{
lvi.mask=LVIF_TEXT;
lvi.iItem=0;
lvi.iSubItem=0;
lvi.pszText="C:\\201004.TXT";
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_INSERTITEM,1,(LPARAM)&lvi);
// sprintf(FileN,"%s\\%s","C:",FindFile.cFileName);

iconlist=ImageList_Create(16,16,ILC_COLOR16,1,1);
// hiconoffile = LoadBitmap(hin,MAKEINTRESOURCE(IDI_ICON5));
// ImageList_Add(iconlist,hiconoffile,0);
sprintf(FileN,"%d",iconlist);
SHGetFileInfo("C:\\201004.TXT",NULL,&psfi,sizeof(psfi),SHGFI_SMALLICON);

ImageList_AddIcon(iconlist,psfi.hIcon);
sprintf(FileN,"第一次%d,第二次%d",FileN,iconlist);
// ListView_SetImageList(hwnd,LVSIL_SMALL,iconlist);
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETIMAGELIST,LVSIL_SMALL,(LPARAM)iconlist);
}
MessageBox(hwnd,FileN,TEXT("问好"),MB_OK);
break;
default:
break;
}
}

void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}

...全文
339 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
visualwind 2010-11-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 alln0211 的回复:]
我还以为结贴了就不能回复呢!
这个问题的原因可能是SHGetFileInfo函数使用前先初始化com。
我后来又试了,发现psfi.hIcon这个值是0。
[/Quote]

仔细调一下,要保证每一行都要执行正确。
参考:
ListCtrl显示不同类型文件图标
alln0211 2010-11-28
  • 打赏
  • 举报
回复
我还以为结贴了就不能回复呢!
这个问题的原因可能是SHGetFileInfo函数使用前先初始化com。
我后来又试了,发现psfi.hIcon这个值是0。
alln0211 2010-11-26
  • 打赏
  • 举报
回复
无论怎样还是感谢雪山飞狐!谢谢你能抽出时间帮我!我先结贴吧!自己再试试!
visualwind 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 alln0211 的回复:]

引用 7 楼 visualwind 的回复:

引用 6 楼 alln0211 的回复:
lvi.iImage=0;这里设成1也不对!


mask要加LVIF_IMAGE
item.mask = LVIF_TEXT|LVIF_IMAGE;
注意查MSDN

我也设了,还不对!
msdn用的是c++我看不明白!
这里还不让添加附件,能的话我就把代码传上来了!
[/Quote]

要先SetImageList后SetItem
对于windows编程必须要会查MSDN
alln0211 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visualwind 的回复:]

引用 6 楼 alln0211 的回复:
lvi.iImage=0;这里设成1也不对!


mask要加LVIF_IMAGE
item.mask = LVIF_TEXT|LVIF_IMAGE;
注意查MSDN
[/Quote]
我也设了,还不对!
msdn用的是c++我看不明白!
这里还不让添加附件,能的话我就把代码传上来了!
kintar_chu 2010-11-26
  • 打赏
  • 举报
回复
m_iImageList.Create(32, 32, ILC_COLORDDB | ILC_MASK, 3, 1); //
listctrl.SetImageList(&m_iImageList, LVSIL_NORMAL);
visualwind 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 alln0211 的回复:]
lvi.iImage=0;这里设成1也不对!
[/Quote]

mask要加LVIF_IMAGE
item.mask = LVIF_TEXT|LVIF_IMAGE;
注意查MSDN
alln0211 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualwind 的回复:]

设置了ImageList了以后,还要发LVM_SETITEM消息,其中LVITEM的iImage字段指示使用ImageList的索引
[/Quote]
是这样么?

ImageList_AddIcon(iconlist,psfi.hIcon);
sprintf(FileN,"第一次%d,第二次%d",FileN,iconlist);
// ListView_SetImageList(hwnd,LVSIL_SMALL,iconlist);
lvi.mask=lvif_iImage;
lvi.iImage=0;
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETITEM,1,(LPARAM)&lvi);
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETIMAGELIST,LVSIL_SMALL,(LPARAM)iconlist);

lvi.iImage=0;这里设成1也不对!
alln0211 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 luawkk 的回复:]

lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM;

改为

lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM|LVCF_IMAGE
[/Quote]
我试了,不对。显示图标的地方还是空白!
luawkk 2010-11-26
  • 打赏
  • 举报
回复
lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM;

改为

lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM|LVCF_IMAGE
luawkk 2010-11-26
  • 打赏
  • 举报
回复
lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM;

没指定 图标 属性吧
Eleven 2010-11-26
  • 打赏
  • 举报
回复
ListView_SetImageList();
visualwind 2010-11-26
  • 打赏
  • 举报
回复
设置了ImageList了以后,还要发LVM_SETITEM消息,其中LVITEM的iImage字段指示使用ImageList的索引

15,980

社区成员

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

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