#include<windows.h> #define MAXPOINTS 1000 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstace,/ PSTR szCmdLine,int iCmdShow) { static TCHAR szAppName[]=TEXT("Connect"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hInstance=hInstance; wndclass.lpfnWndProc=WndProc; wndclass.lpszClassName=szAppName; wndclass.lpszMenuName=NULL; wndclass.style=CS_HREDRAW | CS_VREDRAW; RegisterClass(&wndclass); hwnd=CreateWindow(szAppName,TEXT("Connect-the-Points Mouse Demo"), WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,/ CW_USEDEFAULT,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,iCmdShow); 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) { static POINT pt[MAXPOINTS]; static int iCount; HDC hdc; PAINTSTRUCT ps; 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(int i=0;i<iCount-1;++i) { for(int 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; } return DefWindowProc(hwnd,message,wParam,lParam); }
windows programing chapter 7
最新推荐文章于 2019-07-10 09:59:45 发布