ASP.NET Framework之OPENFILENAME 新元素初探

  从 Windows ME、Windows 2000 开始,用于 GetOpenFileName() 和 GetSaveFileName() 函数的 OPENFILENAME 结构添加了三个新元素。我们先来看一下:

Type OPENFILENAME
    lStructSize As Long
    hWndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
    '#if (_WIN32_WINNT >= 0x0500)
    pvReserved As Long
    dwReserved As Long
    FlagsEx As Long
    '#endif // (_WIN32_WINNT >= 0x0500)
End Type

  关于新的元素 pvReserved、dwReserved 不难看出是保留的,可能 Windows ME、Windows 2000 发布的时候尚未完成相关功能,所以……不过,FlagsEx 元素倒是有一个可以使用的参数 OFN_EX_NOPLACESBAR(1)。设置了这个位标记可以关闭 Windows 2000(或 Windows ME) “打开文件”对话框左边的快捷栏。这个快捷栏总共可以存放五个快捷方式,可以通过修改注册表来指定自己的快捷方式。至于如何修改,不是我们今天的话题,所以暂且不讨论。但是,在实际使用中,我发现了一个问题:采用这种新结构的程序无法在 Windows 98/95/NT4 上面运行。原因可能是设置 lStructSize 时算入了新的三个成员,导致结构长度增加 12 个字节,而旧版本的 ComDlg32.DLL 无法辨认,误认为结构长度错误。其最终结果就是“打开文件”和“保存文件”对话框无法显示。

  鉴于这个问题,我们采用了如下思路解决:用 GetVersionEx() 函数检测 Windows 版本,如果不是 Windows ME、Windows 2000,就在用 Len() 算出 OPENFILENAME 结构长度之后减去 12 字节,再赋值给 lStructSize。这样,就版本的 ComDlg32.DLL 就会忽略新增的三个元素。经实践,证明这种方法可行。

  当然,我们还考虑到可能有的 Windows 95/98/NT4 由于某些软件的安装而拥有新版本的 ComDlg32.DLL,这样就完全可以使用新的特性了。所以最好的办法还是检测 ComDlg32.DLL 本身的版本,再决定 OPENFILENAME 结构的长度是否要忽略新的三个元素的长度。

时间: 2024-12-10 15:24:16

ASP.NET Framework之OPENFILENAME 新元素初探的相关文章

ASP.NET中的输入验证之服器端验证

在ASP.NET平台下.用户可以使用控件和正则表达式在服务器端实现输入验证,相对来说验证控件使 用简单 且能满足大部分需求 但说句实话 偶对这些东东是不敢恭维 Microsoft Visual Studio验证控件 既是客户端验证又是服务器端验证 当我们触发验证 就会自动生 成很多客户端脚本 如果我们单击按扭不但要触发验证 还要写一些其它的脚本 验证将可能失效 在项目 中为了防止这类意外发生 有人提了用客户端验证 但是敲过代码的都晓得客户端不安全 所以只有先服务 器端验证有时间再加个客户端验证咯

ASP.NET MVC Framework与WCSF中MVP模式的比较

概述 MVC模式已经出现了几十年了,在GUI领域已经得到了广泛的应用,由于微软ASP.NET MVC Framework的出现,致使MVC一度成为.NET 社区的热名话题.作为MVC的变种MVP模式,也已经出现好几年了,在微软模式与实践小组提供的Web Client Software Factory中,给出了实现 MVP模式的应用程序最佳实践,本文将试着对这两种实现比较一二. MVC(Model-View-Controller,模型-视图-控制器)模式是80年代 Smalltalk-80出现的一

ASP.NET MVC Framework体验(5):路径选择(URL Routing)

概述 在传统的ASP.NET应用程序中,发生一个请求之后将映射到一个.aspx文件,且会 对应到一个具体的物理aspx文件.ASP.NET MVC Framework中,进入一个请求之后,不再是 映射到.aspx文件,而是由MVC Framework中提供的路径选择引擎,映射到正确的Controller 和Action执行请求.ASP.NET MVC Framework中URL路径映射规则定义在Global.asax中,这 在一定程序上带来了很多的灵活性,如果想要修改URL应用结构的话,只需要修

ASP.NET MVC Framework体验(4):控制器

概述 在MVC中,Controller用来处理和回应用户的交互,选择使用哪个View来进行显 示,需要往视图中传递什么样的视图数据等.ASP.NET MVC Framework中提供了IController 接口和Controller基类两种类型,其中在Controller提供了一些MVC中常用的处理,如定位 正确的action并执行.为action方法参数赋值.处理执行过程中的错误.提供默认的 WebFormViewFactory呈现页面.IController只是提供了一个控制器的接口,如果

ASP.NET MVC Framework体验(3):表单提交

概述 在前面的两篇文章总,我们分别做了一个简单的ASP.NET MVC的例子和进行数据 的绑定,在本文中,将通过ASP.NET MVC Framework实现表单的提交,你可以看到,在这里 有多种方法来获取表单数据,可以自动映射.通过Request对象获取等. 实现新增数 据 1.这里我们还采用上一篇做过的Blog示例(在后面的文章中,我将一直使用该示例) ,在这之前,先修改一下上次示例中的BlogRepository,为其增加一个Add方法: public void Add(Post post

ASP.NET MVC Framework体验(2):显示列表数据

概述 ASP.NET WebForm下,显示列表数据,经常会使用服务器控件GridView. DataList等.在ASP.NET MVC Framework中,我们有两种方式进行显示数据,一是使用行内 代码,即通过循环视图数据使用<%=%>标记进行呈现:二是使用服务器控件,同样可 以把视图数据绑定在服务器控件,如ASP.NET 3.5中的新控件ListView. 准备数据访 问 这里我们显示一个Post的列表DataContext和实体定义如下: [Database(Name="B

ASP.NET MVC Framework体验(1):从一个简单实例开始

概述 12月10日微软发布了ASP.NET 3.5扩展的预览版,在其中包括了ASP.NET MVC Framework.ASP.NET AJAX改进.ASP.NET动态数据支持.ASP.NET SIlverlight支持.以及 ADO.NET Data Services等.我也在第一时间下载下来进行了安装,体验了一下微软的 ASP.NET MVC Framework. 提起MVC,相信大家都不陌生了,这里简单的提两句,将 一个应用的实现分成三部分:模型(Model).视图(View).控制器(C

ASP.NET中如何使用验证码效验

主要功能: * 生成验证码 * 效验验证码 基本原理: 根据一定的规则生成随机的5为字符(由0-9的数字和A-Z的字母组成),并写入Session.验证的时候再从Session中取出进行比较. 前提知识: 关于ashx文件 本质:缺少html文件的asp教程x文件. 使用场景: 适合生成动态的图像或文本. ashx输出作为页面元素img的背景(属性src的值,eg:<img src="../Handler/WaterMark.ashx" id="vimg" a

ASP.NET MVC Framework 系列

序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现实. 本文只想让大家更直观地认知ASP.NET MVC,如果语言有所不当,还望大家海涵.当然,如果文中有所纰漏还希望大家及时指出,我也好做及时的修改.在下本着对初学者负责的态度来书写本系列中的各篇文章,但期间的恒心与毅力相信过来的人更加明白,所以如果书写有误希望大家谅解. ASP.NET MVC 正