cpp
复制代码
CPaintDC dc(this); // 用于绘画的设备上下文
CRect rc;
GetWindowRect(rc);
int cxClient = rc.Width();
int cyClient = rc.Height();
// 辅助线
HPEN hPen = CreatePen(PS_DOT, 1, RGB(192, 192, 192));
HPEN hOldPen = (HPEN)SelectObject(dc, hPen);
MoveToEx(dc, cxClient / 2, 0, NULL);
LineTo(dc, cxClient / 2, cyClient);
MoveToEx(dc, 0, cyClient / 2, NULL);
LineTo(dc, cxClient, cyClient / 2);
SelectObject(dc, hOldPen);
// 头 直径240
HBRUSH hBlueBrush = CreateSolidBrush(RGB(0, 159, 232));
HBRUSH hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
DrawEllipse(&dc, cxClient / 2 - 120, cyClient / 2 - 200, cxClient / 2 + 120, cyClient / 2 + 40,
RGB(0, 0, 0), RGB(0, 159, 232));
SelectObject(dc, hOldBrush);
// 脸 直径200
DrawEllipse(&dc, cxClient / 2 - 100, cyClient / 2 - 160, cxClient / 2 + 100, cyClient / 2 + 40,
RGB(0,0,0), RGB(255,255,255));
//眼睛
hOldBrush = DrawEyes(hOldBrush, dc, cxClient, cyClient);
// 鼻子
HBRUSH hRedBrush = CreateSolidBrush(RGB(255, 0, 0));
hOldBrush = (HBRUSH)SelectObject(dc, hRedBrush);
DrawEllipse(&dc, cxClient / 2 - 10, cyClient / 2 - 135, cxClient / 2 + 10, cyClient / 2 - 115,
RGB(0, 0, 0), RGB(255, 0, 0));
SelectObject(dc, hOldBrush);
MoveToEx(dc, cxClient / 2, cyClient / 2 - 115, NULL);
LineTo(dc, cxClient / 2, cyClient / 2 - 30);
// 嘴巴
Arc(dc, cxClient / 2 - 70, cyClient / 2 - 120, cxClient / 2 + 70, cyClient / 2 - 30,
cxClient / 2 - 60, cyClient / 2 - 50, cxClient / 2 + 60, cyClient / 2 - 50);
// 胡须 中上下
DrawBeard(dc, cxClient, cyClient);
// 身体
hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
Rectangle(dc, cxClient / 2 - 100, cyClient / 2 - 10, cxClient / 2 + 100, cyClient / 2 + 150);
SelectObject(dc, hOldBrush);
// 肚皮
Ellipse(dc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120); // 圆
hPen = CreatePen(PS_DOT, 1, RGB(255, 255, 255)); // 擦除肚皮上面嘴巴下面的圆弧
hOldPen = (HPEN)SelectObject(dc, hPen);
Arc(dc, cxClient / 2 - 70, cyClient / 2 - 20, cxClient / 2 + 70, cyClient / 2 + 120,
cxClient / 2 + 60, cyClient / 2 - 10, cxClient / 2 - 60, cyClient / 2 - 10);
SelectObject(dc, hOldPen);
// 围脖
hOldBrush = (HBRUSH)SelectObject(dc, hRedBrush);
RoundRect(dc, cxClient / 2 - 102, cyClient / 2 - 12, cxClient / 2 + 102, cyClient / 2 + 5, 20, 20);
SelectObject(dc, hOldBrush);
// 铃铛
HBRUSH hYellowBrush = CreateSolidBrush(RGB(255, 255, 0));
hOldBrush = (HBRUSH)SelectObject(dc, hYellowBrush);
Ellipse(dc, cxClient / 2 - 12, cyClient / 2 - 4, cxClient / 2 + 12, cyClient / 2 + 20);
RoundRect(dc, cxClient / 2 - 12, cyClient / 2 + 3, cxClient / 2 + 12, cyClient / 2 + 6, 20, 20);
SelectObject(dc, hRedBrush);
Ellipse(dc, cxClient / 2 - 5, cyClient / 2 + 8, cxClient / 2 + 5, cyClient / 2 + 18);
SelectObject(dc, hOldBrush);
// 裤腿
Ellipse(dc, cxClient / 2 - 20, cyClient / 2 + 130, cxClient / 2 + 20, cyClient / 2 + 170); // 画圆
hPen = CreatePen(PS_DOT, 1, RGB(255, 255, 255)); // 擦除肚皮下面嘴巴上面的圆弧
hOldPen = (HPEN)SelectObject(dc, hPen);
Arc(dc, cxClient / 2 - 20, cyClient / 2 + 130, cxClient / 2 + 20, cyClient / 2 + 170,
cxClient / 2 - 20, cyClient / 2 + 150, cxClient / 2 + 20, cyClient / 2 + 150);
SelectObject(dc, hOldPen);
// 口袋
Pie(dc, cxClient / 2 - 50, cyClient / 2, cxClient / 2 + 50, cyClient / 2 + 100,
cxClient / 2 - 50, cyClient / 2 + 50, cxClient / 2 + 50, cyClient / 2 + 50);
// 脚掌
Ellipse(dc, cxClient / 2 - 110, cyClient / 2 + 135, cxClient / 2 - 10, cyClient / 2 + 165);
Ellipse(dc, cxClient / 2 + 10, cyClient / 2 + 135, cxClient / 2 + 110, cyClient / 2 + 165);
// 胳膊
POINT apt[4];
hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
apt[0].x = cxClient / 2 - 100;
apt[0].y = cyClient / 2;
apt[1].x = cxClient / 2 - 150;
apt[1].y = cyClient / 2 + 60;
apt[2].x = cxClient / 2 - 140;
apt[2].y = cyClient / 2 + 80;
apt[3].x = cxClient / 2 - 100;
apt[3].y = cyClient / 2 + 60;
Polygon(dc, apt, 4);
SelectObject(dc, hOldBrush);
Ellipse(dc, cxClient / 2 - 168, cyClient / 2 + 60, cxClient / 2 - 138, cyClient / 2 + 90); // 左手掌
hOldBrush = (HBRUSH)SelectObject(dc, hBlueBrush);
apt[0].x = cxClient / 2 + 100;
apt[0].y = cyClient / 2;
apt[1].x = cxClient / 2 + 150;
apt[1].y = cyClient / 2 + 60;
apt[2].x = cxClient / 2 + 140;
apt[2].y = cyClient / 2 + 80;
apt[3].x = cxClient / 2 + 100;
apt[3].y = cyClient / 2 + 60;
Polygon(dc, apt, 4);
SelectObject(dc, hOldBrush);
Ellipse(dc, cxClient / 2 + 168, cyClient / 2 + 60, cxClient / 2 + 138, cyClient / 2 + 90); // 右手掌
// // 左手举着小风车
// MoveToEx(dc, cxClient / 2 - 160, cyClient / 2 + 62, NULL);
// LineTo(dc, cxClient / 2 - 160, cyClient / 2 - 40);
// DrawWindmill(dc, cxClient / 2 - 160, cyClient / 2 - 40);
//
// // 右手举着小风车
// MoveToEx(dc, cxClient / 2 + 160, cyClient / 2 + 62, NULL);
// LineTo(dc, cxClient / 2 + 160, cyClient / 2 - 40);
// DrawWindmill(dc, cxClient / 2 + 160, cyClient / 2 - 40);
// 左手举着五星红旗
MoveToEx(dc, cxClient / 2 - 160, cyClient / 2 + 62, NULL);
LineTo(dc, cxClient / 2 - 160, cyClient / 2 - 40);
DrawFlagChina(dc, cxClient / 2 - 160+1, cyClient / 2 - 40);
// 右手举着奥运五环旗
MoveToEx(dc, cxClient / 2 + 160, cyClient / 2 + 62, NULL);
LineTo(dc, cxClient / 2 + 160, cyClient / 2 - 40);
DrawFlagOlympics(dc, cxClient / 2 + 160, cyClient / 2 - 40);
// 去多余线,增强立体感
hPen = CreatePen(PS_SOLID, 2, RGB(0, 159, 232));
hOldPen = (HPEN)SelectObject(dc, hPen);
MoveToEx(dc, cxClient / 2 - 100, cyClient / 2, NULL);
LineTo(dc, cxClient / 2 - 100, cyClient / 2 + 50);
MoveToEx(dc, cxClient / 2 + 100, cyClient / 2, NULL);
LineTo(dc, cxClient / 2 + 100, cyClient / 2 + 50);
SelectObject(dc, hOldPen);
// 清理资源
DeleteObject(hPen);
DeleteObject(hBlueBrush);
DeleteObject(hRedBrush);
DeleteObject(hYellowBrush);