ListCtrl SDK 一些问题

ListCtrl 中 item 的创建:  LVM_INSERTITEM

 

LVITEM stItem ;

 

 stItem.iItem = i ;   // 第几列

 stItem.iSubItem = 0 ; //必须置0, 否则,无效

 stItem.iImage = stShellFileInfo.iIcon;

 stItem.pszText = L"1st SubItem" ;

 ::SendMessageW( hList , LVM_INSERTITEM  , 0 , (LPARAM)&stItem ) ;

 

 

设置SubItem值: LVM_SETITEMTEXT

 

 

stItem.iSubItem = 1 ;

stItem.pszText = L"sUBiTEM";

::SendMessageW( hList, LVM_SETITEMTEXT , i  , (LPARAM)&stItem ) ;

 

 

 

设置ListCtrl某一行被选择:

 

 

LVITEM stItem;

stItem.stateMask = LVIS_SELECTED;

stItem.state = LVIS_SELECTED;

::SendMessageW(hList, LVM_SETITEMSTATE, 0, (LPARAM)& stItem) ;

有时候你把这些代码放在OnInitDialog中,会发现3种情况:

1.完全没有选择.

2.被正确选择,但是是灰色(无焦点)

3.被正确选择,蓝色(有焦点)

原因是:

如果ListCtrl没有得到焦点则会不显示,或者显示灰色. ( 当 style 有: LVS_SHOWSELALWAYS 风格是总是显示,也可以直接在模板中选择 Always Show Slection. )

以上讲了1,2的情况.

要做到3,只需要设置当前焦点为ListCtrl, 比较方便的方法是在选中对话框,Ctrl+D, 双击ListCtrl,使之显示1,表示ListCtrl将获取第一焦点.

 

设置ListCtrl图标:

以系统文件图标为例:

SHFILEINFO stShellFileInfo = {0};

SHFILEINFOA sfia = {0};

HIMAGELIST hImageList = (HIMAGELIST)::SHGetFileInfoW(

                                    L"",

                                    0,

                                    &stShellFileInfo,

                                    sizeof(stShellFileInfo),

                                    0X4001);//SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_ICON);

::SendMessageW( hList , LVM_SETIMAGELIST ,  LVSIL_SMALL , (LPARAM)hImageList ) ;

 

这里有一个问题, 如果你使用 ::SHGetFileInfoA 这个版本的函数,你的第一个参数可以设置为 NULL , 仍然可以得到ImageList,但是宽字符版本必须要求你为:  L"" .

 

MSDN 社区:

http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/fd9ad2ac-6681-4d0f-810f-b7c233edcb94/

 

你好,做两处更改应该就可以了

1、LVSIL_SMALL改成LVSIL_NORMAL;

2、把SHGetFileInfo()中的第一个参数NULL改成(LPCTSTR)_T("")

代码如下:

 

Code Snippet

 HRESULT hresut=CoInitialize(NULL);

 HIMAGELIST hSystemSmallImageList;
 SHFILEINFO shfi;
 hSystemSmallImageList = (HIMAGELIST)SHGetFileInfo((LPCTSTR)_T(""), 0, &shfi,  sizeof(SHFILEINFO),   SHGFI_SYSICONINDEX   |   SHGFI_SMALLICON |SHGFI_ICON);
 m_ImageList.Attach(hSystemSmallImageList);
 m_fileTree.SetImageList(&m_ImageList,LVSIL_NORMAL);
 SHFILEINFO   sfi;   
    
 SHGetFileInfo((LPCTSTR)_T(".dll"),FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX|SHGFI_ICON|SHGFI_USEFILEATTRIBUTES|SHGFI_DISPLAYNAME |SHGFI_TYPENAME |SHGFI_ICON );

 HTREEITEM hFirst=m_fileTree.InsertItem((LPCTSTR)_T("aaa"),sfi.iIcon,sfi.iIcon);
 m_fileTree.InsertItem((LPCTSTR)_T("bbb"),sfi.iIcon,sfi.iIcon,hFirst);
 m_fileTree.InsertItem((LPCTSTR)_T("ccc"),sfi.iIcon,sfi.iIcon,hFirst);
 m_ImageList.Detach();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值