iczelion tut11[4]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 jimgreen 的 blog

 end start


分析:

            mov ofn.lstructsize,sizeof ofn
            push hwnd
            pop  ofn.hwndowner
            push hinstance
            pop  ofn.hinstance

我们在此填充结构体openfilename变量ofn的有关成员。

            mov  ofn.lpstrfilter, offset filterstring

这里filterstring 是文件过滤模式的字符串地址,我们指定的过滤模式字符串如下:

filterstring db "all files",0,"*.*",0
             db "text files",0,"*.txt",0,0
注意:所有的模式串都是配对的,前一个是描述,后一个才是真正的模式,次处"*.*"和"*.txt"是wiondows用来寻找匹配的欲打开的文件的。我们当能可以指定任何模式,但是不要忘记在结尾处加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

本文关键:iczelion asm
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top