2009-07-28 52 views
6

看看Stack Overflow站点的右上角。搜索框中有一些文字说“搜索”。当你点击它时,文字消失。如何在win32编辑控件中使用“占位符文本”?

我想做类似的事情 - 如果一个win32编辑控件是空的(即没有文本),我想绘制一些文本,在一个比正常文本更柔和的颜色。如果控件具有焦点,或者其中有文本,我不想画这个。

有没有什么办法可以做到这一点,而不需要将实际文本设置到控件中并更改文本颜色?也许通过拦截控制油漆或什么?

谢谢。

回答

7

有可能为XP的。检查EM_SETCUEBANNER消息。但是,有certain issues,它使它不能完全按照它应该在XP上工作,所以最好如果你处理Vista。

如果您需要它用于Win2k或更早版本,您需要自己做,至少在这些平台上。

0

也许,但为什么不按需要设置默认文本和颜色,并用'onClick'事件清除它?

+0

因为直到有人输入它,我不想检索文本并获取默认文本。这意味着我不得不添加各种检查默认文本等,这将是一个痛苦。 – Colen 2009-07-28 21:25:54

1

一种可能性:如果.Text属性为空,则将其自动绘制,并手动将文本涂抹到其上。

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; 
+1

请注意,它已被内置到VCL作为TextHint属性 - 我认为它是在D2009中添加的,虽然我现在还不完全确定。 – 2009-08-05 21:28:28

0

你不需要自行绘制的,它的原生与用户的API(横幅) 见Winapi grp样品(C语言)