缩略图模式是资源管理器提供的……你要第一次显示对话框时切换到缩略图模式的话可以查询对话框的IFolderView接口

解决方案 »

  1.   

    我添加了继承自CFileDialog的类,实现了预览功能,就是在打开文件对话框点一下文件预览一幅图片(预览在我指定的控件上),现想在此基础上实现缩略图功能,就是点击“查看”后选择“缩略图”,会将我的文件以缩略图的形式全部显示在列表上,区别于预览只显示一个图片(不用在第一次显示对话框时就切换到缩略图模式,只要实现此功能就行)。目前是我不知道在哪实现这样的功能,点了“缩略图”后是不是该有个函数可以判断当前是在“缩略图”模式下还是在“详细列表”或者别的模式下呢?然后我可以遍历列表里的所有文件在onPaint中将其画在列表框里?不知道这样可行?
      

  2.   

    通过CFileDialog打开文件对话框后,再点击工具栏中的“查看”-“缩略图”,我想实现这下面的缩略图功能,请给一个思路或解决方案,各位高手
      

  3.   

    IFolderView::SetCurrentViewMode FVM_THUMBNAIL
    参考
    http://blog.joycode.com/jiangsheng/archives/2004/09/17/33756.joy
      

  4.   

    感谢蒋老大的帮助,希望您能继续帮助我一下:通过这篇文章http://msdn.microsoft.com/zh-cn/magazine/cc164009(en-us).aspx确实可以在打开通用对话框的时候就能显示缩略图(IFolderView::SetCurrentViewMode我没用成功,可能是我没用到位),目前是想在点击"查看-缩略图"
    的时候我能捕捉到这个消息?(可以这样吗?)然后我就可以捕获消息后在这里面处理我的事情-当截获消息的时候调用我自己的API往列表里作画来得到缩略图(这个应该不需要在onPain中处理就行了吧?),但是现在依然没找到是在哪响应的(缩略图/详细列表...)。我下载了“OfnKing ”的源码,但是里面没看到点击"查看-缩略图"后是在哪里把列表框里的缩略图给显示出来的,(我想既然要把图画出来应该有GDI的相关操作吧?不知道这些操作是在哪体现的)如果不处理,应该点击“缩略图”后列表框里面是看不到缩略图的,所以我现在的主要疑虑是这个。
      

  5.   

        我是要在多个模式下切换,当按“缩略图”时能切换到缩略图,当按下“详细列表”时能切换到详细列表,那么切换的时候是在何处去处理的呢?比如显示缩略图/显示详细信息在列表框中。
        微软知识库文章Q195034 HOWTO: OfnKing Demonstrates CFileDialog Customization http://support.microsoft.com/?kbid=195034这篇文章的“OfnKing”程序确实实现了这样的功能,但是我真没看到里面是如何实现的,难道他用了其他技术,比如com或者dll...希望能得到解答,不胜感激,小弟求知若渴
      

  6.   

    呃,切换到缩略图之后列表里不是已经有缩略图了吗?为什么还要在里面画呢?
    缩略图是资源管理器提供的,如果你要为你的文件格式提供缩略图的话,可以自己写一个Thumbnail provider
      

  7.   

    感谢将老大继续关注!是这样的,可能我没说清楚,切换到缩略图后能看到文件夹的缩略图,如果是BMP或者其他图像格式的文件是不能看到其缩略图的。而我要显示的是.rss格式的文件(用来显示UI),我要把一个个的rss文件描述的图像画在列表框中(调用我的API来解析之),所以想仿照切换缩略图后解析BMP格式的方法来实现我的需求,看来很多例子(比如OfnKing程序),但是没找到他在切换到缩略图后是在哪去解析BMP格式文件的(这个程序实现了,一般是看不到BMP格式文件的缩略图的而只能看到文件夹的缩略图),这个解析的动作我觉得应该是截获到一个消息吧?所以可以点击“缩略图”就进行解析,点击其他的又去做别的事,而不是仅做一次(可以控制这个动作)。
        自己写一个Thumbnail provider如何被响应呢?还是那个问题,是不是有个消息来响应点击“缩略图”这个动作,那么我就可以把Thumbnail provider写在这个消息响应函数里头,每次响应时开始在列表框中画我的缩略图。
      

  8.   

    文件夹的缩略图系统已经帮忙处理了,图像格式的缩略图应该是自己来处理吧,一个新建的SDI工程切换到缩略图模式下是看不到图像的缩略图的(仅能看到文件夹缩略图),我的环境是vs2010&xp
      

  9.   

    微软没有设计这样一个消息。Thumbnail provider是一个资源管理器插件,负责在资源管理器显示文件时提供缩略图。这个需要Vista。XP中支持NTFS的替代流(PIDSI_THUMBNAIL)。如果你需要支持FAT文件系统,你可以像Facebook的上传Flash那样自己设计一个文件打开对话框,或者像OfnKing那样在文件对话框中增加控件。
      

  10.   

    好吧,既然没有这一消息,我只有另外用list control来做了,谢谢将老大的关注,对了,老大有没有即时通讯工具或者mail可以向您学习一下额
      

  11.   

    对了,问一下list control能否插入自己定制的图像,即在控件中画图。list control应该不会只支持txt,bmp...等特定格式的文件吧?也就是只能将这些特定格式的文件插入在list control中?
      

  12.   

    有没有在list control上画自定义格式图像的例子呢?我画图时调用自己的接口,大致是这样画的:
    Graphics graphics(m_pDlgDC->m_hDC);
    onPaint((void *) &graphics);
    通过传入一个与DC相关的graphics来调用onPaint接口,但是不知道如何跟list control绑定一起,如何画在list control中指定的位置上呢?
      

  13.   

    可以subclass但是Windows 7里面文件打开对话框不再使用列表控件显示文件夹……参考IFileDialogCustomize 
      

  14.   

    额,能具体些吗?CListView的子类?我是在xp的环境下哦
      

  15.   

    subclasswindows是Windows API……参考http://www.codeproject.com/Articles/6372/A-class-based-on-CFileDialog-that-provides-easy-im
      

  16.   

        感谢您的持续关注,也只有您关注这帖子了。这篇文章我看过了,预览功能我已经实现了,关于缩略图的功能目前我用list control来做的,感觉我跟网络上的很多例子不太一样的地方是:他们大多数都是已经有图片了,直接插入到list control去,而我是要在list contorl的一个个小方块中画图。现在有一个困惑就是不知道如何把GDI画图操作跟list contorl关联起来。
        我是这样画图的:CClientDC dc(this);   //如果是在dialog中作画,那么dc就是dialog的客户区
    Graphics graphics(dc.m_hDC);   //绑定dc
    onPaint((void *) &graphics);   //然后调用我自己的API,传入上面的graphics作画,那么会直接画在dialog的客户区    现在用list control,下面是初始化m_ImageListThumb.Create(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, ILC_COLOR24, 0, 1); //CImageList类型的 m_ImageListThumb
    m_ListThumbnail.SetImageList(&m_ImageListThumb, LVSIL_NORMAL); //CListCtrl类型的m_ListThumbnail    那么我应该如何把图画在list control中(画若干个),DC又是什么(主要是这个不知道),因为把图画在list中的每个小方块里,这个小方块就看作DC吧,但是怎么得到它呢?我的想法是这样的,不知道有没有错。说了这么多不知道您听懂我说的了没额
      

  17.   

    唉,没办法,这种控件好像是不能在上面画出一个个的小图来,至少不是那么简单,CImageList放在list control中后不知道怎么控制里面的东西。目前在dialog中拖出来九个picture control,依次在这些control上作图,然后用滑动条来控制。list control往里面插图比较好做,往里面放图不太好弄......先这样吧,有更好的办法再说
      

  18.   

    stoneboy100200 我和你遇到了一样的问题我也是在clistctrl里面根据文件类型来显示文件,如果是照片的放其缩略图上去,你找到方法了吗?我还在找
      

  19.   

    clistctrl的图标是很死的那几个(自己提前定义)目前我没有找到动态的显示图标的方法,照片肯定是不一样的。显示当然也不一样