如何在win32编辑控件中使用“占位符文本”?

时间:2009-07-28 21:15:22

标签: winapi controls edit

查看Stack Overflow站点的右上角。搜索框中有一些文字说“搜索”。当您在其中单击时,文本将消失。

我想做类似的事情 - 如果win32编辑控件为空(即没有文本),我想在其中绘制一些文本,颜色比普通文本更柔和。如果控件有焦点,或者里面有文字,我不想画那个。

如果不将实际文本设置到控件中并更改文本颜色,有什么办法可以做到吗?也许通过拦截控制油漆或什么?

感谢。

6 个答案:

答案 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