蓟州农家院如何做网站,logo设计在线,东莞网络技术有限公司,十种人不适合做管理者hello大家好#xff0c;这里是dark flame master#xff0c;今天给大家带来Easyx图形库最后一节功能实现的介绍#xff0c;前边介绍了绘制各种图形及键盘交互#xff0c;文字#xff0c;图片等操作#xff0c;今天就可以使写出的程序更加生动且容易操控。一起学习吧… hello大家好这里是dark flame master今天给大家带来Easyx图形库最后一节功能实现的介绍前边介绍了绘制各种图形及键盘交互文字图片等操作今天就可以使写出的程序更加生动且容易操控。一起学习吧 由于会用到前边的内容 专栏Easyx趣味编程 正题 EasyX提供了记录并判断玩家使用鼠标对窗体进行的操作这些操作会放在操作列表中等待被处理。 getmassage函数 getmassage函数是从消息列表中获取一个消息并将该消息移除程序会根据这条消息进行相关的响应。 这个函数有两次重载但是功能相同 若getmessage()函数传入参数是-1表示获取所有类型的消息。 如果不需要读取所有类型的消息可以单独写某一种或者利用|或运算符进行合并。 创建一个ExMessage变量 如果我们鼠标消息和键盘消息都想要其他两种可以不读取
ExMessage msg;
msg getmessage(EX_MOUSE | EX_CHAR);ExMessage结构体如下 消息标识传入的参数为鼠标消息就使用鼠标的结构体传入参数是什么就调用哪个结构体。 消息标识 我们这节课只讲鼠标消息类型所以只举例说明鼠标消息标识 对照上表实现鼠标移动时绘制一个半径为2的黑色的填充圆左键按下绘制半径为20的蓝色填充圆右键按下绘制黄色半径为50的填充五角星。 代码如下
#include stdio.h
#include easyx.h
#include stdlib.h
#include math.h
#define Pai 3.14
int main()
{initgraph(800, 600);setbkcolor(WHITE);cleardevice();ExMessage msg;while (1){msg getmessage(EX_MOUSE);switch(msg.message){case WM_MOUSEMOVE://在移动过程中setfillcolor(BLACK);solidcircle(msg.x, msg.y, 2);break;case WM_LBUTTONDOWN://在移动过程中setfillcolor(BLUE);solidcircle(msg.x, msg.y, 20);break;case WM_RBUTTONDOWN:setfillcolor(GREEN);int r 50;//半径//初始角度double theta Pai / 2;//递增角度double delta 2 * Pai / 5;POINT points[5];//定义一个数组存放点的坐标for (int i 0; i 5; i){points[i].x cos(theta i * delta * 2) * rmsg.x;points[i].y sin(theta i * delta * 2) * rmsg.y;}setfillcolor(YELLOW);setpolyfillmode(WINDING);solidpolygon(points, 5);break;}}return 0;
}运行后如图 之前的操作都默认为单击事件不论我们点击的有多快都还是会判定为单击事件。 在创建窗体时加上EX_DBLCLKS即可识别双击事件。 initgraph(800, 600, EX_DBLCLKS);要注意:EX_DBCLICKS这个版本已经不能在VS上使用了。 更改代码双击出现五角星左击蓝色圆右击红色圆左边双击黄色五角星。 while (1){msg getmessage(EX_MOUSE);switch(msg.message){case WM_MOUSEMOVE://在移动过程中setfillcolor(BLACK);solidcircle(msg.x, msg.y, 5);break;case WM_LBUTTONDOWN://在移动过程中setfillcolor(BLUE);solidcircle(msg.x, msg.y, 20);break;case WM_RBUTTONDOWN://在移动过程中setfillcolor(RED);solidcircle(msg.x, msg.y, 20);break;case WM_LBUTTONDBLCLK:setfillcolor(GREEN);int r 50;//半径//初始角度double theta Pai / 2;//递增角度double delta 2 * Pai / 5;POINT points[5];//定义一个数组存放点的坐标for (int i 0; i 5; i){points[i].x cos(theta i * delta * 2) * rmsg.x;points[i].y sin(theta i * delta * 2) * rmsg.y;}setfillcolor(YELLOW);setpolyfillmode(WINDING);solidpolygon(points, 5);break;}}运行后如图 音频播放 v趣味化编程只有画面可不行我们要声色俱全如果我们玩一个小游戏一定会有相应的背景音乐。 认识一个新函数mciSendString
MCIERROR mciSendString(LPCTSTR lpszCommand,//命令字符串如openclose,LPTSTR lpszReturnString,//接收返回信息的字符串一般直接填NULLUINT cchReturn,//返回信息的长度可以直接填零HANDLE hwndCallback,//回调窗口句柄一般直接填NULL
);在播放之前要将播放的歌曲放置在工程目录下。 当我们在使用时却会报错 这是因为这个函数在库winmm.lib中默认情况下链接器不会输入这个库文件。 添加库winmm.lib 点击添加即可 将库添加即可 我们这里用到了汉语所以要将字符集设置为未设置 代码如下
int main()
{mciSendString(open 及你太美.mp3, NULL, 0, NULL);//打开音乐没有进行播放printf(打开音乐);getchar();mciSendString(play 及你太美.mp3, NULL, 0, NULL);//播放printf(播放音乐);getchar();mciSendString(pause 及你太美.mp3, NULL, 0, NULL);//暂停播放printf(暂停);getchar();mciSendString(resume 及你太美.mp3, NULL, 0, NULL);//继续播放printf(继续);getchar();mciSendString(stop 及你太美.mp3, NULL, 0, NULL);//停止播放printf(停止);getchar();mciSendString(close 及你太美.mp3, NULL, 0, NULL);//关闭音乐printf(关闭);getchar();return 0;
}现在就可以实现一个坤坤播放器 创建窗体将所用到的材料都放在工程目录里。 绘制坤坤.png作为背景 大概找出篮球的区域就可以编写程序了。 代码如下
int main()
{int key 1;initgraph(600,600, EX_DBLCLKS);IMAGE img;//创建窗体loadimage(img, 坤坤.png, 600, 600);putimage(0, 0, img);mciSendString(open 及你太美.mp3, NULL, 0, NULL);//打开音乐没有进行播放//如果我们点击篮球就会播放歌曲ExMessage msg;while (key){msg getmessage(EX_MOUSE);switch(msg.message){ case WM_LBUTTONDOWN://左击if (msg.x 0 msg.x 600 msg.y450 msg.y 600){mciSendString(play 及你太美.mp3, NULL, 0, NULL);//播放}break;case WM_RBUTTONDOWN://右击if (msg.x 0 msg.x 600 msg.y450 msg.y 600){mciSendString(pause 及你太美.mp3, NULL, 0, NULL);//暂停}break;case WM_LBUTTONDBLCLK://右键双击关闭音乐mciSendString(close 及你太美.mp3, NULL, 0, NULL);//关闭音乐key 0;break;}}closegraph();return 0;
}运行后点击左键播放点击右键暂停双击右键就关闭音乐结束程序。 这个小程序虽然很短但已经运用了今天的大部分所学希望大家能够理解。 本文结束啦下文见