0

这将在屏幕上显示带有透明背景和彩色文本的文本,但是如果我想更改

稍后发短信,我该怎么办?我应该使用:SendMessage(); 或: SetWindowText( ) 如果是,如何以及是否

不,然后呢???如何

case WM_PAINT:

       dc = BeginPaint(hwnd, &Ps);

SetBkMode(dc, TRANSPARENT);

        SetTextColor(dc, RGB(454,0,0)); 

       TextOut(dc, 10, 200, L"SEE? ", 5);

       EndPaint(hwnd, &Ps);

       break;
4

1 回答 1

2

如果您想绘制与窗口关联的文本 - 您应该这样做:

  1. 不要TextOut用硬编码的字符串调用。而是通过GetWindowText.
  2. 为消息添加处理程序WM_SETTEXT。收到后 - 使您的窗口(或至少假定绘制文本的区域)无效。

现在对透明度等进行一些解释。

我假设您的窗口有一个关联的背景画笔(即在类注册时它WNDCLASS有非零成员)。hbrBackground如果不是 - 您在未绘制区域上方绘制透明文本,其中可能包含任何垃圾。

在调用BeginPaint您的窗口过程期间收到WM_ERASEBACKGROUND. 假设您将它传递给DefWindowProc- 您的窗口的客户区域将由背景画笔填充。这样每次您开始绘画时 - 您的窗口的客户端都会被一些画笔填充。然后在新填充的背景上透明地绘制文本。这样就不会出现涂抹现象。

每当您想更改窗口上的视觉效果时 - 就地绘制额外的东西是不够的。因为在任何时候操作系统都可能要求您的窗口重新绘制自身。因此,您的窗户必须能够在收到后充分地自行绘制WM_PAINT

一种常见的做法是在某些更改时使您的窗口(或其一部分,使用InvalidateRect或类似功能)无效。然后,当您收到WM_PAINT- 重新粉刷您的窗口。

于 2012-06-06T18:37:32.387 回答