【发布时间】:2010-11-14 20:53:01
【问题描述】:
查看 Stack Overflow 网站的右上角。搜索框中有一些文字说“搜索”。当您在其中单击时,文本会消失。
我想做与此类似的事情 - 如果 win32 编辑控件为空(即没有文本),我想在其中绘制一些文本,颜色比普通文本更柔和。如果控件有焦点,或者里面有文本,我不想画那个。
有什么方法可以在不将实际文本设置到控件中并更改文本颜色的情况下做到这一点?也许通过拦截控制油漆或其他方式?
谢谢。
【问题讨论】:
查看 Stack Overflow 网站的右上角。搜索框中有一些文字说“搜索”。当您在其中单击时,文本会消失。
我想做与此类似的事情 - 如果 win32 编辑控件为空(即没有文本),我想在其中绘制一些文本,颜色比普通文本更柔和。如果控件有焦点,或者里面有文本,我不想画那个。
有什么方法可以在不将实际文本设置到控件中并更改文本颜色的情况下做到这一点?也许通过拦截控制油漆或其他方式?
谢谢。
【问题讨论】:
您不需要自绘,它是原生的,带有用户 api(横幅) 请参阅Winapi grp 获取示例(C 语言)
【讨论】:
感谢这个问题,我将来可以使用它。 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;
【讨论】:
从 XP 开始就可以了。检查EM_SETCUEBANNER 消息。但是,certain issues 使其无法在 XP 上完全正常工作,因此最好使用 Vista。
如果您在 Win2k 或更早的版本中需要它,您需要自己做,至少在那些平台上。
【讨论】:
【讨论】:
一种可能性:让它为所有者绘制,如果 .Text 属性为空,则手动在其上绘制文本。
【讨论】:
也许可以,但为什么不根据需要设置默认文本和颜色,并使用“onClick”事件将其清除?
【讨论】: