SHGetFileInfo アイテム数が多い場合、アイコンが途中までしか表示されない

[戻る]
tate 2005/06/01(水) 09:10:57
MFC VC++6.0 SID WinXP

SHGetFileInfoを利用してCListViewにアイコンを表示させています。
アイテム数が多い場合、途中までしか表示されません。
何故でしょうか?


    CListCtrl& ListCtrl = GetListCtrl();

    // アイコンを取得する。
    SHFILEINFO sfi;
    SHGetFileInfo(  iFullPath,//ファイルのフルパス
                    NULL,
                    &sfi,
                    sizeof( SHFILEINFO),
                    SHGFI_LARGEICON | SHGFI_ICON | 
SHGFI_SMALLICON
                    );

    // ファイルから取得したアイコンをイメージリストに設定
    HICON hIcon = sfi.hIcon;
    m_IconLarge.Add(hIcon);
    m_IconSmall.Add(hIcon);

    // イメージリストをリストコントロールに設定
    ListCtrl.SetImageList(&m_IconLarge, LVSIL_NORMAL );
    ListCtrl.SetImageList(&m_IconSmall, LVSIL_SMALL );

    // リストコントロールのオブジェクト取得
    static LV_ITEM    lvitem;
    memset(&lvitem,0,sizeof(LVITEM));

    lvitem.mask = LVIF_TEXT | LVIF_IMAGE;
    //lvitem.iItem = ListCtrl.GetItemCount();// 何故かコメントすると上手く
実行される
    lvitem.iItem    = iImageNum;
    lvitem.iSubItem = 0;
    lvitem.pszText  = iFName.GetBuffer( sizeof(iFName) );
    iFName.ReleaseBuffer();// バッファを開放
    lvitem.iImage   = iImageNum;// <<==== ここにイメージリストのナンバーを入れる
    ListCtrl.InsertItem(&lvitem);

    lvitem.mask        = LVIF_TEXT;
    lvitem.iSubItem    = 1;
    lvitem.pszText    = iFSize.GetBuffer( sizeof(iFSize) );
    iFSize.ReleaseBuffer();// バッファを開放
    ListCtrl.SetItem( &lvitem);

    lvitem.mask        = LVIF_TEXT;
    lvitem.iSubItem    = 2;
    lvitem.pszText    = iFKind.GetBuffer( sizeof(iFKind) );
    iFKind.ReleaseBuffer();// バッファを開放
    ListCtrl.SetItem( &lvitem);

    lvitem.mask        = LVIF_TEXT;
    lvitem.iSubItem    = 3;
    lvitem.pszText    = iUpDate.GetBuffer( sizeof(iUpDate) );
    iUpDate.ReleaseBuffer();// バッファを開放
    ListCtrl.SetItem( &lvitem);

}

超初心者 2005/06/01(水) 22:48:47
SHGetFileInfoやCListViewでなく
イメージリストの限界かどうか確認してみたら?

シャノン 2005/06/02(木) 00:55:02
わざわざアイコンを取得して、自前のイメージリストに追加して行かなくても、システ
ムイメージリストという便利なものがあります。
SHGetFileInfo で、システムイメージリストのハンドルが手に入りますので、調べてみ
てください。

古いスレッドには追加発言できません。