写着写着就困了....
看这些测量数据就算了,是对各种函数的练习
#include <windows.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { //声明全局数据:类名 static TCHAR szClassName[] = TEXT("MyWindows"); HWND hwnd; MSG msg; //注册窗口类 WNDCLASS wndclass; wndclass.hInstance = hInstance; wndclass.lpszClassName = szClassName; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.lpfnWndProc = WndProc; wndclass.lpszMenuName = NULL; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.style = CS_HREDRAW; if (!RegisterClass(&wndclass)) { MessageBox(NULL, TEXT("this program must run in Windows NT!"), szClassName, MB_ICONERROR); return 0; } hwnd = CreateWindow( szClassName, TEXT("MyFirstPractice"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 600, 600, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd, nShowCmd); 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; RECT rect; static int cxClient, cyClient; static HPEN hPen,hOldPen; static HBRUSH hBrush, hOldBrush; POINT apt[4]; switch (message) { case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); //1.先绘制两条虚线 //设置画笔 hPen = CreatePen(PS_DOT, 0.1, RGB(192,192,192)); hOldPen=SelectObject(hdc, hPen); //开始绘制 MoveToEx(hdc, cxClient / 2, 0, NULL); LineTo(hdc, cxClient / 2, cyClient); MoveToEx(hdc, 0, cyClient/2, NULL); LineTo(hdc, cxClient, cyClient/2); //还原画笔 SelectObject(hdc, hOldPen); //2.绘制头部(直径240)蓝色 hBrush = CreateSolidBrush(RGB(0, 159, 232)); hOldBrush = SelectObject(hdc,hBrush); Ellipse(hdc, cxClient / 2 - 120, cyClient / 2 - 200, cxClient/2 + 120, cyClient/2 + 40); SelectObject(hdc, hOldBrush); //3.画脸(和头内切直径200)白色 //hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH); //默认是白色,已经替换回来了 Ellipse(hdc, cxClient / 2 - 100, cyClient / 2 - 160, cxClient / 2 + 100, cyClient / 2 + 40); //4.画眼睛(长60,宽50) Ellipse(hdc, cxClient / 2 - 50, cyClient / 2 - 180, cxClient / 2, cyClient / 2 - 120); Ellipse(hdc, cxClient / 2 + 50, cyClient / 2 - 180, cxClient / 2, cyClient / 2 - 120); //5.画眼珠 hBrush = (HBRUSH)GetStockObject(BLACK_BRUSH); hOldBrush = SelectObject(hdc, hBrush); Ellipse(hdc, cxClient / 2 - 20, cyClient / 2 - 160, cxClient / 2 - 5, cyClient / 2 - 140); Ellipse(hdc, cxClient / 2 + 20, cyClient / 2 - 160, cxClient / 2 + 5, cyClient / 2 - 140); SelectObject(hdc, hOldBrush); //6.加上眼白 hOldBrush = SelectObject(hdc, GetStockObject(WHITE_BRUSH)); Ellipse(hdc, cxClient / 2 - 15, cyClient / 2 - 155, cxClient / 2 - 10, cyClient / 2 - 145); Ellipse(hdc, cxClient / 2 + 15, cyClient / 2 - 155, cxClient / 2 + 10, cyClient / 2 - 145); SelectObject(hdc, hOldBrush); //7.加上鼻子 hBrush = CreateSolidBrush(RGB(255, 0, 0)); hOldBrush=SelectObject(hdc, hBrush); Ellipse(hdc, cxClient / 2 - 10, cyClient / 2 - 135, cxClient / 2 + 10, cyClient / 2 - 115); SelectObject(hdc, hOldBrush); //8.加上鼻子到嘴上的线 MoveToEx(hdc, cxClient / 2, cyClient / 2 - 115,NULL); LineTo(hdc, cxClient / 2, cyClient/2 - 30); //9.画上嘴巴 Arc(hdc, cxClient / 2 - 70, cyClient / 2 - 120, cxClient / 2 + 70, cyClient/2 - 30, cxClient / 2 - 60, cyClient / 2 - 50, cxClient / 2 + 60, cyClient / 2 - 50); //10.画上胡须 //左 MoveToEx(hdc, cxClient / 2 - 70, cyClient / 2 - 115, NULL); LineTo(hdc, cxClient / 2 - 20, cyClient / 2 - 100); MoveToEx(hdc, cxClient / 2 - 80, cyClient / 2 - 85, NULL); LineTo(hdc, cxClient / 2 -20, cyClient / 2-85); MoveToEx(hdc, cxClient / 2 - 70, cyClient / 2 - 55, NULL); LineTo(hdc, cxClient / 2 - 20, cyClient / 2 - 70); //右 MoveToEx(hdc, cxClient / 2 + 70, cyClient / 2 - 115, NULL); LineTo(hdc, cxClient / 2 + 20, cyClient / 2 - 100); MoveToEx(hdc, cxClient / 2 + 80, cyClient / 2 - 85, NULL); LineTo(hdc, cxClient / 2 + 20, cyClient / 2 - 85); MoveToEx(hdc, cxClient / 2 + 70, cyClient / 2 - 55, NULL); LineTo(hdc, cxClient / 2 + 20, cyClient / 2 - 70); //11.画身体,矩形蓝色 hBrush = CreateSolidBrush(RGB(0, 159, 232)); hOldBrush = SelectObject(hdc, hBrush); Rectangle(hdc, cxClient / 2 - 90, cyClient / 2, cxClient / 2 + 90, cyClient / 2 + 150); SelectObject(hdc, hOldBrush); //12.画肚子 Ellipse(hdc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120); //覆盖多余长度 hPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); hOldPen = SelectObject(hdc, hPen); Arc(hdc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120, cxClient / 2 + 70, cyClient / 2, cxClient / 2 - 70, cyClient / 2); SelectObject(hdc, hOldPen); //13.项圈 hBrush = CreateSolidBrush(RGB(255, 0, 0)); hOldBrush = SelectObject(hdc, hBrush); RoundRect(hdc, cxClient / 2 - 95, cyClient / 2 - 5, cxClient / 2 + 95, cyClient / 2 + 10, 20, 10); SelectObject(hdc, hOldBrush); //14.铃铛 hBrush = CreateSolidBrush(RGB(255, 255, 0)); hOldBrush = SelectObject(hdc, hBrush); Ellipse(hdc, cxClient / 2 - 15, cyClient / 2, cxClient / 2 + 15, cyClient / 2+30); //15.铃铛上的线 RoundRect(hdc, cxClient / 2 - 15, cyClient / 2 + 10, cxClient / 2 + 15, cyClient / 2 + 15, 2, 2); SelectObject(hdc, hOldBrush); //16.铃铛孔和线 hBrush = CreateSolidBrush(RGB(255, 0, 0)); hOldBrush = SelectObject(hdc, hBrush); Ellipse(hdc, cxClient / 2 - 4, cyClient / 2 + 18, cxClient / 2 + 4, cyClient / 2 + 26); MoveToEx(hdc, cxClient / 2, cyClient / 2 + 26, NULL); LineTo(hdc, cxClient / 2, cyClient / 2 + 30); SelectObject(hdc, hOldBrush); //17.口袋 Pie(hdc, cxClient / 2 - 50, cyClient / 2, cxClient / 2 + 50, cyClient / 2 + 100, cxClient / 2 - 50, cyClient / 2 + 50, cxClient / 2 + 50, cyClient / 2 + 50); //18.画腿(用扇形挡住) Pie(hdc, cxClient / 2 - 20, cyClient / 2 + 130, cxClient / 2 + 20, cyClient / 2 + 170, cxClient / 2 + 20, cyClient / 2 + 150, cxClient / 2 - 20, cyClient / 2 + 150); hPen = CreatePen(PS_SOLID, 2, RGB(255, 255, 255)); hOldPen = SelectObject(hdc, hPen); MoveToEx(hdc, cxClient / 2 - 20, cyClient / 2 + 150, NULL); LineTo(hdc, cxClient / 2 + 20, cyClient / 2 + 150); SelectObject(hdc, hOldPen); //19.画脚 Ellipse(hdc, cxClient / 2 - 110, cyClient / 2 + 130, cxClient / 2 - 10, cyClient / 2 + 170); Ellipse(hdc, cxClient / 2 + 110, cyClient / 2 + 130, cxClient / 2 + 10, cyClient / 2 + 170); //20两个手 hBrush = CreateSolidBrush(RGB(0, 159, 232)); hOldBrush = SelectObject(hdc, hBrush); apt[0].x = cxClient / 2 - 90; apt[0].y = cyClient / 2 + 10; apt[1].x = cxClient / 2 - 130; apt[1].y = cyClient / 2 + 50; apt[2].x = cxClient / 2 - 110; apt[2].y = cyClient / 2 + 70; apt[3].x = cxClient / 2 - 90; apt[3].y = cyClient / 2 + 60; Polygon(hdc, apt, 4); SelectObject(hdc, hOldBrush); Ellipse(hdc, cxClient / 2 - 150, cyClient / 2 + 46, cxClient / 2 - 110, cyClient / 2 + 86); hBrush = CreateSolidBrush(RGB(0, 159, 232)); hOldBrush = SelectObject(hdc, hBrush); apt[0].x = cxClient / 2 + 90; apt[0].y = cyClient / 2 + 10; apt[1].x = cxClient / 2 + 130; apt[1].y = cyClient / 2 + 50; apt[2].x = cxClient / 2 + 110; apt[2].y = cyClient / 2 + 70; apt[3].x = cxClient / 2 + 90; apt[3].y = cyClient / 2 + 60; Polygon(hdc, apt, 4); SelectObject(hdc, hOldBrush); Ellipse(hdc, cxClient / 2 + 150, cyClient / 2 + 46, cxClient / 2 + 110, cyClient / 2 + 86); //画线覆盖多余线条 hPen = CreatePen(PS_SOLID, 2, RGB(0,159,232)); hOldPen = SelectObject(hdc, hPen); MoveToEx(hdc, cxClient / 2-90, cyClient / 2+10, NULL); LineTo(hdc, cxClient / 2 - 90, cyClient / 2 + 50); MoveToEx(hdc, cxClient / 2 + 90, cyClient / 2 + 10, NULL); LineTo(hdc, cxClient / 2 + 90, cyClient / 2 + 50); SelectObject(hdc, hOldPen); EndPaint(hwnd, &ps); break; case WM_DESTROY: //销毁创建的画笔对象 DeleteObject(hPen); PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }