代码如下:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
windows,
Winapi.Messages,
Vcl.Dialogs;
type
Point = record
x: Integer;
y: Integer;
end;
var
swndClass: tagWNDCLASS;
message: MSG;
mHwnd: hwnd;
cxClient, cyClient: Integer;
function WindowProc(hwnd: hwnd; uMsg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall;
var
i: integer;
uhdc: HDC;
ps: PAINTSTRUCT;
GrayPen: HPEN;
hOldPen: HPEN;
hTempPen: HPEN;
hBlueBrush: HBRUSH;
hRedBrush: HBRUSH;
hOldBrush: HBRUSH;
HyelloBrush: HBRUSH;
apt: array[0..128] of Point;
begin
case uMsg of
WM_CREATE:
begin
end;
WM_SIZE:
begin
cxclient := loword(lParam);
cyclient := HiWord(lParam);
result := 0;
Exit;
end;
wm_paint:
begin
uhdc := BeginPaint(hwnd, ps);
//辅助线
GrayPen := CreatePen(PS_DOT, 1, RGB(192, 192, 192));
hOldPen := SelectObject(uhdc, GrayPen);
MoveToEx(uhdc, cxClient div 2, 0, nil);
LineTo(uhdc, cxClient div 2, cyClient);
MoveToEx(uhdc, 0, cyClient div 2, nil);
LineTo(uhdc, cxClient, cyClient div 2);
SelectObject(uhdc, hOldPen);
//头(直径240)
hBlueBrush := CreateSolidBrush(RGB(0, 159, 232));
hOldBrush := SelectObject(uhdc, hBlueBrush);
Ellipse(uhdc, cxClient div 2 - 120, cyClient div 2 - 200, cxClient div 2 + 120, cyClient div 2 + 40);
SelectObject(uhdc, hOldBrush);
//脸(直径200)
Ellipse(uhdc, cxClient div 2 - 100, cyClient div 2 - 160, cxClient div 2 + 100, cyClient div 2 + 40);
//眼睛
Ellipse(uhdc, cxClient div 2 - 50, cyClient div 2 - 180, cxClient div 2, cyClient div 2 - 120);
Ellipse(uhdc, cxClient div 2 + 50, cyClient div 2 - 180, cxClient div 2, cyClient div 2 - 120);
//眼珠
hOldBrush := SelectObject(uhdc, GetStockObject(BLACK_BRUSH));
Ellipse(uhdc, cxClient div 2 - 20, cyClient div 2 - 160, cxClient div 2 - 5, cyClient div 2 - 140);
Ellipse(uhdc, cxClient div 2 + 20, cyClient div 2 - 160, cxClient div 2 + 5, cyClient div 2 - 140);
SelectObject(uhdc, hOldBrush);
//瞳孔
Ellipse(uhdc, cxClient div 2 - 15, cyClient div 2 - 155, cxClient div 2 - 10, cyClient div 2 - 145);
Ellipse(uhdc, cxClient div 2 + 15, cyClient div 2 - 155, cxClient div 2 + 10, cyClient div 2 - 145);
//鼻子
hRedBrush := CreateSolidBrush(RGB(255, 0, 0));
hOldBrush := SelectObject(uhdc, hRedBrush);
Ellipse(uhdc, cxClient div 2 - 10, cyClient div 2 - 135, cxClient div 2 + 10, cyClient div 2 - 115);
SelectObject(uhdc, hOldBrush);
MoveToEx(uhdc, cxClient div 2, cyClient div 2 - 115, nil);
LineTo(uhdc, cxClient div 2, cyClient div 2 - 30);
//嘴巴
Arc(uhdc, cxClient div 2 - 70, cyClient div 2 - 120, cxClient div 2 + 70, cyClient div 2 - 30, cxClient div 2 - 60, cyClient div 2 - 50, cxClient div 2 + 60, cyClient div 2 - 50);
//胡子
MoveToEx(uhdc, cxClient div 2 - 70, cyClient div 2 - 115, nil);
LineTo(uhdc, cxClient div 2 - 20, cyClient div 2 - 100);
MoveToEx(uhdc, cxClient div 2 - 80, cyClient div 2 - 85, nil);
LineTo(uhdc, cxClient div 2 - 20, cyClient div 2 - 85);
MoveToEx(uhdc, cxClient div 2 - 70, cyClient div 2 - 55, nil);
LineTo(uhdc, cxClient div 2 - 20, cyClient div 2 - 70);
MoveToEx(uhdc, cxClient div 2 + 70, cyClient div 2 - 115, nil);
LineTo(uhdc, cxClient div 2 + 20, cyClient div 2 - 100);
MoveToEx(uhdc, cxClient div 2 + 80, cyClient div 2 - 85, nil);
LineTo(uhdc, cxClient div 2 + 20, cyClient div 2 - 85);
MoveToEx(uhdc, cxClient div 2 + 70, cyClient div 2 - 55, nil);
LineTo(uhdc, cxClient div 2 + 20, cyClient div 2 - 70);
//身体
hOldBrush := SelectObject(uhdc, hBlueBrush);
Rectangle(uhdc, cxClient div 2 - 90, cyClient div 2, cxClient div 2 + 90, cyClient div 2 + 150);
SelectObject(uhdc, hOldBrush);
//肚子
Ellipse(uhdc, cxClient div 2 - 70, cyClient div 2 - 20, cxClient div 2 + 70, cyClient div 2 + 120);
hTempPen := CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
hOldPen := SelectObject(uhdc, hTempPen);
Arc(uhdc, cxClient div 2 - 70, cyClient div 2 - 20, cxClient div 2 + 70, cyClient div 2 + 120, cxClient div 2 + 60, cyClient div 2 - 10, cxClient div 2 - 60, cyClient div 2 - 10);
SelectObject(uhdc, hOldPen);
//项圈
hOldBrush := SelectObject(uhdc, hRedBrush);
RoundRect(uhdc, cxClient div 2 - 95, cyClient div 2 - 5, cxClient div 2 + 95, cyClient div 2 + 10, 20, 20);
SelectObject(uhdc, hOldBrush);
//铃铛
HyelloBrush := CreateSolidBrush(RGB(255, 255, 0));
hOldBrush := SelectObject(uhdc, HyelloBrush);
Ellipse(uhdc, cxClient div 2 - 15, cyClient div 2, cxClient div 2 + 15, cyClient div 2 + 30);
RoundRect(uhdc, cxClient div 2 - 15, cyClient div 2 + 10, cxClient div 2 + 15, cyClient div 2 + 15, 2, 2);
SelectObject(uhdc, hRedBrush);
Ellipse(uhdc, cxClient div 2 - 4, cyClient div 2 + 18, cxClient div 2 + 4, cyClient div 2 + 26);
MoveToEx(uhdc, cxClient div 2, cyClient div 2 + 26, nil);
LineTo(uhdc, cxClient div 2, cyClient div 2 + 30);
SelectObject(uhdc, hOldBrush);
//口袋
pie(uhdc, cxClient div 2 - 50, cyClient div 2, cxClient div 2 + 50, cyClient div 2 + 100, cxClient div 2 - 50, cyClient div 2 + 50, cxClient div 2 + 50, cyClient div 2 + 50);
//裤裆
pie(uhdc, cxClient div 2 - 20, cyClient div 2 + 130, cxClient div 2 + 20, cyClient div 2 + 170, cxClient div 2 + 20, cyClient div 2 + 150, cxClient div 2 - 20, cyClient div 2 + 150);
hTempPen := CreatePen(PS_SOLID, 2, RGB(255, 255, 255));
hOldPen := SelectObject(uhdc, hTempPen);
MoveToEx(uhdc, cxClient div 2 - 20, cyClient div 2 + 150, nil);
LineTo(uhdc, cxClient div 2 + 20, cyClient div 2 + 150);
SelectObject(uhdc, hOldPen);
//脚
Ellipse(uhdc, cxClient div 2 - 110, cyClient div 2 + 130, cxClient div 2 - 10, cyClient div 2 + 170);
Ellipse(uhdc, cxClient div 2 + 110, cyClient div 2 + 130, cxClient div 2 + 10, cyClient div 2 + 170);
//手
hOldBrush := SelectObject(uhdc, hBlueBrush);
apt[0].x := cxClient div 2 - 90;
apt[0].y := cyClient div 2 + 10;
apt[1].x := cxClient div 2 - 130;
apt[1].y := cyClient div 2 + 50;
apt[2].x := cxClient div 2 - 110;
apt[2].y := cyClient div 2 + 70;
apt[3].x := cxClient div 2 - 90;
apt[3].y := cyClient div 2 + 60;
Polygon(uhdc, apt, 4);
SelectObject(uhdc, hOldBrush);
Ellipse(uhdc, cxClient div 2 - 150, cyClient div 2 + 46, cxClient div 2 - 110, cyClient div 2 + 86);
hOldBrush := SelectObject(uhdc, hBlueBrush);
apt[0].x := cxClient div 2 + 90;
apt[0].y := cyClient div 2 + 10;
apt[1].x := cxClient div 2 + 130;
apt[1].y := cyClient div 2 + 50;
apt[2].x := cxClient div 2 + 110;
apt[2].y := cyClient div 2 + 70;
apt[3].x := cxClient div 2 + 90;
apt[3].y := cyClient div 2 + 60;
Polygon(uhdc, apt, 4);
SelectObject(uhdc, hOldBrush);
Ellipse(uhdc, cxClient div 2 + 150, cyClient div 2 + 46, cxClient div 2 + 110, cyClient div 2 + 86);
hTempPen := CreatePen(PS_SOLID, 2, RGB(0, 159, 232));
hOldPen := SelectObject(uhdc, hTempPen);
MoveToEx(uhdc, cxClient div 2 - 90, cyClient div 2 + 10, nil);
LineTo(uhdc, cxClient div 2 - 90, cyClient div 2 + 50);
MoveToEx(uhdc, cxClient div 2 + 90, cyClient div 2 + 10, nil);
LineTo(uhdc, cxClient div 2 + 90, cyClient div 2 + 50);
MoveToEx(uhdc, cxClient div 2 - 20, cyClient div 2 + 150, nil);
SelectObject(uhdc, hOldPen);
EndPaint(hwnd, ps);
Exit;
end;
end;
result := DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
begin
swndClass.cbClsExtra := 0; //窗口类扩展,无
swndClass.cbWndExtra := 0; //窗口实例扩展
swndClass.hbrBackground := COLOR_BACKGROUND; //窗口背景颜色黑色
//LoadCursor()
swndClass.hCursor := LoadCursor(0, IDC_ARROW); //窗口采用箭头光标
swndClass.hIcon := LoadIcon(0, IDI_APPLICATION); //窗口最小化图标:采用缺省图标
swndClass.hInstance := hInstance; //窗口实例句柄
swndClass.lpfnWndProc := @WindowProc; //窗口处理函数
swndClass.lpszClassName := 'myWnd'; //窗口类名
swndClass.lpszMenuName := nil; //窗口菜单
swndClass.style := CS_DBLCLKS; //窗口样式
if RegisterClass(swndClass) = 0 then
begin
Writeln('windows class register error!');
Exit;
end;
mHwnd := CreateWindowEx(0, 'myWnd', 'Delphi Windows', WS_OVERLAPPEDWINDOW, {滚动条添加}
CW_USEDEFAULT, CW_USEDEFAULT, 800, 800, HWND_DESKTOP, 0, hInstance, 0);
ShowWindow(mHwnd, SW_SHOW);
UpdateWindow(mHwnd);
while GetMessage(message, 0, 0, 0) do
begin
TranslateMessage(message);
DispatchMessage(message);
end;
end.