写了一个记录时间的结构体:
struct time{
int second ;
int centisec ;
} tm ;
WM_PAINT是这样的:
Hdc hdc ;
PAINTSTRUCT ps ;
hdc = BeginPaint(hwnd , &ps) ;
RECT rc ;
SetMapMode(hdc , MM_TEXT) ;
GetClientRect(hwnd , &rc) ;
int r = 0.45 * Min(rc.bottom - rc.top , rc.right - rc.left) ;
SetWindowOrgEx(hdc , (rc.left - rc.right) / 2, (rc.top - rc.bottom) / 2 , NULL) ;
//Draw the clock
HBRUSH hb = CreateSolidBrush(RGB(60 , 60 , 60)) ;
HBRUSH hbold = (HBRUSH)SelectObject(hdc , hb) ;
Ellipse(hdc , -r , -r , r , r ) ;
hb = CreateSolidBrush(RGB(30 , 30 , 30)) ;
SelectObject(hdc , hb) ;
Ellipse(hdc , -r * 0.90 , -r * 0.90 , r * 0.90 , r * 0.90 ) ;
hb = CreateSolidBrush(RGB(20 , 20 , 2)) ;
SelectObject(hdc , hb) ;
Ellipse(hdc , -r * 0.30 , -r * 0.30 , r * 0.30 , r * 0.30 ) ;
hb = CreateSolidBrush(RGB(0 , 0 , 0)) ;
SelectObject(hdc , hb) ;
Ellipse(hdc , -r * 0.03 , -r * 0.03 , r * 0.03 , r * 0.03 ) ;
//draw scales
HPEN hp = CreatePen(PS_SOLID , 2 , RGB(0 , 0 , 0)) ;
HPEN hpold = (HPEN)SelectObject(hdc , hp) ;
for (int i = 0 ; i < 30 ; ++i){
double theta = PI * (double)i / 15.0 ;
MoveToEx(hdc , r * 0.90 * sin(theta) , - r * 0.90 * cos(theta) , NULL) ;
LineTo(hdc , r * 0.85 * sin(theta) , - r * 0.85 * cos(theta)) ;
}
for (int i = 0 ; i < 100 ; ++i){
double theta = PI * (double)i / 50.0 ;
MoveToEx(hdc , r * 0.30 * sin(theta) , - r * 0.30 * cos(theta) , NULL) ;
LineTo(hdc , r * 0.27 * sin(theta) , - r * 0.27 * cos(theta)) ;
}
//draw the hand
hp = CreatePen(PS_SOLID , 3 , RGB(0 , 0 , 0)) ;
SelectObject(hdc , hp) ;
MoveToEx(hdc , 0 , 0 , NULL) ;
double theta1 = PI / 15.0 * (tm.second + (double)tm.centisec / 100.0) ;
LineTo(hdc , r * 0.84 * sin(theta1) , - r * 0.84 * cos(theta1)) ;
hp = CreatePen(PS_SOLID , 2 , RGB(0 , 0 , 0)) ;
SelectObject(hdc , hp) ;
MoveToEx(hdc , 0 , 0 , NULL) ;
double theta2 = PI / 50.0 * tm.centisec ;
LineTo(hdc , r * 0.26 * sin(theta2) , - r * 0.26 * cos(theta2)) ;
SelectObject(hdc, hpold) ;
SelectObject(hdc, hbold) ;
DeleteObject(hp) ;
DeleteObject(hb) ;
EndPaint(hwnd , &ps) ;
}
用了一个计时器SetTimer(hwnd , 9999 , 10 , NULL)
case WM_TIMER:{
if(wParam == 9999){
--tm.centisec ;
proctm(tm) ;
InvalidateRect(hwnd , NULL , TRUE) ;
}
break;
}
刚开始运行是这样的:
![图片说明](https://img-ask.csdn.net/upload/201912/01/1575190277_775215.png)
运行比较正常,
可是过了一段时间,画刷貌似失效了,变成了这样:![图片说明](https://img-ask.csdn.net/upload/201912/01/1575190495_329616.png)
这是为什么啊?求解!