WIN32更改文本insideTextOut

时间:2012-06-06 18:21:49

标签: windows winapi win32gui

这将使用TRANSPARENT BG和A彩色文本在屏幕上显示文字,但如果我想更改

,该怎么办?

文字以后,我该怎么办?我应该使用: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;

1 个答案:

答案 0 :(得分:2)

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

  1. 请勿使用硬编码字符串调用TextOut。而是通过GetWindowText
  2. 获取
  3. WM_SETTEXT消息添加操作员。收到后 - 使您的窗口无效(或至少假定要绘制文本的区域)。
  4. 现在有关透明度等的一些解释

    我假设你的窗口有一个相关的背景画笔(即它的WNDCLASS在课程注册时有非零hbrBackground成员。如果不是 - 你在非彩绘区域上面绘制一个透明文字,可能包含任何垃圾。

    在致电BeginPaint期间,您的窗口程序会收到WM_ERASEBACKGROUND。假设您将其传递给DefWindowProc - 窗口的客户区将由背景画笔填充。因此,每次你开始绘画 - 你的窗口的客户端将被一些画笔填充。然后在新填充的背景上透明地绘制文本。这样就不会发生涂抹。

    每当你想在窗户上改变视觉效果时 - 在现场绘制额外的东西是不够的。因为操作系统可能会在任何时候请求您的窗口重绘自己。因此,在收到WM_PAINT后,您的窗口必须能够充分地绘制自己。

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