关于TreeView:
添加的Item如下:-音乐柜
|   |
|    --My LITE-ON

 ---播放列表(1)如何在窗体初始化时,就显示上图所示的样子,即让所有的节点都处于展开状态;
(2)如何用鼠标左键和右键都可以轮换选中Item(当然左键是肯定可以选择的,我指的是用右键可以轮换选择);
(3)比方说当选中My LITE-ON项时,如何在单击鼠标右键时弹出Popup菜单,进行“增加歌曲”等相关操作;我在自己的应用程序(基于对话框的MP3媒体播放器)同目录下,建立了一个\MediaBox\My LITE-ON的目录,在上面第(3)点的时候,我通过右键菜单增加的歌曲就保存在该目录(\MediaBox\My LITE-ON\)下面,关于List Control的问题是
1)如何在应用程序初始化时,把\MediaBox\My LITE-ON\目录下所有的歌曲(*.mp3,*.wav,*.wma)显示在List Control中,如歌曲名,歌曲大小,歌曲长度(时间)等信息;
2)如何在List Control中显示的歌曲最前面增加一张图片,当用户选中某歌曲时,图片为勾,并可以播放此歌曲;当用户不选中某歌曲时,图片显示为叉,不播放该歌曲;
请高手指点,谢谢!

解决方案 »

  1.   

    1,递归调用Expand函数,把所有的root节点以及子节点都展开
    2,拦截右键事件
    3, CMenu popmenu;
    popmenu.CreatePopupMenu();
    //添加菜单项目
    popmenu.AppendMenu(0, ID_RICH_COPY, "复制");
    popmenu.AppendMenu(0, ID_RICH_SELECTALL, "全部选择");

    //初始化菜单项
    UINT nSel=((GetSelectionType()!=SEL_EMPTY) ? 0 : MF_GRAYED) ;
    popmenu.EnableMenuItem(ID_RICH_COPY, MF_BYCOMMAND|nSel);

    CString strMsg;
    this->GetWindowText(strMsg);
    nSel = ((strMsg.GetLength()!= NULL) ? 0:MF_GRAYED);
    popmenu.EnableMenuItem(ID_RICH_SELECTALL,MF_BYCOMMAND|nSel);
    //显示菜单
    CPoint pt;
    GetCursorPos(&pt);
    popmenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
    popmenu.DestroyMenu();
      

  2.   

    list 的问题:1,读取所有的歌曲名称然后用insertitem增加到list中
    2,那个图片你得自己画!
      

  3.   

    Expand(GetRootItem(), TVE_EXPAND);展开根节点,然后递归遍历之。
    StateImage得自己画上去。
      

  4.   

    SetItemState可以更改树节点的状态
      

  5.   

    1.expand()
    2.
    3.按代码试试,看了一下,大概可行1)typedef struct _SHFILEINFO {
        HICON hIcon;
        int iIcon;
        DWORD dwAttributes;
        TCHAR szDisplayName[MAX_PATH];
        TCHAR szTypeName[80];
    } SHFILEINFO;2)SetItemState
      

  6.   

    TO: tgb(什么事情都TMD是我的错,我要女人!!) 
    你好,谢谢你的帮助.
    你给出的代码好象有点问题,
    UINT nSel=((GetSelectionType()!=SEL_EMPTY) ? 0 : MF_GRAYED) ;
    这一句有错.
    我现在最主要的问题就是,用鼠标右键点击中My LITE-ON这个节点时候,我要它弹出Popup菜单,然后进行菜单中的相关操作,应该在哪个事件里写代码,写什么代码?
    谢谢!