在看雪论坛上看到的一个帖子,很喜欢,转载一下。原文地址:http://bbs.pediy.com/showthread.php?t=138630
哆啦A梦是画出来的,不知道作者算这些坐标位置算了多久,真的很犀利。记得原来看《Windows程序设计》的时候,每次看到GDI都不是很理解,也没有仔细去研究。现在编程也很少与GDI打交道,还是等以后有空了在深入了解一下吧。把这个代码转载一份到博客,以后再回头研究一下。顺便贴一下程序运行后的截图:(很酷吧~~~)
字数补丁~代码疯子~程序人生~字数补丁~代码疯子~程序人生~字数补丁~代码疯子~程序人生

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
// 请以C语言后缀(*.c)保存文件
#include <windows.h>
#include <math.h>
 
#define NUM 1000
#define TWOPI (2 * 3.1415926)
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
int cx, cy ;
cx = GetSystemMetrics(SM_CXSCREEN) / 2 - 200;
cy = GetSystemMetrics(SM_CYSCREEN) / 2 - 200;
 
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (/*GRAY*/WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
 
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
 
RegisterClass (&wndclass);
 
hwnd = CreateWindow (szAppName, // window class name
TEXT ("The Hello Program"), // window caption
WS_OVERLAPPEDWINDOW, // window style
cx, // initial x position
cy, // initial y position
400, // initial x size
400, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters
 
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)
{
HDC hdc ;
PAINTSTRUCT ps ;
static int cxClient, cyClient ;
HBRUSH hBrush ;
int i ;
POINT apt[NUM],
leftHand[] = {
cxClient / 2 - 60, cyClient / 2 - 20,
cxClient / 2 - 100, cyClient / 2 + 10,
cxClient / 2 - 100, cyClient / 2 + 30,
cxClient / 2 - 60, cyClient / 2 + 10
},
rightHand[] = {
cxClient / 2 + 60, cyClient / 2 - 20,
cxClient / 2 + 100, cyClient / 2 + 10,
cxClient / 2 + 100, cyClient / 2 + 30,
cxClient / 2 + 60, cyClient / 2 + 10
} ;
 
switch (message)
{
case WM_SIZE:
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) + 120;
return 0 ;
 
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
 
Ellipse (hdc, cxClient / 2 - 70, cyClient / 2 + 55, cxClient / 2, cyClient / 2 + 85) ; //脚
Ellipse (hdc, cxClient / 2, cyClient / 2 + 55, cxClient / 2 + 70, cyClient / 2 + 85) ;
 
hBrush = CreateSolidBrush (RGB (100, 150, 255)) ;
SelectObject (hdc, hBrush) ;
 
// Rectangle (hdc, cxClient / 2 - 60, cyClient / 2 - 60, cxClient / 2 +60, cyClient / 2 + 70); //身体
RoundRect (hdc, cxClient / 2 - 60, cyClient / 2 - 60, cxClient / 2 + 60, cyClient / 2 + 70, 50, 20);
 
DeleteObject (hBrush) ;
 
hBrush = GetStockObject (WHITE_BRUSH) ;
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 50, cyClient / 2 - 50, cxClient / 2 + 50, cyClient / 2 + 50) ; //肚子部分
 
hBrush = CreateSolidBrush (RGB (100, 150, 255)) ;
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 100, cyClient / 2 - 220, cxClient / 2 +100, cyClient / 2 - 20) ; //头部
 
DeleteObject (hBrush) ;
 
hBrush = GetStockObject (WHITE_BRUSH) ;
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 85, cyClient / 2 - 170, cxClient / 2 + 85, cyClient / 2 - 20) ; //脸部
Ellipse (hdc, cxClient / 2 - 40, cyClient / 2 - 190, cxClient / 2, cyClient / 2 - 140 ) ; //眼眶左
Ellipse (hdc, cxClient / 2, cyClient / 2 - 190, cxClient / 2 + 40, cyClient /2 - 140) ; //眼眶右
 
hBrush = GetStockObject (BLACK_BRUSH) ;
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 15, cyClient / 2 - 155, cxClient / 2 -10, cyClient / 2 - 150) ; //眼睛左
Ellipse (hdc, cxClient / 2 + 10, cyClient / 2 - 155, cxClient / 2 + 15, cyClient / 2 -150) ; //眼睛右
 
DeleteObject (hBrush) ;
 
hBrush = CreateSolidBrush (RGB (255, 0, 0)) ;
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 10, cyClient / 2 - 150, cxClient / 2 +10, cyClient / 2 -130) ; //鼻子
 
MoveToEx (hdc, cxClient / 2, cyClient / 2 -130, NULL) ;
LineTo (hdc, cxClient / 2, cyClient / 2 - 60) ;
 
MoveToEx (hdc, cxClient / 2 - 40, cyClient / 2 - 75, NULL); //嘴
for (i = 0; i < NUM / 2; i++)
{
apt[i].x = cxClient / 2 - 40 + i * 160 / NUM ;
apt[i].y = cyClient / 2 - 75 +(int) (30 * sin (TWOPI * i / NUM)) / 2 ;
LineTo(hdc, apt[i].x, apt[i].y) ;
}
 
MoveToEx (hdc, cxClient / 2 - 60, cyClient / 2 - 140, NULL) ; //胡须
LineTo (hdc, cxClient / 2 - 20, cyClient / 2 - 120) ;
 
MoveToEx (hdc, cxClient / 2 - 60, cyClient / 2 - 110, NULL) ;
LineTo (hdc, cxClient / 2 - 20, cyClient / 2 - 110) ;
 
MoveToEx (hdc, cxClient / 2 - 60, cyClient / 2 - 80, NULL);
LineTo (hdc, cxClient / 2 - 20, cyClient / 2 - 100) ;
 
MoveToEx (hdc, cxClient / 2 + 60, cyClient / 2 -140, NULL) ;
LineTo (hdc, cxClient / 2 + 20, cyClient / 2 - 120) ;
 
MoveToEx (hdc, cxClient / 2 + 60, cyClient / 2 - 110, NULL) ;
LineTo (hdc, cxClient / 2 +20, cyClient / 2 - 110) ;
 
MoveToEx (hdc, cxClient / 2 +60, cyClient / 2 - 80, NULL) ;
LineTo (hdc, cxClient / 2 + 20, cyClient / 2 - 100) ;
 
hBrush = GetStockObject (WHITE_BRUSH) ; //口袋
SelectObject (hdc, hBrush) ;
 
Chord (hdc, cxClient / 2 - 40, cyClient / 2 - 40, cxClient / 2 + 40, cyClient / 2 +40,
cxClient / 2 - 40, cyClient / 2 + 10, cxClient / 2 +40, cyClient / 2 + 10) ;
 
 
 
hBrush = CreateSolidBrush (RGB (255, 0, 0)); //脖子上的套圈
SelectObject (hdc, hBrush) ;
 
RoundRect (hdc, cxClient / 2 - 70, cyClient / 2 - 40, cxClient / 2 + 70, cyClient / 2 - 20, 20, 20);
 
DeleteObject (hBrush) ;
 
hBrush = CreateSolidBrush (RGB (100, 150, 255)) ; //手臂
SelectObject (hdc, hBrush) ;
 
SetPolyFillMode (hdc, WINDING) ;
Polygon (hdc, leftHand, 4) ;
 
SetPolyFillMode (hdc, WINDING) ;
Polygon (hdc, rightHand, 4) ;
 
DeleteObject (hBrush) ;
 
hBrush = GetStockObject (WHITE_BRUSH) ; //手
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 115, cyClient / 2 + 5, cxClient / 2 - 85, cyClient / 2 + 35) ;
Ellipse (hdc, cxClient / 2 + 115, cyClient / 2 + 5, cxClient / 2 + 85, cyClient / 2 + 35) ;
 
hBrush = CreateSolidBrush (RGB (250, 255, 150)) ; //铃铛
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 10, cyClient / 2 - 35, cxClient / 2 + 10, cyClient / 2 - 15) ;
 
DeleteObject (hBrush) ;
 
hBrush = GetStockObject (BLACK_BRUSH) ;
SelectObject (hdc, hBrush) ;
 
Ellipse (hdc, cxClient / 2 - 4, cyClient / 2 - 29, cxClient / 2 + 4, cyClient / 2 - 21) ;
 
MoveToEx (hdc, cxClient / 2, cyClient / 2 - 25, NULL) ;
LineTo (hdc, cxClient / 2, cyClient / 2 - 15) ;
 
EndPaint (hwnd, &ps) ;
return 0 ;
 
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
 
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

http://www.programlife.net/using-windows-programming-paint-doraemon.html

Windows程序设计画图实现哆啦A梦的更多相关文章

  1. Android用canvas画哆啦A梦

    先上图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...

  2. Scratch 3 矢量编辑器——“临摹”一只哆啦A梦

    利用Scratch来制作一些小作品,常常需要到网上去找图片,而网上下载的图片一般都是位图,往往存在两个问题: 图片不够清晰,当图片放大后会出现"马赛克"现象: 图片中存在不必要的背 ...

  3. [css]我要用css画幅画(七) - 哆啦A梦

    接着之前的[css]我要用css画幅画(六),今天画的有所不同,画的是哆啦A梦,我们小时候对他的称呼其实是小叮当机器猫. (PS:这次我要做的事情,很多人已经做过,这并不是什么创新,我只是在学习并记录 ...

  4. 创建【哆啦A梦】风格字体

    学习canvas,为作画.对于一个毫无逻辑思维的人简直遭罪啊~想象坐标坐标坐标啊- - 好啦言归正传,基于本月16号,在春熙路IFS展出120只哆啦a梦,以及canvas的作用,在此介绍一种PS的美化 ...

  5. 哆啦A梦 canvas

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Windows 程序设计

    一.Win32 API /******************************************************************** created: 2014/04/1 ...

  7. 关于《Windows程序设计(第五版)》中一个实例程序的疑问

    最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...

  8. windows 程序设计自学:添加图标资源

    #include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...

  9. windows程序设计笔记

    2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...

随机推荐

  1. Java IO流经典练习题(mark用)

    一.练习的题目 (一) 在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,在创建一个目录IOTest,之后将HelloWorld.txt移动到IOTest目录下去:之后 ...

  2. 【iOS】自己定义TabBarController

    一.自己定义的思路 iOS中的TabBarController确实已经非常强大了.大部分主流iOS应用都会採用. 可是往往也不能满足所有的需求,因此须要自己定义TabBar,自己定义须要对系统的Tab ...

  3. 从 BM 到 RBM

    1. 拓扑结构上 如下图示,在拓扑结构上,RBM(受限的玻尔兹曼机)与 BM(玻尔兹曼机)的最大区别在于: RBM 取消了可见层的层内连接以及隐含层的层内连接,主要在于 BM 的层内连接使得其学习过程 ...

  4. hdu3461Marriage Match IV 最短路+最大流

    //给一个图.给定起点和终点,仅仅能走图上的最短路 //问最多有多少种走的方法.每条路仅仅能走一次 //仅仅要将在最短路上的全部边的权值改为1.求一个最大流即可 #include<cstdio& ...

  5. [网络管理]windows server backup

    ERPserver每天备份与每月1号备份数据.备份到本机.从备份安全机制来说这是远远不够的.故是否能定期备份数据文件到另外一台server呢?(异地备份) windows server 提供了serv ...

  6. 前端切图:调用百度地图API

    原型图 图片发自简书App <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  7. 电子商务网站的设计与实现(四):项目名称malling和一期开发计划

    项目名称:小雷B2C商城系统代号:malling,mall商城的意思,加个ing表示正在进行.更主要的是与"morning"发音很像,非常容易记忆.morning是"早上 ...

  8. 【u240】棋子放置

    Time Limit: 1 second Memory Limit: 128 MB 小虎刚刚上了幼儿园,老师让他做一个家庭作业:首先画3行格子,第一行有三个格子,第二行有2个格子,第三行有1个格子. ...

  9. 【u242】排名系统

    Time Limit: 1 second Memory Limit: 64 MB [问题描述] F1的影响力越来越大,因此国际汽联决定扩大规模,让更多有天赋的车手加入这一行列. 不过规模的扩大带来了一 ...

  10. 推荐一款软件mybatis-generator-gui

    https://github.com/zouzg/mybatis-generator-gui mybatis-generator-gui mybatis-generator-gui是基于mybatis ...