sendmessage(awnd, bffm_setselection, 1, longint(pchar(str)));
end;
end;
由于我们添加的combobox是一个自绘风格(owner-draw)的列表,所以我们还必须处理wm_measureitem和wm_drawitem消息。wm_measureitem的处理相对简单,因为对于combobox来说项目的宽度无所谓(它自动由combobox本身的宽度来决定),我们只需要设置它的高度即可。为了简化起见,我用了硬编码的方法,当然基于系统设置进行仔细的计算也是可行的(而且完全应该):
wm_measureitem:
begin
pmis := pmeasureitemstruct(lp);
if pmis^.ctltype=odt_combobox then
pmis^.itemheight := 20;
end;
其中pmis声明为一个pmeasureitemstruct结构指针。
wm_drawitem的处理要复杂的多。因为对于系统级的文件夹,必须从system imagelist中获得它的图标,而且还要从lpitemidlist取得文件夹的名称(不一定是文件路径:比如,c:\windows\desktop在shell中的名称是“桌面”)。为此我添加了几个辅助函数,用来简化wm_drawitem的处理: