2019独角兽企业重金招聘Python工程师标准>>>

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

OPENFILENAME结构的定义相关推荐

  1. Go 学习笔记(14)— 结构体定义、实例化、初始化、匿名结构体、结构体访问、结构体作为形参、结构体指针

    Go 语言中没有 "类" 的概念,也不支持 "类" 的继承等面向对象的概念.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法. 1. 结 ...

  2. c++结构体定义和使用_[day day go]结构体amp;给结构定义方法

    结构体 //定义 type treeNode struct {value intleft, right *treeNode }//工厂函数创建 func createNode(value int) * ...

  3. C#中结构体定义并转换字节数组

    ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中结构体定义并转换字节数组 最近的项目在做socket通信报文解析的时候,用到了结构体与字 ...

  4. 结构体定义小的放前面_编程C语言进阶篇——自定义数据类型:结构体

    一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...

  5. C/C++中struct结构体定义变量的3种方法及初始化

    本博客整理自http://blog.csdn.net/zunfo/article/details/51494631 1.struct结构体定义 1.1.先定义结构体,然后再定义结构体变量 struct ...

  6. C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...

  7. C++ 线性表的结构体定义(顺序表和链式表)

    线性表的结构体定义: 1.顺序表的结构体定义 typedef struct {int data[maxSize];int length;} Sqlist; 2.单链表结点的结构体定义 typedef ...

  8. Linux下查找结构体定义的位置

    1.首先我们要进入目录: 比如:cd /usr/include 2.查找在当前目录下的结构体: 指令:grep "struct sockaddr_in {" * -nir 形式:g ...

  9. C语言结构体学生基本资料,用结构体定义10个学生基本信息

    用结构体定义10个学生基本信息,用到结构体.子函数.文件等的相关知识. /* ************************************************* 2.1.用结构体定义1 ...

  10. c语言什么事结构体,C语言结构体定义是什么

    结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合. 结构中可以使用不同的数据类型. 结构说明和结构变量定义: 在Turbo C中, 结构也是一种数据类型, 可以使用结构变量, 因此,  ...

最新文章

  1. 英特尔在移动市场另辟蹊径
  2. Tomcat三种模式及配置APR模式
  3. Oracle宣布终止所有Intel Itanium平台上的软件开发
  4. 常考数据结构与算法:数组中相加和为0的三元组
  5. 机器学习(二十八)——Monte-Carlo
  6. 实现字符串的编码转换,用以解决字符串乱码问题
  7. activiti 5.22的demo运行
  8. CentOS英文版下安装中文语言包
  9. 【渝粤教育】国家开放大学2018年春季 8647-21T工程经济与管理 参考试题
  10. vs2013 c++代码内出现中文导致编译错误
  11. 学习单片机——MCS-51单片机的型号与组成
  12. mysql stmt fetch_mysql_stmt_fetch()
  13. 【JavaWeb】消息摘要、数字签名与数字证书的区别
  14. Maven 生命周期详解
  15. Origin 画图——简单的柱状图画法
  16. react18 学习(一)
  17. 这届年轻人越来越爱养宠物了
  18. CodeForces #352B.Jeff and Periods
  19. ios 简书 获取通讯录信息_ios 各种权限整理
  20. 读书笔记 | 《推荐系统》

热门文章

  1. 实验server2003的域环境里安装一台Server2008 DC
  2. ipv4网络配置方法
  3. java 判断是合法语言_使用Java 怎么实现一个判断IP地址是否合法的功能
  4. java继承案例分析,Java day5【第十四章】继承案例分析
  5. AndroidOpenCV摄像头预览旋转90度问题
  6. freeswitch 基于webrtc网页视频、语音通话官方例子video_demo安装
  7. 二叉树的层序遍历_二叉树:你真的会翻转二叉树么?
  8. 土壤重金属含量分布、Cd镉含量、Cr、Pb、Cu、Zn、As和Hg、土壤采样点、土壤类型分布
  9. 挂载程序在我的第一台阿里云服务器上
  10. xcode mysql库_Mac+MySQL+Xcode数据库配置