zoukankan      html  css  js  c++  java
  • Windows程序设计画图实现哆啦A梦

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

    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

  • 相关阅读:
    dubbo配置文件解读(1)
    Java同步与异步
    java垃圾回收
    Java中的String,StringBuilder,StringBuffer三者的区别
    ThreadLocal终极篇
    TCP/IP协议与HTTP协议(一)
    TCP/IP协议与HTTP协议(二)
    springcloud之断路器(Hystrix)
    解决mysql不能通过'/tmp/mysql.sock 连接的问题
    jQuery.extend 函数使用详解
  • 原文地址:https://www.cnblogs.com/findumars/p/7128385.html
Copyright © 2011-2022 走看看