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

8.3.1 浏览目录对话框简介

在众多的系统提供的对话框中,还有一个很常用的浏览目录对话框,对话框如图8.6所示,这个对话框虽然也是通用型的,但是它是由Shell32.dll提供的,而不是由Comdlg32.dll提供的,在实现的方法上也和上面介绍的通用对话框有很大的不同,本节以一个例子来演示它的使用。


图8.6 浏览目录对话框

例子程序的源代码位于所附光盘的Chapter08\BrowseFolder目录中,目录中包含了BrowseFolder.asm文件和_BrowseFolder.asm文件。BrowseFolder.asm文件的内容很简单:

              .386
              .model flat,stdcall
              option casemap:none
;####################################################################
; Include 文件定义
;####################################################################
include       windows.inc
include       user32.inc
includelib    user32.lib
include       kernel32.inc
includelib    kernel32.lib
include       shell32.inc
includelib    shell32.lib
include       ole32.inc
includelib    ole32.lib
;####################################################################
; 数据段
;####################################################################
              .data?
szPath        db          MAX_PATH dup (?)
 
              .data
szSelect      db          '您选择的目录',0
szNoSelect    db          '您按下了取消键',0
;####################################################################
; 代码段
;####################################################################
              .code
 
include       _BrowseFolder.asm
start:
              invoke GetCurrentDirectory,sizeof szPath,addr szPath
              invoke _BrowseFolder,NULL,addr szPath
              .if   eax
                    invoke MessageBox,NULL,offset szPath,\
                    offset szSelect,MB_OK
              .else
                    invoke MessageBox,NULL,offset szNoSelect,NULL,MB_OK
              .endif
              invoke ExitProcess,NULL
;####################################################################
              end   start

该文件仅包含几句调用和显示结果的代码,全部的功能集中在_BrowseFolder.asm中,用include语句包含进主文件中,这样安排代码的原因是目录浏览对话框的实现比较复杂,把功能模块写成一个单独的文件可以便于在其他文件中引用,读者也可以直接把这个源文件不加修改地用在其他地方。_BrowseFolder.asm文件的内容如下:

 
;####################################################################
; IUnknown 接口定义
;####################################################################
externdef                    IID_IUnknown:IID        
LPUNKNOWN                    typedef DWORD
LPPUNKNOWN                   typedef ptr LPUNKNOWN
 
IUnknown_QueryInterfaceProto typedef proto :DWORD, :DWORD, :DWORD
IUnknown_AddRefProto         typedef proto :DWORD
IUnknown_ReleaseProto        typedef proto :DWORD
IUnknown_QueryInterface      typedef ptr IUnknown_QueryInterfaceProto
IUnknown_AddRef              typedef ptr IUnknown_AddRefProto
IUnknown_Release             typedef ptr IUnknown_ReleaseProto
     
IUnknown struct DWORD
       QueryInterface        IUnknown_QueryInterface  ?
       AddRef                IUnknown_AddRef      ?
       Release               IUnknown_Release     ?
IUnknown ends
;####################################################################
;IMalloc 接口定义
;####################################################################
externdef                    IID_IMalloc:IID         
LPMALLOC                     typedef DWORD
LPPMALLOC                    typedef ptr LPMALLOC
 
IMalloc_AllocProto           typedef proto :DWORD, :DWORD
IMalloc_ReallocProto         typedef proto :DWORD, :DWORD,:DWORD
IMalloc_FreeProto            typedef proto :DWORD, :DWORD
IMalloc_GetSizeProto         typedef proto :DWORD, :DWORD
IMalloc_DidAllocProto        typedef proto :DWORD, :DWORD
IMalloc_HeapMinimizeProto    typedef proto :DWORD
 
IMalloc_Alloc                typedef ptr IMalloc_AllocProto
IMalloc_Realloc              typedef ptr IMalloc_ReallocProto
IMalloc_Free                 typedef ptr IMalloc_FreeProto
IMalloc_GetSize              typedef ptr IMalloc_GetSizeProto
IMalloc_DidAlloc             typedef ptr IMalloc_DidAllocProto
IMalloc_HeapMinimize         typedef ptr IMalloc_HeapMinimizeProto
 
IMalloc struct DWORD
       QueryInterface        IUnknown_QueryInterface       ?
       AddRef                IUnknown_AddRef               ?
       Release               IUnknown_Release              ?

上页:第08章 通用对话框 · 8.2 使用通用对话框(3) 下页:第08章 通用对话框 · 8.3 浏览目录对话框(2)

第08章 通用对话框

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