博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OPENFILENAME结构的定义
阅读量:6230 次
发布时间:2019-06-21

本文共 3077 字,大约阅读时间需要 10 分钟。

hot3.png

OPENFILENAMEA STRUCT

  LStructSize          DWORD     ?   ;结构的长度,用户填写
  HwndOwner            DWORD     ?   ;所属窗口,可以为NULL
  HInstance            DWORD     ?   ;
  LpstrFilter          DWORD     ?   ;文件筛选字符串
  LpstrCustomFilter    DWORD     ?
  NMaxCustFilter       DWORD     ?
  NFilterIndex         DWORD     ?
  LpstrFile            DWORD     ?   ;全路径的文件名缓冲区
  NmaxFile             DWORD     ?   ;文件名缓冲区长度
  LpstrFileTitle       DWORD     ?   ;不包含路径的文件名缓冲区
  NMaxFileTitle        DWORD     ?   ;文件名缓冲区长度
  LpstrInitialDir      DWORD     ?   ;初始目录
  LpstrTitle           DWORD     ?   ;对话框标题
  Flags                DWORD     ?   ;标志
  NFileOffset          WORD      ?   ;文件名在字符串中的起始位置
  NFileExtension       WORD      ?   ;扩展名在字符串中的起始位置
  LpstrDefExt          DWORD     ?   ;默认扩展名
  LCustData            DWORD     ?
  LpfnHook             DWORD     ?
  LpTemplateName       DWORD     ?
OPENFILENAMEA ENDS
OPENFILENAME           equ  <OPENFILENAMEA>
结构中一些重要的字段含义如下。
●   lpstrFilter――指定文件名筛选字符串,该字段决定了对话框中“文件类型”下拉式列表框中的内容,字符串可以由多组内容组成,每组包括一个说明字符串和一个筛选字符串,字符串的最后用两个0结束。如下面的字符串将在列表框中显示两项内容,选择不同项目的时候分别列出“*.txt”文件或者所有文件“*.*”:
'Text Files(*.txt)',0,'*.txt',0,'All Files(*.*)',0,'*.*',0,0
筛选字符串中也可以同时指定多个扩展名,中间用分号隔开,如'*.txt;*.doc'。
●   lpstrFile――指向一个包含文件名的缓冲区。如果这个缓冲区中已经包含了一个文件名,那么对话框初始化的时候将显示这个文件名。当用户选择了一个文件的时候,函数在这里返回新的文件名。
●   nMaxFile――指定lpstrFile参数指向的缓冲区的长度。
●   lpstrFileTitle――指向一个缓冲区,用来接收用户选择的不含路径的文件名。这个字段可以为NULL。
●   nMaxFileTitle――指明lpstrFileTitle参数指向的缓冲区的长度。
●   lpstrInitialDir――对话框的初始化目录,这个字段可以为NULL。
●   lpstrTitle――指向自定义的对话框标题,如果这个字段是NULL,那么“打开”对话框和“保存”对话框的默认标题是“打开”和“另存为”。
●   nFileOffset―返回文件名字符串中文件名的起始位置,如当用户选择了文件“c:/dir1/file.ext”时,这里将返回8。
●   nFileExtension――返回文件名字符串中扩展名的起始位置,同样是上面的字符串,这里返回13。如果文件名的最后一个字符是“.”,这里返回0,表示文件没有扩展名,这个字段和nFileOffset字段为分析文件名提供了方便。
●   lpstrDefExt――指定默认扩展名,如果用户输入了一个没有扩展名的文件名,那么函数会自动加上这个默认扩展名。
●   Flags字段――该标志字段决定了对话框的不同行为,它可以是一些取值的组合。下面是一些比较重要的标志:
■   OFN_ALLOWMULTISELECT――允许同时选择多个文件名。
■   OFN_CREATEPROMPT――如果用户输入了一个不存在的文件名,对话框向用户提问“是否建立文件”。
■   OFN_FILEMUSTEXIST――用户只能选择一个已经存在的文件名,使用这个标志的时候必须同时使用 OFN_PATHMUSTEXIST标志。
■   OFN_HIDEREADONLY――对话框中不显示“以只读方式打开”复选框。
■   OFN_OVERWRITEPROMPT――在“保存”文件对话框中使用的时候,当选择一个已存在的文件时,对话框会提问“是否覆盖文件”。
■   OFN_PATHMUSTEXIST――用户输入文件名时,路径必须存在。
■   OFN_READONLY――对话框中的“以只读方式打开”复选框初始化的时候处于选中状态。
调用显示“打开”或“保存”文件对话框函数时,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回TRUE,用户单击“取消”按钮退出时,函数返回FALSE,程序可以由此判断是否需要继续进行打开或保存文件的操作。具体的代码可以参考例子中的_SaveAs和_OpenFile子程序。
;ASM例子:
.386
.model flat, stdcall
Option CaseMap:None
include Windows.inc
include Kernel32.inc
include User32.inc
include ComDlg32.inc
includelib Kernel32.lib
includelib User32.lib
includelib ComDlg32.lib
.data
ofn OPENFILENAMEA <>
lpstrFilter db 'All Files(*.*)',0,'*.*',0,0
lpstrFile db 255 dup(0)
lpszOkMsgTitle db 'OpenFileNameOk',0
lpszErrMsgText db 'OpenFileNameErr',0
lpszErrMsgTitle db 'OpenFileNameErr',0
.code
start:
;注意!如果你将ofn结构定义在“函数的局部变量”中,必须使用RtlZeroMemory函数将ofn结构内存清0,否则调用GetOpenFileName函数将不会成功。
   mov ofn.lStructSize,sizeof ofn
  mov eax,offset lpstrFilter  ;初始化ofn结构
  mov ofn.lpstrFilter,eax
  mov eax,offset lpstrFile
  mov ofn.lpstrFile,eax
  mov ofn.nMaxFile,sizeof lpstrFile
  mov ofn.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
  invoke GetOpenFileName,addr ofn   ;开始获取FileName
  .if eax  ;如果获取文件名成功
    invoke MessageBox,NULL,addr lpstrFile,addr lpszOkMsgTitle,MB_OK
  .else
    invoke MessageBox,NULL,addr lpszErrMsgText,addr lpszErrMsgTitle,MB_OK
  .endif
  invoke ExitProcess,NULL
end start

转载于:https://my.oschina.net/guqiwei/blog/351130

你可能感兴趣的文章
nodejs基础 -- NPM 使用介绍
查看>>
Loadrunner中关联的作用:
查看>>
动态创建Fragment
查看>>
王立平--Failed to push selection: Read-only file system
查看>>
numpy转换
查看>>
《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia
查看>>
Codeforces Good Bye 2015 D. New Year and Ancient Prophecy 后缀数组 树状数组 dp
查看>>
ZOJ 3635 Cinema in Akiba(线段树)
查看>>
[Android]使用Dagger 2依赖注入 - DI介绍(翻译)
查看>>
(转)BT1120接口及协议
查看>>
Robot Framework与Web界面自动化测试学习笔记:定位到新窗口
查看>>
u3d demo起步第二章
查看>>
The Dataflow Model 论文
查看>>
Linux守护进程
查看>>
Redis的字典(dict)rehash过程源代码解析
查看>>
遇到没“人性”的管理:你真可怜!
查看>>
局域网之php项目IP访问共享
查看>>
http://www.bootcss.com/p/font-awesome/
查看>>
新浪微博UWP UI意见征求
查看>>
使用ServiceStack构建Web服务
查看>>