win32 api 消息处理咨询
static int num=0;
.........
case WM_TIMER:
num+=10;
SendMessage(hwnd,WM_PAINT,NULL,NULL);
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
TextOut(hdc,0,num,TEXT("======"),6);
EndPaint(hwnd,&ps);
return 0;
这代码设置一个定时器,每次num+10;
然后更新TEXT位置,为什么无法实现?
num确实在增加,但是窗口就是不更新;
只有改变窗口大小的时候才会更新
[最优解释]
这3行代码其实没有用:
SendMessage(hwnd,WM_PAINT,NULL,NULL);
return 0;
case WM_PAINT:
这个函数最好把rect算出来更新,重绘整个窗口比较耗CPU,程序员一定要随时想着节省资源!
InvalidateRect(hwnd,NULL,TRUE);
[其他解释]
BOOL InvalidateRect(
HWND hWnd, // handle of window with changed update region
CONST RECT *lpRect,
// address of rectangle coordinates
BOOL bErase // erase-background flag
);
Parameters
hWnd
Handle to the window whose update region has changed. If this parameter is NULL, the system invalidates and redraws all windows, and sends theWM_ERASEBKGND and WM_NCPAINT messages to the window procedure before the function returns.
lpRect
Pointer to a RECT structure that contains the client coordinates of the rectangle to be added to the update region. If this parameter is NULL, the entire client area is added to the update region.
bErase
Specifies whether the background within the update region is to be erased when the update region is processed. If this parameter is TRUE, the background is erased when the BeginPaint function is called. If this parameter is FALSE, the background remains unchanged.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
Windows NT: To get extended error information, callGetLastError.
Remarks
The invalidated areas accumulate in the update region until the region is processed when the next WM_PAINT message occurs or until the region is validated by using the ValidateRect or ValidateRgn function.
The system sends a WM_PAINT message to a window whenever its update region is not empty and there are no other messages in the application queue for that window.
If the bErase parameter is TRUE for any part of the update region, the background is erased in the entire region, not just in the given part.
[其他解释]