SDK 如何处理 WM_PAINT?
想做一个类似 记事本 的程序,用sdk来写,不用 资源/控件,整个窗口就当成一个记事本界面。
我现在考虑当 WM_PAINT 到来的时候,我该怎么处理?
貌似每次 WM_PAINT 时,需要重画的矩形框都很小,我是该每次都重画那些 小矩形框?
还是等几个 WM_PAINT 之后再花,那此时该重画的区域又怎么确定??
还是干脆全部窗口都重画??
还是说有更好的其他的方式??
Windows 是怎么做的??
有太多的疑问,请求帮助,可以给方案,推荐资料,推荐书,或者类似的代码~~ 感谢
[解决办法]
InvalidateRect
The InvalidateRect function adds a rectangle to the specified window's update region. The update region represents the portion of the window's client area that must be redrawn.
BOOL InvalidateRect(
HWND hWnd, // handle to window
CONST RECT *lpRect, // rectangle coordinates
BOOL bErase // erase state
);
只重画一部分
[解决办法]
限制重画区域可以用BOOL InvalidateRect(
HWND hWnd, // handle to window
CONST RECT *lpRect, // rectangle coordinates
BOOL bErase // erase state
);
PAINT中可以整个画,只有重画区域内的才会被重画,其他的不起作用。这样Paint方便些。也可以按
PAINTSTRUCT ps;、、中的 rcPaint
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
来计算要重绘的内容,不过同样花时间。
[解决办法]
重画哪一部分,是有道理的, 比如向下滚动一行的时候,肯定是只画最下面一行,往上类似
输入字符的时候,一般重画当前行,而到了边界之后,一般都是向左滚动一个字符的宽度,这样,就在最右边画出每行的最后一个字符。
[解决办法]
窗口A 移开的时候,重绘区会很大,所以不如全部重绘,反正重绘区外不起作用。
[解决办法]
下载我的“ClipPaint.rar”做参考。
[解决办法]