这将使用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;
答案 0 :(得分:2)
如果您想绘制与窗口关联的文本 - 这就是您应该做的:
TextOut
。而是通过GetWindowText
。WM_SETTEXT
消息添加操作员。收到后 - 使您的窗口无效(或至少假定要绘制文本的区域)。现在有关透明度等的一些解释
我假设你的窗口有一个相关的背景画笔(即它的WNDCLASS
在课程注册时有非零hbrBackground
成员。如果不是 - 你在非彩绘区域上面绘制一个透明文字,可能包含任何垃圾。
在致电BeginPaint
期间,您的窗口程序会收到WM_ERASEBACKGROUND
。假设您将其传递给DefWindowProc
- 窗口的客户区将由背景画笔填充。因此,每次你开始绘画 - 你的窗口的客户端将被一些画笔填充。然后在新填充的背景上透明地绘制文本。这样就不会发生涂抹。
每当你想在窗户上改变视觉效果时 - 在现场绘制额外的东西是不够的。因为操作系统可能会在任何时候请求您的窗口重绘自己。因此,在收到WM_PAINT
后,您的窗口必须能够充分地绘制自己。
通常的做法是在某些更改后使您的窗口(或其中一部分,使用InvalidateRect
或类似功能)无效。然后,当您收到WM_PAINT
时 - 重新绘制您的窗口。