谁能帮我看下这个程序问题怎么解决

ff5dq4 2007-05-05 05:17:23
我做了个小程序的实验 在一个窗口A中 当我把一个小窗口B 往A上放然后再取走
这个时候A中被B覆盖的矩形区域会无效,成为一个无效矩形区域,windows于是就会发一条 WM_PAINT

下面是我的对应 WM_PAINT 的处理程序



case WM_PAINT:

GetUpdateRect(hwnd,&rect1,FALSE); //得到无效矩形区域的4个点位置
//放于rect1结构
sprintf(szChar1,"top is %d",rect1.top); //把4个位置分别放入4个数组
sprintf(szChar2,"botn is %d",rect1.bottom);
sprintf(szChar3,"left is %d",rect1.left);
sprintf(szChar4,"right is %d",rect1.right);



HDC hDC;
TextOut(hDC,0,i,szChar1,strlen(szChar1)); //在窗口里显示4个位置的点

TextOut(hDC,0,i+100,szChar2,strlen(szChar2));

TextOut(hDC,0,i+200,szChar3,strlen(szChar3));

TextOut(hDC,0,i+300,szChar4,strlen(szChar4));
EndPaint(hwnd,&ps);


程序编写好后 我发现它并不按我的想象工作,每次B覆盖A的一块后 它不会自动更新显示这块无效区域的4个位置。
今天研究了半天 终于发现 是 TextOut 根本就没有工作
只有在TextOut 自己写文字的那块区域被覆盖它才会开始工作

请问整个问题怎么解决
...全文
207 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
G_ZhaoKun 2007-05-05
  • 打赏
  • 举报
回复
case WM_PAINT:
GetUpdateRect(hWnd,&rect1,FALSE);
InvalidateRect(hWnd, NULL, FALSE); //重绘hWnd整个用户区域
hdc = BeginPaint(hWnd, &ps);
...
EndPaint(hWnd, &ps);

break;
ff5dq4 2007-05-05
  • 打赏
  • 举报
回复

老大你不是写错了啊
我只找到这个

InvalidateRect (hwnd, NULL, TRUE)
jixingzhong 2007-05-05
  • 打赏
  • 举报
回复
关于这个方法的使用方法、效果,
查 MSDN
jixingzhong 2007-05-05
  • 打赏
  • 举报
回复
Invalidate()

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧