end start
分析:
mov ofn.lstructsize,sizeof ofnpush hwnd
pop ofn.hwndowner
push hinstance
pop ofn.hinstance
我们在此填充结构体openfilename变量ofn的有关成员。
mov ofn.lpstrfilter, offset filterstring
这里filterstring 是文件过滤模式的字符串地址,我们指定的过滤模式字符串如下:
filterstring db "all files",0,"*.*",0注意:所有的模式串都是配对的,前一个是描述,后一个才是真正的模式,次处"*.*"和"*.txt"是wiondows用来寻找匹配的欲打开的文件的。我们当能可以指定任何模式,但是不要忘记在结尾处加0以代表字符串已结束,否则您的对话框在操作时可能不稳定。
db "text files",0,"*.txt",0,0
mov ofn.lpstrfile, offset buffer
mov ofn.nmaxfile,maxsize
这里是把缓冲区的地址放到结构体中,同时必须设定大小。以后我们可以随意编辑在该缓冲区中返回的信息。
mov ofn.flags, ofn_filemustexist or \
ofn_pathmustexist or ofn_longnames or\
ofn_explorer or ofn_hidereadonly
flags 中放入的是对话框的风格和特性值。
其中ofn_filemustexist和 ofn_pathmustexist要求用户在打开对话框的编辑控件中输入的文件名或路径名必须存在。
ofn_longnames 告诉对话框显示长文件名。
ofn_explorer 告诉windows对话框的外观必须类似资源管理器。
ofn_hidereadonly 指定不要显示只读文件(既使它的扩展名符合过滤模式)。
除此之外,还有许多其它的标志位,您可以参考有关win32 api手册。
mov ofn.lpstrtitle, offset ourtitle
指定打开文件对话框的标题名。
invoke getopenfilename, addr ofn
调用getopenfilename函数,并传入指向结构体ofn的指针。
这时候,打开文件对话框就显示出来了,getopenfilename函数要一直等到用户选择了一个文件后才会返回,或者当用户按下了cancel键或关闭对话框时。
当用户选择了打开一个文件时,该函数返回true, 否则返回false。
.if eax==true
invoke lstrcat,offset outputstring,offset fullpathname
invoke lstrcat,offset outputstring,ofn.lpstrfile
invoke lstrcat,offset outputstring,offset crlf
invoke lstrcat,offset outputstring,offset fullname
当用户选择打开一个文件时,我们就在一个对话框中显示一个字符串,我们先给outputstring变量分配内存,然后调用pai 函数lstrcat,把所有的字符串连到一起,为了让这些字符串分行显示,我们必须在每个字符串后面加一个换行符。
mov eax,ofn.lpstrfile
push ebx
xor ebx,ebx
mov bx,ofn.nfileoffset
add eax,ebx
pop ebx