一个关于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的。
我觉得奇怪 按道理来说应该这一次输出的字体会覆盖到上一次字体上。形成字体累积。
可是居然上一次文字却不见了被擦除掉了。而这一次字体被好好绘制出来了
我很奇怪到底什么时候被擦除掉的呢
希望高手解答 展开
看到书上一例子如下
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的。
我觉得奇怪 按道理来说应该这一次输出的字体会覆盖到上一次字体上。形成字体累积。
可是居然上一次文字却不见了被擦除掉了。而这一次字体被好好绘制出来了
我很奇怪到底什么时候被擦除掉的呢
希望高手解答 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询