sendmessage(awnd, bffm_setstatustext, 1, longint(pchar(strpath)));
end;
end;
end;
result := 0;
end;
browsecallback函数可以接受一些通知消息,例如上面列出的bffm_selchanged,当用户在文件夹列表中选择了另外一个项目的时候就会触发,程序员可以用另外一些消息(如bffm_setstatustext)更新对话框其他相应的部分。
对shbrowseforfolder的介绍说这么多也就足够了。不过,我对于这样单调的界面并不满意。一个最直接的想法就是:希望在对话框中添加一个列表,其中列出一些常用的文件夹供用户选择,而不需要每次都在“庭院深深”的层次树中一次再一次的click。这又是一个使用subclass的好地方。还记得在本文的系列之一中我提到的吗?要使用subclass技术,充分必要条件就是获得一个窗口的句柄。非常幸运,这里我们有很简单的办法能够得到这个句柄,因为对话框初始化成功后会向上述的回调函数发送bffm_initialized通知,我们的subclass工作就在这里完成。
在上述的browsecallback函数中添加如下的message dispatcher:
case umsg of
bffm_initialized:
begin
oldbrowseproc := twindowproc(getwindowlong(awnd, gwl_wndproc));
setwindowlong(awnd, gwl_wndproc, longint(@newbrowseproc));
adjustdlg(awnd);