[游戏模版3] Win32 画笔 画刷 图形

>_<:introduce the functions of define\create\use pen and brush to draw
all kinds of line and some graphs.

>_<!following 2 files are the same with the previous and file main.cpp
has some changes.

 1 //{{NO_DEPENDENCIES}}
2 // Microsoft Visual C++ generated include file.
3 // Used by FE.RC
4 //
5 #define IDR_MAINFRAME 128
6 #define IDD_FE_DIALOG 102
7 #define IDD_ABOUTBOX 103
8 #define IDS_APP_TITLE 103
9 #define IDM_ABOUT 104
10 #define IDM_EXIT 105
11 #define IDS_HELLO 106
12 #define IDI_FE 107
13 #define IDI_SMALL 108
14 #define IDC_FE 109
15 #define IDC_MYICON 2
16 #define IDC_STATIC -1
17 // Next default values for new objects
18 //
19 #ifdef APSTUDIO_INVOKED
20 #ifndef APSTUDIO_READONLY_SYMBOLS
21
22 #define _APS_NEXT_RESOURCE_VALUE 129
23 #define _APS_NEXT_COMMAND_VALUE 32771
24 #define _APS_NEXT_CONTROL_VALUE 1000
25 #define _APS_NEXT_SYMED_VALUE 110
26 #endif
27 #endif

resourse.h ID定义文件

 1 // stdafx.h : include file for standard system include files,
2 // or project specific include files that are used frequently, but
3 // are changed infrequently
4 //
5
6 #if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
7 #define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
8
9 #if _MSC_VER > 1000
10 #pragma once
11 #endif // _MSC_VER > 1000
12
13 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
14
15
16 // Windows Header Files:
17 #include <windows.h>
18
19 // C RunTime Header Files
20 #include <stdlib.h>
21 #include <malloc.h>
22 #include <memory.h>
23 #include <tchar.h>
24
25 // Local Header Files
26
27 // TODO: reference additional headers your program requires here
28
29 //{{AFX_INSERT_LOCATION}}
30 // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
31
32 #endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)

StdAfx.h 各种头文件包含

main.cpp


  1 #include "stdafx.h"
2 #include "resourse.h"
3
4 #define MAX_LOADSTRING 100
5
6 // Global Variables:
7 HINSTANCE hInst; // current instance
8 TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
9 TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
10 HPEN hPen[7]; //以下四行是画笔及画刷对象数组声明
11 HBRUSH hBru[7];
12 int sPen[7]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME};//前3个基本型(实、长间、短间)可以组合;
13 int sBru[7]={HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL};//横、竖、格、斜格、、)
14 HWND hWnd;
15 HDC hdc;
16 // Foward declarations of functions included in this code module:
17 ATOM MyRegisterClass(HINSTANCE hInstance);
18 BOOL InitInstance(HINSTANCE, int);
19 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
20 LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
21 void MyPaint(HDC hdc);
22 //========================================================================================
23 int APIENTRY WinMain(HINSTANCE hInstance,
24 HINSTANCE hPrevInstance,
25 LPSTR lpCmdLine,
26 int nCmdShow)
27 {
28 // TODO: Place code here.
29 MSG msg;
30
31 MyRegisterClass(hInstance);//调用函数向系统注册窗口类别,输入参数hInstance是目前运行程序的对象代码;
32
33 // 调用InitInstance函数,进行初始化操作;
34 if (!InitInstance (hInstance, nCmdShow))
35 {
36 return FALSE;
37 }
38
39 // 消息循环(通过消息循环来获取信息,
40 //进行必要的键盘信息转换而后将控制权交给操作系统,
41 //有操作系统决定哪个程序的消息处理函数处理消息
42 while (GetMessage(&msg, NULL, 0, 0)) //获取程序消息
43 {
44 TranslateMessage(&msg);//转换伪码及字符
45 DispatchMessage(&msg);//将控制权交给系统,再有系统决定负责处理消息的程序;
46 }
47
48 return msg.wParam;
49 }
50 //=====================================================================================
51
52
53
54 //=============================================================================================
55 //在建立程序窗口实体之前,必须先定义一个窗口类别,其中包含所要建立窗口的信息,
56 //并向系统注册,这里的MyRegisterClass函数就是进行定义及注册窗口类别的函数。
57 //==============================================================================================
58 ATOM MyRegisterClass(HINSTANCE hInstance)
59 {
60 WNDCLASSEX wcex; //申请一个窗口类别“WNDCLASSEX”和结构”wcex“
61 //--------------------------------------------------------------
62 //定义vcex结构的各项信息,其中设定信息处理函数(lpfnWndProc)
63 //为WNDPROC,类别名称为(lpszClassName)为”fe";
64 //--------------------------------------------------------------
65 wcex.cbSize = sizeof(WNDCLASSEX);
66
67 wcex.style = CS_HREDRAW | CS_VREDRAW;
68 wcex.lpfnWndProc = (WNDPROC)WndProc;
69 wcex.cbClsExtra = 0;
70 wcex.cbWndExtra = 0;
71 wcex.hInstance = hInstance;
72 wcex.hIcon = NULL;
73 wcex.hCursor = NULL;
74 wcex.hCursor = LoadCursor(NULL,IDC_ARROW);
75 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
76 wcex.lpszMenuName = NULL;
77 wcex.lpszClassName = "fe";
78 wcex.hIconSm = NULL;
79
80 return RegisterClassEx(&wcex);//调用RegisterClassEx函数注册类别,返回一个“ATOM"形态的字符串
81 //此字符串即为类别名称”fe";
82 }
83 //============================================================================================
84
85
86 //============================================================================================
87 //按照前面所定义的窗口类别来建立并显示实际的程序窗口
88 //============================================================================================
89 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
90 {
91
92 int i;
93
94
95 hInst = hInstance; // 把instance handle 储存在全局变量中;
96
97 hWnd = CreateWindow("fe","绘图窗口",WS_OVERLAPPEDWINDOW,
98 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
99 //-----------------------------------------------
100 //调用CreateWindow函数来建立一个窗口对象
101 //第一个参数就是窗口建立依据的类别名称
102 //-----------------------------------------------
103 if (!hWnd)
104 {
105 return FALSE;
106 }
107 //------------------------------------------------
108 //设定窗口的位置及窗口的大小,然后绘制显示在设备上
109 //-------------------------------------------------
110 MoveWindow(hWnd,10,10,650,450,true);//位置及大小
111 ShowWindow(hWnd, nCmdShow);//改定窗口显示时的状态
112 UpdateWindow(hWnd);//将窗口绘制在显示设备上
113
114 //--------------------------------------------------
115 //循环建立各种画笔与画刷
116 //--------------------------------------------------
117 for(i=0;i<=6;i++)
118 {
119 hPen[i]=CreatePen(sPen[i],1,RGB(255,0,0));//sPen[]笔型;粗细;颜色
120 if(i==6)hBru[i]=CreateSolidBrush(RGB(0,255,0));//i=6时调用CreateSolidBrush()函数建立单色笔
121 else hBru[i]=CreateHatchBrush(sBru[i],RGB(0,255,0));//i!=6时;根据sBru[]阴影刷
122 }
123
124 hdc=GetDC(hWnd);//取得窗口DC;
125
126 SetTimer(hWnd,1,5,NULL);
127 MyPaint(hdc);//在DC窗口出现时画图
128
129
130
131 return TRUE;
132 }
133 //============================================================================================
134
135
136 //============================================================================================
137 //自定义绘图函数(以格式画笔及画刷绘制线条与填充矩形)
138 //============================================================================================
139 void MyPaint(HDC hdc)
140 {
141 int i,x1,x2,y;//x1、x2、y坐标变量
142
143 for(i=0;i<=6;i++)//以7种不同画笔绘制线条
144 {
145 y=(i+1)*30;
146
147 SelectObject(hdc,hPen[i]);//选用画笔
148 MoveToEx(hdc,30,y,NULL);//移到线条起点//-----GDI两个画线函数
149 LineTo(hdc,100,y);//画线 ||-BOOL MoveToEx(HDC hdc,int x坐标,int y坐标,LPPOINT 目前坐标);
150 } // ||-BOOL LineTo(HDC hdc,int x坐标,int y坐标);
151
152 x1=120;
153 x2=180;
154
155 for(i=0;i<=6;i++)//以7种不同画刷填充矩形
156 {
157 SelectObject(hdc,hBru[i]);//选画刷
158 Rectangle(hdc,x1,30,x2,y);//画封闭矩形||-------绘制矩形函数
159 x1+=70; //------||-BOOL Rectangle(HDC hdc,int 矩形左上点x坐标,int 矩形左上点y坐标,int x,int y右下);
160 x2+=70;
161 }
162 }
163 //============================================================================================
164
165
166 //============================================================================================
167 //在前面定义类别的时候把WndProc定义为消息处理函数(当某些外部消息发生时,会按消息的类型
168 //来决定该如何进行处理。此外该函数也是一个回叫函数(CALLBACK)(windows系统函数)每一个
169 //程序都会接收信息,选择性接受、处理;
170 //============================================================================================
171 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
172 {
173 PAINTSTRUCT ps;
174
175 int i;
176
177 switch (message) //判断消息类型
178 {
179 case WM_TIMER:
180 MyPaint(hdc);
181 break;
182 case WM_PAINT: //窗口重绘制
183 hdc = BeginPaint(hWnd, &ps);
184 MyPaint(hdc);//窗口重绘开始时调用MyPaint()绘图
185 EndPaint(hWnd, &ps);
186 break;
187 case WM_DESTROY: //处理窗口结束消息
188 for(i=0;i<=6;i++)//窗口消息结束时删除GDI对象
189 {
190 DeleteObject(hPen[i]);
191 DeleteObject(hBru[i]);
192 }
193 PostQuitMessage(0);
194 ReleaseDC(hWnd,hdc);//释放所占DC;
195 break;
196 default:
197 return DefWindowProc(hWnd, message, wParam, lParam);
198 }
199 return 0;
200 }
201 //============================================================================================

[游戏模版3] Win32 画笔 画刷 图形,布布扣,bubuko.com

时间: 05-16

[游戏模版3] Win32 画笔 画刷 图形的相关文章

[游戏模版2] Win32最小框架

>_<:Just the minimum Win32  frame don't have any other special function. 1 //{{NO_DEPENDENCIES}} 2 // Microsoft Visual C++ generated include file. 3 // Used by FE.RC 4 // 5 #define IDR_MAINFRAME 128 6 #define IDD_FE_DIALOG 102 7 #define IDD_ABOUTBOX

[游戏模版18] Win32 五子棋

>_<:Learning its AI logic. >_<:resource >_<:code: 1 #include <windows.h> 2 // C 运行时头文件 3 #include <stdlib.h> 4 #include <cstdio> 5 #include <malloc.h> 6 #include <memory.h> 7 #include <tchar.h> 8 #incl

[游戏模版6] Win32 graph

>_<:there in the MyPaint(...) function respectively use Ellipse(...) draw ellipse, use RoundRect(...) draw rectangle whose angle is round, use Pie(...) draw sector also named fan shap, use Chord(...) draw  arch also named bow shaped. >_<:the s

[游戏模版4] Win32 显示鼠标位置

>_<:use MOUSE_MOVE message refresh the position information. >_<:use LOWORD(lParam) get position x and use HIWORD(lParam) get position y 1 //{{NO_DEPENDENCIES}} 2 // Microsoft Visual C++ generated include file. 3 // Used by FE.RC 4 // 5 #defin

[游戏模版5] Win32 折线 弧线

>_<:first build some points put in poly1[],poly2[] and poly3[] in the function of InitInstance(...) >_<:then in the function MyDraw() use  PolylineTo(...)\Polyline(...)\Polygon(...) draw diferent line and use PolyBezierTo(...)\PolyBezier(...)

[游戏模版20] Win32 物理引擎 加速运动

>_<:Compared with previous talk,there will be taking about how to create an accelerated speed.Only a little change in the MyPaint(...) function. >_<:resource >_<:code 1 #include <windows.h> 2 // C 运行时头文件 3 #include <stdlib.h>

[游戏模版21] Win32 物理引擎 能量守恒

>_<:Only a little change in the function of MyPaint(...),besides the initial value have some changes. >_<:resource >_<:code:    1 #include <windows.h> 2 // C 运行时头文件 3 #include <stdlib.h> 4 #include <cstdio> 5 #include &

[游戏模版19] Win32 物理引擎 匀速运动

>_<:Learning the physical engine >_<:resource >_<:code 1 #include <windows.h> 2 // C 运行时头文件 3 #include <stdlib.h> 4 #include <cstdio> 5 #include <malloc.h> 6 #include <memory.h> 7 #include <tchar.h> 8

[游戏模版7] Win32 最简单贴图

>_<:this is the first using mapping. >_<:There will be introducing how to do: First load bitmap picture return handle give hbmp, as following: hbmp=(HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,600,450,LR_LOADFROMFILE); there "b