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号