InvalidateRect的使用问题

倒霉孩子 2012-02-17 04:20:44

BOOL InvalidateRect(
  HWND hWnd, // handle of window with changed update region
  CONST RECT *lpRect, // address of rectangle coordinates
  BOOL bErase // erase-background flag   
);


这里CONST RECT *lpRect 如果不是NULL,而是一个客户区的一部分矩形的话,其数据可以怎么获得呢?
...全文
146 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim_King_2000 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 finalmiracleday 的回复:]

引用 13 楼 lirunfa 的回复:

自己定义一个rect


自己定义的话rect的范围也是要参照变量的吧,但是InvalidateRect要求的rect是const的,那样的话它的构造参数怎么可以是不确定的变量呢??
如果可以的话,可以举个例子吗?
[/Quote]
函数参数上的const表示“只读”。也就是说该函数不会修改参数,只会读取而已。
Jim_King_2000 2012-02-18
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 finalmiracleday 的回复:]

引用 11 楼 jim_king_2000 的回复:

引用 10 楼 finalmiracleday 的回复:

引用 3 楼 jim_king_2000 的回复:

你想更新哪块就invalidate哪块呗。


invalidate是不是只有MFC有呀?我在Win32中编说我没有定义什么的额。。。

InvalidateRect()是SDK中的,不是MFC的。CRec……
[/Quote]
不需要。
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jim_king_2000 的回复:]

引用 10 楼 finalmiracleday 的回复:

引用 3 楼 jim_king_2000 的回复:

你想更新哪块就invalidate哪块呗。


invalidate是不是只有MFC有呀?我在Win32中编说我没有定义什么的额。。。

InvalidateRect()是SDK中的,不是MFC的。CRect是MFC的类。
[/Quote]

使用SDK需要有什么设置吗,为什么我的程序里显示invalidate未定义呢??
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lirunfa 的回复:]

自己定义一个rect
[/Quote]

自己定义的话rect的范围也是要参照变量的吧,但是InvalidateRect要求的rect是const的,那样的话它的构造参数怎么可以是不确定的变量呢??
如果可以的话,可以举个例子吗?
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jim_king_2000 的回复:]

引用 9 楼 finalmiracleday 的回复:

引用 8 楼 jim_king_2000 的回复:

C/C++ code

CRect rect;
GetClientRect(hWnd, &rect);


。。这个样子不是还是整个窗口里的内容都会被刷新吗。。。怎么养变为只刷一部分呢?

你把rect的宽和高缩缩小就会只刷一部分了。你想……
[/Quote]

其实就是想知道怎么缩小的问题
InvalidateRect需要的不是const rest 吗?怎么改呢?
lirunfa 2012-02-17
  • 打赏
  • 举报
回复
自己定义一个rect
Jim_King_2000 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 finalmiracleday 的回复:]

引用 8 楼 jim_king_2000 的回复:

C/C++ code

CRect rect;
GetClientRect(hWnd, &rect);


。。这个样子不是还是整个窗口里的内容都会被刷新吗。。。怎么养变为只刷一部分呢?
[/Quote]
你把rect的宽和高缩缩小就会只刷一部分了。你想刷哪一块,就把rect设置成那一块即可。
Jim_King_2000 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 finalmiracleday 的回复:]

引用 3 楼 jim_king_2000 的回复:

你想更新哪块就invalidate哪块呗。


invalidate是不是只有MFC有呀?我在Win32中编说我没有定义什么的额。。。
[/Quote]
InvalidateRect()是SDK中的,不是MFC的。CRect是MFC的类。
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jim_king_2000 的回复:]

你想更新哪块就invalidate哪块呗。
[/Quote]

invalidate是不是只有MFC有呀?我在Win32中编说我没有定义什么的额。。。
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jim_king_2000 的回复:]

C/C++ code

CRect rect;
GetClientRect(hWnd, &rect);
[/Quote]

。。这个样子不是还是整个窗口里的内容都会被刷新吗。。。怎么养变为只刷一部分呢?
Jim_King_2000 2012-02-17
  • 打赏
  • 举报
回复

CRect rect;
GetClientRect(hWnd, &rect);
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhao4zhong1 的回复:]

通常用于代码作者决定窗口内需要刷新才能继续有效的子矩形区域,避免大面积刷新整个窗口带来性能问题引发窗口闪烁。
[/Quote]

额,“有效的子矩形区域”怎么设??
可以具体点吗,我刚开始学,不是很懂。。。
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sagegz 的回复:]

GetClientRect
[/Quote]
BOOL GetClientRect(
  HWND hWnd, // 窗口句柄
  LPRECT lpRect // 客户区坐标
  );

这个不是也无法自己定义一个小矩形吗??
如果可以,请问是怎么用的??
倒霉孩子 2012-02-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

BeginPaint可以得到
[/Quote]

BeginPaint记录的不是整个窗口信息吗,比如说BeginPaint(hWnd, &ps),那怎么自己定义自己需要的区域呢??
赵4老师 2012-02-17
  • 打赏
  • 举报
回复
通常用于代码作者决定窗口内需要刷新才能继续有效的子矩形区域,避免大面积刷新整个窗口带来性能问题引发窗口闪烁。
Jim_King_2000 2012-02-17
  • 打赏
  • 举报
回复
你想更新哪块就invalidate哪块呗。
sagegz 2012-02-17
  • 打赏
  • 举报
回复
GetClientRect
pengzhixi 2012-02-17
  • 打赏
  • 举报
回复
BeginPaint可以得到

64,266

社区成员

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

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