Window SubClassing另类运用(之二)[3]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 weizhisheng 的 blog

           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);


本文关键:Delphi,API,Subclass
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top