一个关于InvalidateRect的问题 求解

我用VC++6.0看到书上一例子如下caseWM_TIMER:干其他事情....InvalidateRect(hwnd,NULL,FALSE);return0;caseW... 我用VC++ 6.0
看到书上一例子如下

case WM_TIMER:
干其他事情....
InvalidateRect (hwnd, NULL, FALSE) ;
return 0;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rc) ;

改变szBuffer的内容

DrawText (hdc, szBuffer, -1, &rc,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hwnd, &ps) ;
return 0 ;

我门都知道 如果InvalidateRect 用 FALSE ,BeginPaint 是不会用背景画刷擦除背景的。只会使无效阵矩变为有效。
可是问题是 当我改变了szBuffer后 用DrawText输出的时候 居然上一次的文本被擦除了。

而且我确定 这条WM_PAINT 是InvalidateRect 导致发出的,因为我已经建立窗口时已经锁定了 窗口大小 ,是不会有WM_SIZE 出现 而引发WM_PAINT的。

我觉得奇怪 按道理来说应该这一次输出的字体会覆盖到上一次字体上。形成字体累积。
可是居然上一次文字却不见了被擦除掉了。而这一次字体被好好绘制出来了
我很奇怪到底什么时候被擦除掉的呢

希望高手解答
展开
 我来答
百度网友9ff4aa448
2009-05-27 · TA获得超过336个赞
知道小有建树答主
回答量:221
采纳率:0%
帮助的人:292万
展开全部
你是用DrawText输出字符串,默认情况下字体颜色是黑色,背景颜色是白色。你这种情况应该是DrawText用背景颜色覆盖了上一次的字符串。在DrawText之前把背景颜色设置成透明就应该可以了。SetBkMode就可以完成需要。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式