自定义FileDialog的外观
来源:互联网 发布:人工智能电影剧情 编辑:程序博客网 时间:2024/04/30 09:11
在.NET里面,MS提供了OpenFileDialog和SaveFileDialog,但是MS暴露给我们的方法和属性很少。有的时候我们需要修改他们的外观,比如修改默认的显示风格,默认的排序,甚至要求在Dialog中浏览图片等。这个时候我们除了重做一个Dialog那么就只能依靠消息来达到我们的目的。
关于如果在Dialog中浏览图片的文章,大家可以参考下CodeProject上的http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx 这篇文章。
那么如何来改变默认的显示方式,以及如果是Details形式的话,如何更改默认的排序属性呢,这个就是我这篇文章需要介绍的内容。
我先说一下大致的思路:
我们用Spy++看到,点击列排序的时候是LVM_SORTITEMS消息
通过MSDN我们知道,发送LVM_SORTITEMS需要同时提供排序的方法,因此要把你排序的方法放到SendMessage的参数中
在排序的方法中通过LVM_FINDITEM和LVM_GETITEMTEXT等消息获得需要排序的列
然后比较并且返回比较结果
MSDN里面有个例子,大家可以参考下: http://support.microsoft.com/kb/170884/
好了,接下来就说下我实现的方式吧,我这次主要是实现对日期列的排序,如果大家需要用到其他的列的话,请注意修改排序的代码
首先,我们需要定义两个enum,一个是用来表示默认的显示类型,一个是表示排序类型,具体代码如下
然后需要定义一些消息常量以及结构,这个没什么说的了,都是通过MSDN查到的
接下来就是API的引用,这里主要用到SendMessage和FindWindowEx
上面这些代码我建议大家专门放到一个类里面,以后用到的所有的API方面的东西都可以从这个类里面获得
以下就是FileDialogExtender类的内容,这个类继承自我的HookWndProc类,
这个类的代码在以前写的那篇NativeWindow的文章,建议大家先去看看
http://blog.csdn.net/lovefootball/archive/2007/09/14/1784882.aspx
调用的方法如下:
恩,大致的功能就实现了
大家需要注意的是设置完默认显示为Details格式的时候,他默认的是名称排序,
这个时候我们不仅要去掉名称列上的三角图标,还要改成其他列排序,
而且还需要发送LVM_SETSELECTEDCOLUMN消息,告诉对话框,我们选择的是哪个列
大家如果有兴趣的话,可以参照这个例子进行扩展
首先列的排序应该是做成属性,在外面调用的时候配置的
另外Details形式下还可以默认显示成其他的列,而不是对话框给我们的四个列
或者可以改变列的顺序,把日期弄到第一列等等
欢迎转载,请注明出处~~
- 自定义FileDialog的外观
- 自定义外观的Button
- 自定义外观的ListView
- 自定义SeekBar的外观
- wxWidget的fileDialog, dirDialog
- FileDialog的使用
- JFileChooser &FileDialog 的异同
- 自定义水晶报表的外观
- 可自定义外观的QuickReport?
- 自定义水晶报表的外观
- 自定义水晶报表的外观
- 自定义水晶报表的外观
- AIR 自定义窗口的外观
- Qt自定义外观--自定义标题栏的窗口
- Qt自定义外观--自定义标题栏的窗口
- 关于FileDialog的路径问题
- Silverlight 创建自定义外观的按钮
- 自定义List被选中项的外观
- 真正意义上的产品经理
- 读书笔记SendMessage需要投递到消息队列吗(转)
- Win32串口编程(VC++6.0)
- 国债净价交易
- SendKeys 语句
- 自定义FileDialog的外观
- 产品经理进行向上沟通的6点注意事项
- Flash P2P 通信技巧(AS-Java-AS)
- wince VC++ 对话框打不开的问题(转)
- 史上第一个Flash P2P源代码来啦!
- [转]JAVA集合框架简介
- 产品经理应该向唐骏学习人情练达
- VC中读写ini文件(转)
- 英语六级