这是我做的最晕的一个例子,演示的是“浏览目录对话框”。之所以晕是因为要用到了COM库函数,而以我的程度,对于COM技术肯定一窍不通的!还好老罗的代码中提供了两个COM的接口,可以直接拿来调用。可是我对于其中是如何运作的琢磨不透……
虽然浏览对话框也是通用控件,但是windows并不是在Comdlg32.dll提供的,而是在Shell32.dll中!截图如下:
主程序框架并不复杂,主要功能代码在_BrowseFolder.asm,主程序BrowseFolder.asm中代码如下:
下面关键到了,用到了两个COM接口,不怎么懂,如何去释放COM库的也是一知半解。显示对话框是由SHBrowseForFolder函数完成的:
invoke SHBrowseForFolder,lpbi
mov lpItemIDList,eax ;返回一个ITEMIDLIST结构指针
参数lpbi指向一个包含对话框初始化数据的BROWSEINFO结构
当SHBrowseForFolder返回的时候,如果用户单击的是“取消”按钮,那么函数的返回值是0,否则的话,函数返回一个指向ITEMIDLIST结构的指针,对于这个结构可以不必去深究,因为使用SHGetPathFromIDList函数可以很方便地将它转换成目录字符串。
_BrowseFolder.asm代码如下:
研究中……