【问题标题】:WIN32 change the text insideTextOutWIN32里面的文字改TextOut
【发布时间】:2012-06-06 18:21:49
【问题描述】:

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

稍后发短信,我该怎么办?我应该使用: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;

【问题讨论】:

  • 使用一个变量,这样这段代码就可以绘制任何文本。更改变量时调用 InvalidateRect() 以便窗口绘制新文本。

标签: windows winapi win32gui


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2011-05-25
    • 1970-01-01
    • 2014-03-29
    • 2011-03-26
    • 2021-11-26
    相关资源
    最近更新 更多