1.把一个.rar文件显示到listview里面,前面有一个rar的图标,后面是文件名.2.鼠标右键点击这个项弹出一个菜单
和用户在我的电脑中执行这样的操作弹出的菜单一样,就是有
-----------------
|打开           |
|打开方式...    |
|添加到档案文件 |
|添加到xxx.rar  |
|---------------|
|剪切           |
|复制           |
 ---------------|
|创建快捷方式   |
|删除           |
|重命名         |
|---------------|
|属性           |
-----------------
 
请教前辈,我该调用什么才可以弹出这个对话框?
先谢谢了...

解决方案 »

  1.   

    看看Shell的编程.如果你装了MSDN VS2005的话,看看这里:
    ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/programmersguide/shell_int/shell_int_extending/extensionhandlers/contextmenuhandlers.htm其他版本的就查找一下Shell中的IContextMenu的用法.
      

  2.   

    在listview里显示rar文件图标,后面跟文件名。rar文件图标需要自己截取。参考:
    http://www.codeproject.com/cs/miscctrl/OAKListView.asp在listview上添加鼠标右键,请参考代码:
    private StringCollection GetContextMent(string filename)
    {
    StringCollection outmenu = new StringCollection();
    outmenu.Add ("打开");
    outmenu.Add ("打开方式...");
    outmenu.Add ("添加到档案文件");
    outmenu.Add ("添加到"+filename);
    outmenu.Add ("-");
    outmenu.Add ("减切");
                                //...
    return outmenu.Count == 0 ? null : outmenu;
    } private void DoMenuAction(object sender, EventArgs e)
    {
    MenuItem mi = (MenuItem) sender;
    string id = "";
    if(this.lsvFile .FocusedItem != null)
    {
    id = lsvFile.FocusedItem.Tag.ToString();
    }
    DoActionByMenu(id, mi.Text);
    } public void DoActionByMenu(string id, string action)
    {
    string strAction = _htContextMenu[action].ToString() ;
    switch (strAction)
    {
    case "打开":
    //执行打开动作;
    break;
                                         //其他的依次类推
    }
    }//另外,在listFile上添加鼠标抬起事件
    private void lsvFile_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    ListViewItem lvi = this.lsvFile .GetItemAt(e.X,e.Y);
                               if(lvi != null)
                                   return;
    if(e.Button == MouseButtons.Right )
    {
    StringCollection actions ;
    actions = GetContextMent(lvi.Text);
    if (actions != null)
    {
    ContextMenu cm = new ContextMenu();
    foreach (string action in actions)
    {
    cm.MenuItems.Add(action, new EventHandler(DoMenuAction));
    }
    cm.Show(this.lsvFile , new Point(e.X, e.Y));
    }
    }
    }//你只要将相应代码做一下调整就可以了。
      

  3.   

    private void listView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(e.Button ==MouseButtons.Right)
    {
    this.listView1.ContextMenu =this.contextMenu1;
    }
    }
    上下文菜单自己按要求创建一个就行了
      

  4.   

    楼上的朋友的代码应该是固定的菜单的吧?
    如果我的鼠标右键是点击别的,比如系统盘符,弹出的菜单应该有个格式化的选项.
    而我点击文件是没有这个选项的.如果这样我得做很多判断才行的...其实我说的是调用windows系统的功能,我想这里应该有个接口的,不是吗?
      

  5.   

    如果你希望弹出的是windows系统的菜单,比较难,因为即便你弹出后,也是要对它们进行处理的,不是连到以后,就一切OK的了。