9

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

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

有什么办法可以在不将实际文本设置到控件中并更改文本颜色的情况下做到这一点?也许通过拦截控制油漆或其他什么?

谢谢。

4

6 回答 6

8

从 XP 开始就可以了。检查EM_SETCUEBANNER消息。然而,有一些问题使它不能完全像在 XP 上那样工作,所以最好是在处理 Vista 时。

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

于 2009-07-28T23:45:08.817 回答
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;
于 2009-07-29T21:01:50.653 回答
1

一种可能性:使其所有者绘制,如果 .Text 属性为空,则手动在其上绘制文本。

于 2009-07-28T22:58:20.037 回答
1

看看EM_SETCUEBANNER

于 2009-07-28T23:44:57.587 回答
0

也许吧,但为什么不根据需要设置默认文本和颜色,并使用“onClick”事件清除它呢?

于 2009-07-28T21:22:32.350 回答
0

您不需要所有者绘制,它是原生的用户 api(横幅)请参阅Winapi grp以获取示例(在 C 中)

于 2009-08-01T21:43:04.083 回答