目录
创作背景和目的
easyx相关操作
绘制窗口与程序debug
读取和绘制图像
图片渲染缓存
获取鼠标信息
弹出窗口
音乐播放
在大一下学期做完C语言课程设计推箱子后,大二上学期又做了数据结构课程设计羊了个羊,在过程中发现自己对图形界面的相关知识处于一个较为薄弱的状态,因此在此写下该篇博客记录和总结关于图形界面编程的相关操作,目的是方便日后需要时更快的查找温习(虽然以后好像不会再有该方面的课程设计了),也算是对两个课程设计画上一个圆满的句号。
注意:本博客创作目的在于方便日后个人使用,因此省略了较多细节,若想查找更加详细的内容,可前往EasyX 文档 - 基本说明
头文件:#include
使用函数:initgraph
函数介绍:HWND initgraph(int width, int height, int flag = NULL); // 初始化图形环境
参数1:窗口宽度
参数2:窗口高度
参数3:是否打开控制台
示例:
initgraph(500, 500); //绘制一个长50宽50的窗口
initgraph(500, 500, 1); //绘制一个长50宽50的窗口并打开控制台方便debug
头文件:#include
使用函数:loadimage, putimage
示例:
IMAGE sign; //创建一个图形变量
loadimage(&sign, "sign.png"); //为图形变量导入图形
initgraph(500, 500);//创建窗口
putimage(10, 20, &sign); //在x=10,y=20的坐标处绘制图像
当图像素材十分多时,可以利用sprintf快速读取图像
示例:
IMAGE menu[10]
char FileName[100];
for (int i = 0; i < 10; i++) {
sprintf_s(FileName, sizeof FileName, "res/menu%d.png", i);
loadimage(&menu[i], FileName);
}
头文件:#include
函数:BeginBatchDraw, EndBatchDraw
避免图片渲染时出现闪屏情况,我们可以先将所有图片渲染到缓存中,最后再一起渲染到屏幕
示例:
while(1){
BeginBatchDraw();
... //批量绘制图片
EndBatchDraw();
}
头文件:#include
使用函数:peekmessage
函数介绍:bool peekmessage(ExMessage * msg, BYTE filter = -1, bool removemsg = true);
参数1:msg: 指向消息结构体 ExMessage 的指针,用来保存获取到的消息。
参数2:filter: 指定要获取的消息范围,默认 -1 获取所有类别的消息。可以用以下表格中的值或值的组合获取指定类别的消息:
参数3:removemsg: 在 peekmessage 处理完消息后,是否将其从消息队列中移除。
参数2标识 | 描述 |
EX_MOUSE | 鼠标消息 |
EX_KEY | 按键消息 |
EX_CHAR | 字符消息 |
EX_WINDOW | 窗口消息 |
示例:
ExMessage msg; //创建一个消息变量
if (peekmessage(&msg)){ //判断是否获取任何消息
...
}
if (peekmessage(&msg,EM_MOUSE)) { //判断是否接收到鼠标信息
int x = msg.x; //获取鼠标横坐标
int y = msg.y; //获取鼠标纵坐标
}
if (peekmessage(&msg) && msg.message == WM_LBUTTONDOWN){ //判断是否获取鼠标左键点击消息
...
}
消息标识 | 消息常量 | 详细描述 |
EX_MOUSE | WM_MOUSEMOVE | 鼠标移动消息 |
WM_MOUSEWHEEL | 鼠标滚轮拨动消息 | |
WM_LBUTTONDOWN | 左键按下消息 | |
WM_LBUTTONUP | 左键弹起消息 | |
WM_LBUTTONDBLCLK | 左键双击消息 | |
WM_MBUTTONDOWN | 中键按下消息 | |
WM_MBUTTONUP | 中键弹起消息 | |
WM_MBUTTONDBLCLK | 中键双击消息 | |
WM_RBUTTONDOWN | 右键按下消息 | |
WM_RBUTTONUP | 右键弹起消息 | |
WM_RBUTTONDBLCLK | 右键双击消息 | |
EX_KEY | WM_KEYDOWN | 按键按下消息 |
WM_KEYUP | 按键弹起消息 | |
EX_CHAR | WM_CHAR | 字符消息 |
EX_WINDOW | WM_ACTIVATE | 窗口激活状态改变消息 |
WM_MOVE | 窗口移动消息 | |
WM_SIZE | 窗口大小改变消息 |
头文件:#include
使用函数:MessageBox
函数介绍:int MessageBox( HWND hWnd,LPCTSTR lpText, LPCTSTR lpCaption = NULL, UINT nType = MB_OK );
参数1:hWnd:该消息框的父窗口句柄(如果此参数为NULL,则说明该消息框无父窗口)
参数2:lpText:消息框内容
参数3:lpCaption:消息框标题内容
参数4:uType:按钮类型 和 图形标志
注意:参数4设置多项时不同的代号用 '| '连接,如:MB_OK | MB_ICONQUESTION
参数4按钮常量:
参数4按钮常量 | 所包含的按钮 |
---|---|
MB_OK | 确认 |
MB_OKCANCEL | 确认、取消 |
MB_YESNO | 是、否 |
MB_YESNOCANCEL | 是、否、取消 |
MB_RETRYCANCEL | 重试、取消 |
MB_ABORTRETRYIGNORE | 中止、重试、跳过 |
参数4图标常量:
参数4图标类型 | 详细描述 | 图标常量 |
---|---|---|
x | 红色圆里白色x | MB_ICONERROR |
MB_ICONHAND | ||
MB_ICONSTOP | ||
i | 蓝色圆里白色i | MB_ICONINFORMATION |
MB_ICONASTERISK | ||
? | 蓝色圆里白色? | MB_ICONQUESTION |
! | 黄色三角形里白色! | MB_ICONWARNING |
MB_ICONEXCLAMATION |
函数返回值:
返回值 | 含义 |
---|---|
IDOK | 选择了“确认” |
IDCANCEL | 选择了“取消” |
IDABORT | 选择了“中止” |
IDRETRY | 选择了“重试” |
IDIGNORE | 选择了“忽略” |
IDYES | 选择了“是” |
IDNO | 选择了“否” |
示例:
HWND hd;
hd = GetHWnd();//获取窗口句柄
if(MessageBox(hd, "恭喜过关!", "提示", MB_OK | MB_ICONQUESTION) == IDOK){//判断用户是否点击确认按钮
...
}
头文件:#include
链接库:#pragma comment ( lib, "winmm.lib" )
使用函数:mciSendString
常用操作:
打开音乐文件:mciSendString("open music.mp3 alias A", 0, 0, 0); //将音乐取名为A
循环播放音乐:mciSendString("Play A repeat", 0, 0, 0);
暂停播放音乐:mciSendString("Pause A", 0, 0, 0);
继续播放音乐:mciSendString("Resume A", 0, 0, 0);
关闭音乐文件:mciSendString("Close A", 0, 0, 0);