WIN32汇编语言教程:第08章 通用对话框 · 8.3 浏览目录对话框(3)

结构的各个重要字段说明如下。

● lpszTitle——对话框中的自定义文字,如例子中显示的是“请选择目录”。

● lpfn——回调函数的地址。

● ulFlags——用来定义对话框类型的标志,下面是一些重要的标志:

■  BIF_BROWSEFORPRINTER——对话框中只能选择打印机。

■  BIF_BROWSEINCLUDEFILES——同时显示目录中的文件。

■  BIF_RETURNONLYFSDIRS——只返回文件系统中的目录。

■  BIF_STATUSTEXT——对话框中显示一个状态栏。

■  BIF_EDITBOX——显示一个编辑框供用户手工输入目录。

■  BIF_VALIDATE——显示编辑框的时候检测用户输入目录的合法性。

3. 对话框的回调函数

当函数执行后,将显示对话框,当对话框初始化以及每当用户选择不同的目录的时候,函数调用lpfn指定的回调函数,回调函数的参数有4个,分别是父窗口句柄hWnd、消息类型uMsg、消息参数lParam和自定义数据lpData,回调函数的语法如下:

_BrowseFolderCallBack      proc    hWnd,uMsg,lParam,lpData
 
       mov     eax,uMsg
       .if     eax == BFFM_INITIALIZED
                ...
       .elseif eax == BFFM_SELCHANGED
                ...
       .endif
       xor     eax,eax
       ret
 
_BrowseFolderCallBack      endp

回调函数可能收到的消息有3种:

● BFFM_INITIALIZED——在对话框初始化的时候收到。

● BFFM_SELCHANGED——在用户选择了一个目录的时候收到,这时lParam参数指向一个表示当前被选择目录的ITEMIDLIST结构。

● BFFM_VALIDATEFAILED——用户输入了一个不合法的目录名。

在回调函数中,程序可以根据情况向对话框发送控制消息,当收到BFFM_SELCHANGED消息时,可以根据选择情况决定是否允许用户单击对话框中的“确定”按钮,通过发送BFFM_ENABLEOK 消息可以控制“确定”按钮的状态:

invoke SendMessage,hWnd, BFFM_ENABLEOK,0,TRUE ;允许“确定”按钮
invoke SendMessage,hWnd, BFFM_ENABLEOK,0,FALSE ;灰化“确定”按钮

程序也可以通过发送BFFM_SETSELECTION消息来设定目录:

invoke SendMessage,hWnd,BFFM_SETSELECTION,TRUE,lpPath

如果消息的wParam参数为TRUE,则目录用lParam参数指定的字符串表示;如果wParam为FALSE,则目录用lParam指定的ITEMIDLIST结构表示。由于用字符串表示比较方便,所以例子程序在收到初始化消息的时候用上面的语句设置初始目录。

调用SHBrowseForFolder函数的时候,通过BROWSEINFO结构的pidlRoot字段也可以设置初始目录,但设置ITEMIDLIST结构比较麻烦,所以一般不使用这种方法。

另外,在回调函数中可以通过BFFM_SETSTATUSTEXT消息设置状态栏的文字,对话框的状态栏并不是指一般窗口底部的状态栏,而是指自定义文字下面的那一行文字,在图8.6中就是显示被选择目录名的地方,使用BFFM_SETSTATUSTEXT消息的格式是:

invoke SendMessage,hWnd,BFFM_SETSTATUSTEXT,0,lpsz

例子程序中,回调函数每次在收到用户选择目录的BFFM_SELCHANGED消息后,在状态栏中显示目录的名称。

4. 获取返回的目录

当SHBrowseForFolder返回的时候,如果用户单击的是“取消”按钮,那么函数的返回值是0,否则的话,函数返回一个指向ITEMIDLIST结构的指针,对于这个结构可以不必去深究,因为使用SHGetPathFromIDList函数可以很方便地将它转换成目录字符串:

invoke SHGetPathFromIDList,lpItemIDList,addr szPath

函数执行后,szPath中就是字符串格式的用户选择的目录名称了。

上页:第08章 通用对话框 · 8.3 浏览目录对话框(2) 下页:第09章 通用控件 · 9.1 通用控件简介(1)

第08章 通用对话框

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号