查看Stack Overflow站点的右上角。搜索框中有一些文字说“搜索”。当您在其中单击时,文本将消失。
我想做类似的事情 - 如果win32编辑控件为空(即没有文本),我想在其中绘制一些文本,颜色比普通文本更柔和。如果控件有焦点,或者里面有文字,我不想画那个。
如果不将实际文本设置到控件中并更改文本颜色,有什么办法可以做到吗?也许通过拦截控制油漆或什么?
感谢。
答案 0 :(得分:7)
从XP开始是可能的。查看EM_SETCUEBANNER消息。但是,有certain issues使它不能完全像在XP上那样工作,所以如果你正在处理Vista,那就最好了。
如果您需要Win2k或更早版本,您需要自己完成,至少在这些平台上。
答案 1 :(得分:3)
感谢您提出这个问题,我将来可以使用它。 FWIW(可能不多),这是Delphi中的一个实现:
procedure TForm1.FormShow(Sender: TObject);
const
ECM_FIRST = $1500;
EM_SETCUEBANNER = ECM_FIRST + 1;
begin
SendMessage(edt.Handle,EM_SETCUEBANNER,0,LParam(PWideChar(WideString('Enter search here'))));
end;
答案 2 :(得分:1)
一种可能性:将其设为自己绘制,如果.Text属性为空,则手动将文本绘制到其上。
答案 3 :(得分:1)
答案 4 :(得分:0)
也许,但为什么不根据需要设置默认文本和颜色,并使用'onClick'事件清除它?
答案 5 :(得分:0)
您不需要所有者绘制,它是原生的用户apis(横幅) 有关样本(在C中),请参阅Winapi grp