上面的程序是用API的GDI函数画直线和正弦曲线,为什么cxClient,cyClient要定义成static图形才显示
展开全部
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);MSG msg;while(GetMessage(&msg,hwnd,0,0)0){TranslateMessage(&msg);
POINT pt[NUM];
switch(uMsg){case WM_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);return 0;case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
MoveToEx(hdc,0,cyClient/2,NULL);
LineTo(hdc,cxClient,cyClient/2);
for(i=0;i<NUM;i++){pt[i].x=i*cxClient/NUM;
pt[i].y=(int)(cyClient/2*(1-sin(TWOPI*i/NUM)));}Polyline(hdc,pt,NUM);
EndPaint(hwnd,&ps);break;case WM_CLOSE:
if(IDYES==MessageBox(hwnd,确定退出?,?,MB_YESNO)){DestroyWindow(hwnd);}break;case WM_DESTROY:
PostQuitMessage(0);break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;}------解决方案--------------------------------------------------------
===========
这个很好理解,WndSunProc函数是会被多次调用的,比如说,当有WM_SIZE消息来时,WndSunProc函数会被调用一次,处理完case WM_SIZE:部分之后,退出WndSunProc函数,当有WM_PAINT消息来时,WndSunProc函数又被调用,去处理case WM_PAINT:分支。
如果int cxClient,cyClient不定义为静态变量的话,那么每调用一次,那上一次的这两个变量就会被收回,所以如果不定义为静态变量,你在case WM_SIZE:
cyClient=HIWORD(lParam);return 0;中取得的cxClient和cyClient在case WM_PAINT:中就无效了。
UpdateWindow(hwnd);MSG msg;while(GetMessage(&msg,hwnd,0,0)0){TranslateMessage(&msg);
POINT pt[NUM];
switch(uMsg){case WM_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);return 0;case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
MoveToEx(hdc,0,cyClient/2,NULL);
LineTo(hdc,cxClient,cyClient/2);
for(i=0;i<NUM;i++){pt[i].x=i*cxClient/NUM;
pt[i].y=(int)(cyClient/2*(1-sin(TWOPI*i/NUM)));}Polyline(hdc,pt,NUM);
EndPaint(hwnd,&ps);break;case WM_CLOSE:
if(IDYES==MessageBox(hwnd,确定退出?,?,MB_YESNO)){DestroyWindow(hwnd);}break;case WM_DESTROY:
PostQuitMessage(0);break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;}------解决方案--------------------------------------------------------
===========
这个很好理解,WndSunProc函数是会被多次调用的,比如说,当有WM_SIZE消息来时,WndSunProc函数会被调用一次,处理完case WM_SIZE:部分之后,退出WndSunProc函数,当有WM_PAINT消息来时,WndSunProc函数又被调用,去处理case WM_PAINT:分支。
如果int cxClient,cyClient不定义为静态变量的话,那么每调用一次,那上一次的这两个变量就会被收回,所以如果不定义为静态变量,你在case WM_SIZE:
cyClient=HIWORD(lParam);return 0;中取得的cxClient和cyClient在case WM_PAINT:中就无效了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询