// 標頭檔包含 檔案中包含應用程式中所需的資料類型和資料結構定義#include<windows.h>#define ID_LDBCLK 1001#define ID_RDBCLK 1002#define WM_LDBCLK WM_USER +101#define WM_RDBCLK WM_USER +102// 視窗過程函式宣告LRESULT CALLBACK WinProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); // 程式的入口處:WinMain函數int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance 由於windows95以及以後的 // windows版本都是獨立的進程空間,因此它的值總是NULL LPSTR lpCmdLine, // command line int nCmdShow // show state ){char lpszClassname[]="視窗"; // 視窗類別名char lpszTitle[]="My_Windows"; // 視窗標題名// 視窗類別的定義WNDCLASS wc;wc.cbClsExtra=0;wc.cbWndExtra=0;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);wc.hInstance=hInstance;wc.lpfnWndProc=WinProc;wc.lpszClassName=lpszClassname;wc.lpszMenuName=NULL; // 視窗中無菜單wc.style=CS_HREDRAW|CS_VREDRAW;// 註冊視窗類別,如果註冊失敗則發出警告聲音if(!RegisterClass(&wc)){MessageBeep(0);return FALSE;}// 建立視窗HWND hwnd;hwnd=CreateWindow(lpszClassname,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOWNORMAL); // 顯示視窗UpdateWindow(hwnd); // 更新視窗 繪製使用者區// 訊息迴圈MSG msg;while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}// 視窗過程函數(回呼函數 callback),該函數處理視窗上的各種輸入事件,在此添加代碼LRESULT CALLBACK WinProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){HDC hdc;PAINTSTRUCT ps;static BOOL FLAG1,FLAG2;static BOOL DArc,DRetangl,DPie,DLine;switch(uMsg){case WM_LBUTTONDOWN:if(!FLAG1){FLAG1=TRUE;SetTimer(hwnd,ID_LDBCLK ,GetDoubleClickTime(),NULL);}else{KillTimer(hwnd,ID_LDBCLK);FLAG1=FALSE; PostMessage(hwnd,WM_LDBCLK,0,0);}break;case WM_RBUTTONDOWN:if(!FLAG2){FLAG2=TRUE;SetTimer(hwnd,ID_RDBCLK ,GetDoubleClickTime(),NULL);}else{KillTimer(hwnd,ID_RDBCLK);FLAG2=FALSE; PostMessage(hwnd,WM_RDBCLK,0,0);}break;case WM_TIMER:switch(wParam){case ID_LDBCLK:KillTimer(hwnd,ID_LDBCLK); FLAG1=FALSE;DArc=~DArc;InvalidateRect(hwnd,NULL,1);break;case ID_RDBCLK:KillTimer(hwnd,ID_RDBCLK); FLAG2=FALSE;DPie=~DPie;InvalidateRect(hwnd,NULL,1);break;}break;case WM_LDBCLK:KillTimer(hwnd,ID_LDBCLK);DRetangl=~DRetangl; InvalidateRect(hwnd,NULL,1);break;case WM_RDBCLK:KillTimer(hwnd,ID_RDBCLK);DLine=~DLine; InvalidateRect(hwnd,NULL,1);break;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);if(DArc){Arc(hdc,63,137,138,212,100,137,100,137);break;}if(DRetangl){Rectangle(hdc,213,212,287,250);break;}if(DPie){Pie(hdc,213,137,288,212,240,137,260,137);break;}if(DLine){LineTo(hdc,50,50);break;}EndPaint(hwnd,&ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;}