关于InvalidateRect的问题

switch(message){caseWM_LBUTTONDOWN:iCount=0;InvalidateRect(hwnd,NULL,true);return0;ca... switch (message)
{
case WM_LBUTTONDOWN:
iCount = 0 ;
InvalidateRect (hwnd, NULL, true) ;
return 0 ;

case WM_MOUSEMOVE:
if (wParam & MK_LBUTTON && iCount < 1000)
{
pt[iCount ].x = LOWORD (lParam) ;
pt[iCount++].y = HIWORD (lParam) ;

hdc = GetDC (hwnd) ;
SetPixel (hdc, LOWORD (lParam), HIWORD (lParam), 0) ;
ReleaseDC (hwnd, hdc) ;
}
return 0 ;

case WM_LBUTTONUP:
InvalidateRect (hwnd, NULL,FALSE) ;
return 0 ;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
SetCursor (LoadCursor (NULL, IDC_WAIT)) ;
ShowCursor (TRUE) ;
for (i = 0 ; i < iCount - 1 ; i++)
for (j = i + 1 ; j < iCount ; j++)
{
MoveToEx (hdc, pt[i].x, pt[i].y, NULL) ;
LineTo (hdc, pt[j].x, pt[j].y) ;
}

ShowCursor (FALSE) ;
SetCursor (LoadCursor (NULL, IDC_ARROW)) ;
EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
鼠标的动作是 按下---移动---放开
在WM_LBUTTONDOWN中有InvalidateRect (hwnd, NULL, true) 标记一次
在WM_LBUTTONUP中有InvalidateRect (hwnd, NULL,FALSE) 再标记一次
当进行WM_PAINT的时候那重绘几次啊?
还有InvalidateRect (hwnd, NULL, true)和InvalidateRect (hwnd, NULL,FALSE)是不是都会进行WM_PAINT重绘?
展开
 我来答
手机用户96133
2011-08-29 · 超过26用户采纳过TA的回答
知道答主
回答量:162
采纳率:0%
帮助的人:100万
展开全部
先回答你的第二个问题。

scrollWindow并不产生WM_PAINT消息。

程序第一次收到WM_PAINT消息是在你的WinMain函数里,第一次调用UpdateWindow的时候产生的。

接下来,当你的窗口被最小化,或者由于种种原因被遮盖,或者你调用了InvalidateRect这样的函数之后才产生WM_PAINT消息。

具体来说,当你的窗口被遮盖了,这可能是因为你去玩了全屏的3D游戏,把整个桌面都遮盖了,或者是你拿别的窗口把程序的窗口遮盖了等等。

Windows操作系统记录你的窗口的那一部分被遮盖了,叫做“无效部分”。这时候就会产生WM_PAINT消息,WM_PAINT消息的响应代码应当重绘窗口,并通过BeginPaint()和EndPaint()的调用使整个无效部分恢复为有效。

现在回答你的第一个问题。

InvalidateRect的作用就是产生WM_PAINT消息。

WM_COMMAND里面的ValidateRect的作用在于,正常来说,我们在WM_PAINT里面会有BeginPaint()和EndPaint()的调用,这会使得窗口有效。

但是有时候,我们的绘制不是通过BeginPaint()和EndPaint()产生的,这个时候我们却已经绘制了窗口了。这时候可以通过ValidateRect来使窗口有效。

(这时候就不能用BeginPaint()和EndPaint()来使窗口有效了,因为这一对函数只能在处理WM_PAINT消息的时候进行调用。

rect的大小是在WM_SIZE里面确定的。
窗口第一次绘制出来的时候会产生一次WM_SIZE消息。此后每次改变窗口时都会产生这个消息。因此在第一次收到WM_COMMAND消息之前,rect结构体的值就已经在第一次WM_SIZE消息时设置好了。
舒仕福
2023-07-11 广告
eor有以下两种含义:1. eor是计算机术语,表示二进制异或运算。在计算机逻辑运算中,算术逻辑执行二进制按位异或运算,两数执行异或后相同位结果为0,不同位结果为1。2. eor也表示在任何时期,向地层中注入流体、能量,以提高产量或采收率的... 点击进入详情页
本回答由舒仕福提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式