Invalidate()函数怎么用,为什么我编译不过呢。
Invalidate()函数怎么用,为什么我编译不过呢。
- C/C++ code
#include<windows.h>#include<string.h>#include<stdlib.h>#include<stdio.h>#include<math.h>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hprevinst,LPSTR lpszcmdline,int ncmdshow){ HWND hwnd; MSG msg; WNDCLASS wndclass; char lpszclassname[]="sin"; char lpsztitle[]="My_Sin"; wndclass.style=0; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hinstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=lpszclassname; if(!RegisterClass(&wndclass)){ MessageBeep(0); return FALSE; } hwnd=CreateWindow(lpszclassname,lpsztitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hinstance,NULL); ShowWindow(hwnd,ncmdshow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam){ HDC hdc; PAINTSTRUCT ps; HPEN hp; HBRUSH hb; POINT p[100]; double PI=3.1415926; int i; for(i=0;i<100;i++){ p[i].x=2*PI/100*i*60; p[i].y=100*sin(2*PI/100*i); } i=25; int r; switch(message){ case WM_PAINT: if(i==100) i=0; hdc=BeginPaint(hwnd,&ps); SetMapMode(hdc,MM_TEXT); SetWindowExtEx(hdc,150,150,NULL); SetViewportExtEx(hdc,150,100,NULL); SetViewportOrgEx(hdc,150,200,NULL); hp=(HPEN)GetStockObject(BLACK_PEN); SelectObject(hdc,hp); Polyline(hdc,p,100); hb=CreateSolidBrush(RGB(255,0,0)); SelectObject(hdc,hb); r=p[i].y; Ellipse(hdc,p[i].x-r,p[i].y-r,p[i].x+r,p[i].y+r); EndPaint(hwnd,&ps); DeleteObject(hp); DeleteObject(hb); Sleep(100); i++; Invalidate(); break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wparam,lparam); } return 0;}
[解决办法]
SDK中没有这个函数,用 InvalidateRect吧。