图形与文字绘制

注意

  • 很多函数有大小写两个版本,EasyX选全小写版本,WinSDK选大写版本
  • easyx.h自带windows.h
  • 下图是EasyX安装路径

image 20230909160130745

函数

image 20230909154013480

image 20230909160458685

示例

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
#include <iostream>
#include <graphics.h>
using namespace std;

struct round_rec
{
int left;
int top;
int right;
int bottom;
int ew;
int eh;
};

struct circle
{
int x;
int y;
int r;
};

int main()
{
/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(640, 480, SHOWCONSOLE);

// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"欢迎来到DQY&WYの小窝~");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串

// 设置背景颜色
setbkcolor(WHITE);
// 清屏, 必须在设置背景颜色后使用才有效果
cleardevice();

/* 图形设置 */

// 设置线条样式,设置一次影响后面所有
// 实线;宽度5
setlinestyle(PS_SOLID, 5);

// 设置线条颜色,设置一次影响后面所有
setlinecolor(BROWN);

// 设置填充颜色,设置一次影响后面所有
setfillcolor(YELLOW);

// 绘图
struct circle cir = {50, 60, 50};
circle(cir.x, cir.y, cir.r);
struct circle fill_cir = { 160, 60, 50 };
fillcircle(fill_cir.x, fill_cir.y, fill_cir.r);
struct circle solid_cir = { 270, 60, 50 };
solidcircle(solid_cir.x, solid_cir.y, solid_cir.r);
struct round_rec fill_roundrec = { 10, 150, 300, 300, 10, 50 };
fillroundrect(fill_roundrec.left, fill_roundrec.top, fill_roundrec.right, fill_roundrec.bottom, fill_roundrec.ew, fill_roundrec.eh);


/* 文字设置 */

// 绘制文字, 字体默认白色
// 设置文字颜色
settextcolor(RGB(230, 103, 86));

// 设置文字样式
// 高度;宽度(0: 自适应);系统字体
settextstyle(20, 0, L"楷体");

// 设置文字背景模式为透明
setbkmode(TRANSPARENT);

// 居中输出文字
// L;TEXT();项目->属性->高级->多字节字符集
wchar_t str[] = L"大家好,我是快乐小凳凳!";
// 求字符串宽度
int width = textwidth(str);
// 求字符串高度
int height = textheight(str);
// 横坐标 = left + ((right - left) - width) / 2
int x = fill_roundrec.left + (fill_roundrec.right - fill_roundrec.left - width) / 2;
// 纵坐标 = top + ((bottom - top) - height) / 2
int y = fill_roundrec.top + (fill_roundrec.bottom - fill_roundrec.top - height) / 2;
outtextxy(x, y, str);

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

图像加载

函数

image 20230910115046775

示例

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
#include <iostream>
#include <graphics.h>
using namespace std;

struct round_rec
{
int left;
int top;
int right;
int bottom;
int ew;
int eh;
};

int main()
{
/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(640, 480);

// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"DQY&WYの小窝");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串


/* 加载并显示图片 */

// 图片对象
IMAGE img;
// 加载图片:以CPP文件为起始位置
loadimage(&img, L"./images/1.jpg", 640, 480);
putimage(0, 0, &img);


/* 文字设置 */

// 设置文字样式
// 高度;宽度(0: 自适应);系统字体
settextstyle(20, 0, L"楷体");

// 设置文字背景模式为透明
setbkmode(TRANSPARENT);

// 居中输出文字
// L;TEXT();项目->属性->高级->多字节字符集
wchar_t str[] = L"大家好,我是快乐小凳凳!";
outtextxy(50, 50, str);
wchar_t str1[] = L"欢迎来到DQY&WYの小窝~";
outtextxy(50, 80, str1);

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

设置按钮

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
void button()
{
// 设置线条样式,设置一次影响后面所有
// 实线;宽度5
setlinestyle(PS_DASH, 5);

// 设置线条颜色,设置一次影响后面所有
setlinecolor(BROWN);

// 设置填充颜色,设置一次影响后面所有
setfillcolor(YELLOW);

// 绘图
struct round_rec fill_roundrec = { 50, 150, 150, 200, 10, 50 };
fillroundrect(fill_roundrec.left, fill_roundrec.top, fill_roundrec.right, fill_roundrec.bottom, fill_roundrec.ew, fill_roundrec.eh);

/* 文字设置 */

settextcolor(BLACK);

// 设置文字样式
// 高度;宽度(0: 自适应);系统字体
settextstyle(20, 0, L"楷体");

// 设置文字背景模式为透明
setbkmode(TRANSPARENT);

// 居中输出文字
// L;TEXT();项目->属性->高级->多字节字符集
wchar_t str[] = L"Button";
// 求字符串宽度
int width = textwidth(str);
// 求字符串高度
int height = textheight(str);
// 横坐标 = left + ((right - left) - width) / 2
int x = fill_roundrec.left + (fill_roundrec.right - fill_roundrec.left - width) / 2;
// 纵坐标 = top + ((bottom - top) - height) / 2
int y = fill_roundrec.top + (fill_roundrec.bottom - fill_roundrec.top - height) / 2;
outtextxy(x, y, str);

ExMessage msg;
while (true)
{
if (peekmessage(&msg, EM_MOUSE))
{
switch (msg.message)
{
case WM_LBUTTONDOWN:
if (msg.x >= fill_roundrec.left && msg.x <= fill_roundrec.right && msg.y >= fill_roundrec.top && msg.y <= fill_roundrec.bottom)
{
cout << "您刚刚在坐标(" << msg.x << ", " << msg.y << ")按下了左键!" << endl;
}
break;
default:
break;
}
}
}
}

键盘消息

函数

image 20230911230755039

image 20230911212203622

示例1

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
#include <iostream>
#include <easyx.h>
#include <conio.h> // 使用_getch()
using namespace std;

int main()
{
/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(640, 480, EW_SHOWCONSOLE);

// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"欢迎来到DQY&WYの小窝~");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串

/* 加载并显示图片 */

// 图片对象
IMAGE img;
// 加载图片
loadimage(&img, L"./images/1.jpg", 640, 480);
putimage(0, 0, &img);

// 设置线条样式,设置一次影响后面所有
// 实线;宽度5
setlinestyle(PS_DASH, 5);

// 设置线条颜色,设置一次影响后面所有
setlinecolor(BROWN);

// 设置填充颜色,设置一次影响后面所有
setfillcolor(YELLOW);

int x = 50, y = 50;
ExMessage msg;
while (true)
{
fillcircle(x, y, 50);
// 键盘消息
char key = _getch();

switch (key)
{
case 72: // 都代表上键
case 'w':
case 'W':
cout << "up" << endl;
--y;
break;
case 80: // 都代表下键
case 's':
case 'S':
cout << "down" << endl;
++y;
break;
case 75: // 都代表左键
case 'a':
case 'A':
cout << "left" << endl;
--x;
break;
case 77: // 都代表右键
case 'd':
case 'D':
cout << "right" << endl;
++x;
break;
default:
break;
}
}

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

示例2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 键盘消息
if (_kbhit())
{
if (GetAsyncKeyState(VK_UP))
{
y--;
}
if (GetAsyncKeyState(VK_DOWN))
{
y++;
}
if (GetAsyncKeyState(VK_LEFT))
{
x--;
}
if (GetAsyncKeyState(VK_RIGHT))
{
x++;
}
Sleep(5);
}

批量绘制

函数

image 20230911223028093

示例

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
#include <iostream>
#include <easyx.h>
#include <conio.h> // 使用_getch()
using namespace std;

struct round_rec
{
int left;
int top;
int right;
int bottom;
int ew;
int eh;
};

int main()
{
/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(640, 480, EW_SHOWCONSOLE);

// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"欢迎来到DQY&WYの小窝~");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串

/* 加载并显示图片 */

// 图片对象
IMAGE img;
// 加载图片
loadimage(&img, L"./images/1.jpg", 640, 480);

// 设置线条样式,设置一次影响后面所有
// 实线;宽度5
setlinestyle(PS_DASH, 5);

// 设置线条颜色,设置一次影响后面所有
setlinecolor(BROWN);

// 设置填充颜色,设置一次影响后面所有
setfillcolor(YELLOW);

// 绘图
struct round_rec fill_roundrec = { 50, 150, 150, 200, 10, 50 };

/* 文字设置 */

settextcolor(BLACK);

// 设置文字样式
// 高度;宽度(0: 自适应);系统字体
settextstyle(20, 0, L"楷体");

// 设置文字背景模式为透明
setbkmode(TRANSPARENT);

// 居中输出文字
// L;TEXT();项目->属性->高级->多字节字符集
wchar_t str[] = L"Button";
// 求字符串宽度
int width = textwidth(str);
// 求字符串高度
int height = textheight(str);
// 横坐标 = left + ((right - left) - width) / 2
int tx = fill_roundrec.left + (fill_roundrec.right - fill_roundrec.left - width) / 2;
// 纵坐标 = top + ((bottom - top) - height) / 2
int ty = fill_roundrec.top + (fill_roundrec.bottom - fill_roundrec.top - height) / 2;

int x = 50, y = 50;
ExMessage msg;
while (true)
{
// 缓冲,防止图片闪烁
BeginBatchDraw();
cleardevice();
putimage(0, 0, &img);
fillcircle(x, y, 50);
fillroundrect(fill_roundrec.left, fill_roundrec.top, fill_roundrec.right, fill_roundrec.bottom, fill_roundrec.ew, fill_roundrec.eh);
outtextxy(tx, ty, str);
// 应该在这里结束批量绘图
EndBatchDraw();

// 鼠标消息
if (peekmessage(&msg, EM_MOUSE))
{
switch (msg.message)
{
case WM_LBUTTONDOWN:
if (msg.x >= fill_roundrec.left && msg.x <= fill_roundrec.right && msg.y >= fill_roundrec.top && msg.y <= fill_roundrec.bottom)
{
cout << "您刚刚在坐标(" << msg.x << ", " << msg.y << ")按下了左键!" << endl;
}
break;
default:
break;
}
}

// 键盘消息
if (_kbhit())
{
char key = _getch(); // 阻塞函数,不输入一直在这里等

switch (key)
{
case 72: // 都代表上键
case 'w':
case 'W':
cout << "up" << endl;
y -= 5;
break;
case 80: // 都代表下键
case 's':
case 'S':
cout << "down" << endl;
y += 5;
break;
case 75: // 都代表左键
case 'a':
case 'A':
cout << "left" << endl;
x -= 5;
break;
case 77: // 都代表右键
case 'd':
case 'D':
cout << "right" << endl;
x += 5;
break;
default:
break;
}
}
}

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

播放音乐

函数

image 20230912100910836

示例

注意:<mmsystem.h>要放在<easyx.h>下方

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
#include <iostream>
#include <easyx.h>
#include <conio.h> // 使用_getch()
#include <time.h>
#include <mmsystem.h> // 多媒体设备接口
#pragma comment(lib, "winmm.lib") // 加载静态库
using namespace std;

void BGM()
{
// 打开音乐, alias取别名
mciSendString(L"open ./music/1.mp3 alias BGM", 0, 0, 0);
// 播放音乐,repeat重复播放
mciSendString(L"play BGM repeat", 0, 0, 0);
}

struct round_rec
{
int left;
int top;
int right;
int bottom;
int ew;
int eh;
};

int main()
{
/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(640, 480, EW_SHOWCONSOLE);

// 播放音乐
BGM();

// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"欢迎来到DQY&WYの小窝~");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串

/* 加载并显示图片 */

// 图片对象
IMAGE img;
// 加载图片
loadimage(&img, L"./images/1.jpg", 640, 480);

// 设置线条样式,设置一次影响后面所有
// 实线;宽度5
setlinestyle(PS_DASH, 5);

// 设置线条颜色,设置一次影响后面所有
setlinecolor(BROWN);

// 设置填充颜色,设置一次影响后面所有
setfillcolor(YELLOW);

// 绘图
struct round_rec fill_roundrec = { 50, 150, 150, 200, 10, 50 };

/* 文字设置 */

settextcolor(BLACK);

// 设置文字样式
// 高度;宽度(0: 自适应);系统字体
settextstyle(20, 0, L"楷体");

// 设置文字背景模式为透明
setbkmode(TRANSPARENT);

// 居中输出文字
// L;TEXT();项目->属性->高级->多字节字符集
wchar_t str[] = L"Button";
// 求字符串宽度
int width = textwidth(str);
// 求字符串高度
int height = textheight(str);
// 横坐标 = left + ((right - left) - width) / 2
int tx = fill_roundrec.left + (fill_roundrec.right - fill_roundrec.left - width) / 2;
// 纵坐标 = top + ((bottom - top) - height) / 2
int ty = fill_roundrec.top + (fill_roundrec.bottom - fill_roundrec.top - height) / 2;

int x = 50, y = 50;
ExMessage msg;
while (true)
{
// 缓冲,防止图片闪烁
BeginBatchDraw();
cleardevice();
putimage(0, 0, &img);
fillcircle(x, y, 50);
fillroundrect(fill_roundrec.left, fill_roundrec.top, fill_roundrec.right, fill_roundrec.bottom, fill_roundrec.ew, fill_roundrec.eh);
outtextxy(tx, ty, str);
// 应该在这里结束批量绘图
EndBatchDraw();

// 鼠标消息
if (peekmessage(&msg, EM_MOUSE))
{
switch (msg.message)
{
case WM_LBUTTONDOWN:
if (msg.x >= fill_roundrec.left && msg.x <= fill_roundrec.right && msg.y >= fill_roundrec.top && msg.y <= fill_roundrec.bottom)
{
cout << "您刚刚在坐标(" << msg.x << ", " << msg.y << ")按下了左键!" << endl;
}
break;
default:
break;
}
}

// 键盘消息
if (_kbhit())
{
if (GetAsyncKeyState(VK_UP))
{
y--;
}
if (GetAsyncKeyState(VK_DOWN))
{
y++;
}
if (GetAsyncKeyState(VK_LEFT))
{
x--;
}
if (GetAsyncKeyState(VK_RIGHT))
{
x++;
}
Sleep(5);
}
}

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

按钮对应的宏

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
VK_LBUTTON             鼠标左键                      0x01
VK_RBUTTON 鼠标右键 0x02
VK_CANCEL Ctrl + Break 0x03
VK_MBUTTON 鼠标中键 0x04

VK_BACK Backspace 键 0x08
VK_TAB Tab 键 0x09

VK_RETURN 回车键 0x0D


VK_SHIFT Shift 键 0x10
VK_CONTROL Ctrl 键 0x11
VK_MENU Alt 键 0x12
VK_PAUSE Pause 键 0x13
VK_CAPITAL Caps Lock 键 0x14

VK_ESCAPE Esc 键 0x1B

VK_SPACE 空格键 0x20
VK_PRIOR Page Up 键 0x21
VK_NEXT Page Down 键 0x22
VK_END End 键 0x23
VK_HOME Home 键 0x24
VK_LEFT 左箭头键 0x25
VK_UP 上箭头键 0x26
VK_RIGHT 右箭头键 0x27
VK_DOWN 下箭头键 0x28
VK_SNAPSHOT Print Screen 键 0x2C
VK_Insert Insert 键 0x2D
VK_Delete Delete 键 0x2E

'0''9' 数字 0 - 9 0x30 - 0x39
'A''Z' 字母 A - Z 0x41 - 0x5A

VK_LWIN 左WinKey(104键盘才有) 0x5B
VK_RWIN 右WinKey(104键盘才有) 0x5C
VK_APPS AppsKey(104键盘才有) 0x5D

VK_NUMPAD0 小键盘 0 键 0x60
VK_NUMPAD1 小键盘 1 键 0x61
VK_NUMPAD2 小键盘 2 键 0x62
VK_NUMPAD3 小键盘 3 键 0x63
VK_NUMPAD4 小键盘 4 键 0x64
VK_NUMPAD5 小键盘 5 键 0x65
VK_NUMPAD6 小键盘 6 键 0x66
VK_NUMPAD7 小键盘 7 键 0x67
VK_NUMPAD8 小键盘 8 键 0x68
VK_NUMPAD9 小键盘 9 键 0x69

VK_F1 - VK_F24 功能键F1 – F24 0x70 - 0x87

VK_NUMLOCK Num Lock 键 0x90
VK_SCROLL Scroll Lock 键 0x91

代码整合

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
#include <iostream>
#include <easyx.h>
#include <conio.h> // 使用_getch()
#include <time.h>
#include <mmsystem.h> // 多媒体设备接口
#pragma comment(lib, "winmm.lib") // 加载静态库
using namespace std;

struct round_rec
{
int left;
int top;
int right;
int bottom;
int ew;
int eh;
};

void BGM()
{
// 打开音乐, alias取别名
mciSendString(L"open ./music/1.mp3 alias bgm", 0, 0, 0);
// 播放音乐,repeat重复播放
mciSendString(L"play bgm repeat", 0, 0, 0);
}

void Change_Caption()
{
// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"欢迎来到DQY&WYの小窝~");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串
}

void SetText()
{
/* 文字设置 */
settextcolor(BLACK);

// 设置文字样式
// 高度;宽度(0: 自适应);系统字体
settextstyle(20, 0, L"楷体");

// 设置文字背景模式为透明
setbkmode(TRANSPARENT);
}

void Set_Graphics()
{
// 设置线条样式,设置一次影响后面所有
// 实线;宽度5
setlinestyle(PS_DASH, 5);

// 设置线条颜色,设置一次影响后面所有
setlinecolor(BROWN);

// 设置填充颜色,设置一次影响后面所有
setfillcolor(YELLOW);
}

void Start()
{
while (MessageBox(GetHWnd(), L"欢迎来到欢迎来到DQY&WYの小窝~要开始游戏嘛?", L"提示", MB_YESNO) != IDYES)
{
MessageBox(GetHWnd(), L"不开始游戏就无法继续噢!", L"警告", MB_OK);
}
}

void KeyHit(int &x, int &y)
{
if (_kbhit())
{
if (GetAsyncKeyState(VK_UP))
{
y--;
}
if (GetAsyncKeyState(VK_DOWN))
{
y++;
}
if (GetAsyncKeyState(VK_LEFT))
{
x--;
}
if (GetAsyncKeyState(VK_RIGHT))
{
x++;
}
Sleep(5);
}
}

void MouseHit(struct round_rec fill_roundrec, ExMessage &msg)
{
if (peekmessage(&msg, EM_MOUSE))
{
switch (msg.message)
{
case WM_LBUTTONDOWN:
if (msg.x >= fill_roundrec.left && msg.x <= fill_roundrec.right && msg.y >= fill_roundrec.top && msg.y <= fill_roundrec.bottom)
{
MessageBox(GetHWnd(), L"我只是个摆设噢~", L"阿巴阿巴", MB_OK);
}
break;
default:
break;
}
}
}

int main()
{
/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(720, 480);

// 改变窗口标题
Change_Caption();

// 播放音乐
BGM();

// 是否开始
Start();

// 设置文本和图形
SetText();
Set_Graphics();

/* 加载并显示图片 */

// 图片对象
IMAGE img;
// 加载图片
loadimage(&img, L"./images/1.jpg", 720, 480);


// 绘图
struct round_rec fill_roundrec = { 50, 150, 150, 200, 10, 50 };

// 居中输出文字
// L;TEXT();项目->属性->高级->多字节字符集
wchar_t str[] = L"Button";
// 求字符串宽度
int width = textwidth(str);
// 求字符串高度
int height = textheight(str);
// 横坐标 = left + ((right - left) - width) / 2
int tx = fill_roundrec.left + (fill_roundrec.right - fill_roundrec.left - width) / 2;
// 纵坐标 = top + ((bottom - top) - height) / 2
int ty = fill_roundrec.top + (fill_roundrec.bottom - fill_roundrec.top - height) / 2;

int x = 50, y = 50;
ExMessage msg;
while (true)
{
// 缓冲,防止图片闪烁
BeginBatchDraw();
cleardevice();
putimage(0, 0, &img);
fillcircle(x, y, 50);
fillroundrect(fill_roundrec.left, fill_roundrec.top, fill_roundrec.right, fill_roundrec.bottom, fill_roundrec.ew, fill_roundrec.eh);
outtextxy(tx, ty, str);
// 应该在这里结束批量绘图
EndBatchDraw();

// 鼠标消息
MouseHit(fill_roundrec, msg);

// 键盘消息
KeyHit(x, y);
}

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

其他样例

基础画板

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
#include <iostream>
#include <easyx.h>
#include <conio.h>
using namespace std;

int main()
{
COLORREF color[4] = {RED, RGB(255, 174, 201), BLACK, WHITE};
int i = 0; // 选择颜色
int r = 1; // 圆形半径

/* 窗口设置 */

// 创建一个窗口, 宽640,高480
// initgraph(640, 480, SHOWCONSOLE | NOCLOSE | NOMINIMIZE);
initgraph(600, 800);

// 设置窗口标题
HWND hnd = GetHWnd();//获取窗口句柄
SetWindowText(hnd, L"欢迎来到DQY&WYの小窝~");//设置窗口标题 第一个参数传入窗口句柄,第二个参数设置字符串

// 设置背景颜色
setbkcolor(WHITE);
// 清屏, 必须在设置背景颜色后使用才有效果
cleardevice();

setfillcolor(color[i]);

// 绘图
ExMessage msg;
while (true)
{
if (peekmessage(&msg, EM_MOUSE | EM_KEY))
{
switch (msg.message)
{
case WM_MOUSEMOVE:
if (msg.lbutton)
{
BeginBatchDraw();
solidcircle(msg.x, msg.y, r);
EndBatchDraw();
}
break;

case WM_KEYDOWN:
if (msg.vkcode == 'a' || msg.vkcode == 'A' || msg.vkcode == 'd' || msg.vkcode == 'D')
{
++i;
i %= 4;
setfillcolor(color[i]);
}
else if (msg.vkcode == 'q' || msg.vkcode == 'Q' || msg.vkcode == 'e' || msg.vkcode == 'E')
{
r += 4;
r %= 25;
}
break;
default:
break;
}
}
}

// 保留窗口
getchar();
// 关闭窗口
closegraph();

return 0;
}

输入框

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
// 编译环境:VC2008 及以上版本,Unicode 字符集
//
#include <graphics.h>
#include <conio.h>

int main()
{
// 初始化绘图窗口
initgraph(640, 480);

// 定义字符串缓冲区,并接收用户输入
wchar_t s[10];
InputBox(s, 10, L"请输入半径");

// 将用户输入转换为数字
int r = _wtoi(s);

// 画圆
circle(320, 240, r);

// 按任意键退出
_getch();
closegraph();

return 0;
}