图像处理函数
在使用图像之前,需要定义一个变量,然后把图片加载进变量中才能进行使用.
平时定义变量都是使用的基础数据类型,比如:int temp;
在使用图像的时候需要使用easyx提供给我们的类型:IMAGE,如:IMAGE.img;
loadimage(IMAGE* pDstImg,LPCTSTR pimgFile,int nWidth=0,int nHeight=0,bool bResize=false);从文件中读取图像
pDstImg //保存图像的IMAGE对象指针&img
plmgFile //图片文件名
nWidth=0 //图片的拉伸宽度
nHeight=0 //图片的拉伸高度
bResize=false //是否调整IMAGE的大小以适应图片
putimage(int dstX,int dstY,IMAGE* pSrcimg,DWORD dwRop=SRCCOPY);在当前设备上绘制指定图像
dstX //绘制位置的X坐标
dstY //绘制位置的Y坐标
pSrcImg //要绘制的IMAGE对象指针&
dwRop=SRCCOPY //三元光栅操作码
加载图片
IMAGE img;//定义一个对象 loadimage(&img, L"./相对路径或者绝对路径",500,400);//加载图片,后面两个调整图片大小 putimage(0, 0, &img);//输出图片,0,0,相当于坐标
注:相对路径: ./表示当前文件夹下,../当前文件夹的上一级目录
绝对路径:E:\vs\youxi01
这里我推荐用相对路径,我讲解下操作.
1.点击此文件
2.将图片加载到你创建的文件下面,我这里是test.cpp
运行结果:
鼠标消息函数
- 鼠标消息需要使用MOUSEMSG类型,比如:MOUSEMSG.msg;
- 然后用MoustHit()判断是否有鼠标消息(左键,右键,中间,移动)
- 如果有鼠标消息就可以进行接收鼠标消息了msg=GetMouseMsg();
- 鼠标消息主要成员:
- uMsg;//当前鼠标消息
- x; //当前鼠标x坐标
- y; //当前鼠标y坐标
- uMsg可用来判断当前鼠标消息是什么消息
- WM_LBUTTONDOWN 鼠标左键消息
- WM_RBUTTONDOWN 鼠标右键消息
代码示例:(要把前面写的代码的都放进去)
//鼠标消息 while (1)//不断地处理事务,需要循环 { if (MouseHit()) { //cleardevice(); MOUSEMSG msg = GetMouseMsg();//接收鼠标消息 if (msg.x > 200 && msg.x < 500 && msg.y>50 && msg.y < 100) { printf("我是QK,大家多多关照"); } //消息分发 switch (msg.uMsg) { case WM_LBUTTONDOWN: outtextxy(400, 400, L"鼠标左键按下"); printf("坐标(%d,%d)\n", msg.x, msg.y); break; case WM_RBUTTONDOWN: outtextxy(400, 400, L"鼠标右键按下"); printf("坐标(%d,%d)\n", msg.x, msg.y); break; } } }
注:这里>200,<500那段是判断鼠标是否点击在那个矩形区域内,如果是则输出下面的文字,如果不是则输出你所指向的坐标
运行结果:
另一种方式:
代码示例:
#include<iostream> #include<easyx.h> #include<string> using namespace std; void button(int x, int y, int w, int h) { setbkmode(TRANSPARENT); setfillcolor(BROWN); fillroundrect(x, y, x + w, y + h, 10, 10); settextstyle(30, 0, L"黑体"); wchar_t text[] = L"按钮"; int tx = x + (w - textwidth(text)) / 2; int ty = y + (h - textheight(text)) / 2; outtextxy(tx, ty, text); } int main() { initgraph(640, 480, EW_SHOWCONSOLE); button(50,50,150,50); while (1)//不断地处理事务,需要循环 { if (MouseHit()) { //cleardevice(); MOUSEMSG msg = GetMouseMsg();//接收鼠标消息 //消息分发 switch (msg.uMsg) { case WM_LBUTTONDOWN: if (msg.x >= 50 && msg.x <= 50 + 150 && msg.y >= 50 && msg.y <= 50 + 50) { printf("我是按钮,我被点击了\n"); } break; default: break; } } } getchar(); return 0; }
运行结果
键盘消息函数
代码示例:
//鼠标消息 int x = 0, y = 0; while (1)//不断地处理事务,需要循环 { cleardevice(); setfillcolor(BROWN); fillcircle(x, y, 20); char key = _getch(); printf("%d,%c\n", key, key); switch (key) { case 72://上键 case 'w': case 'W': y-=5; printf("上键\n"); break; case 80://下键 case 's': case 'S': y+=5; printf("下键\n"); break; case 75: case'a'://左键 case'A': x-=5; printf("左键\n"); break; case 77://右键 case 'd': case 'D': x+=5; printf("右键\n"); break; }
运行结果:
//双缓冲绘图,需要放在绘图代码之前和之后 BeginBatchDraw(); ...... EndBatchDraw();
另一种键盘操作方式:
if (GetAsyncKeyState(VK_UP))//上键 { y -= 5; } if (GetAsyncKeyState(VK_DOWN))//下键 { y += 5; } if (GetAsyncKeyState(VK_LEFT))//左键 { x -= 5; } if (GetAsyncKeyState(VK_RIGHT))//右键 { x += 5; }
两种对比:后一种更好一点,不仅可以上下左右走,还可以斜着走
播放音乐
代码示例:
#include<iostream> #include<conio.h>//使用getch() #include<graphics.h> #include<mmsystem.h>//包含多媒体设备接口头文件 #pragma comment(lib,"winmm.lib")//加载静态库 //播放音乐 void BGM() { //打开音乐,播放音乐,repeat重复播放 mciSendString(L"open ./15161.mp3",0,0,0); mciSendString(L"play ./15161.mp3",0,0,0); }
修改窗口标题
代码示例:
void change() { //获取窗口句柄 HWND hnd = GetHWnd(); //设置窗口标题 SetWindowText(hnd, L"c语言plus,欢迎关注"); //弹出窗口,提示用户操作 int isok=MessageBox(hnd, L"恭喜你成功过关", L"提示", MB_OKCANCEL); if (isok == IDOK) { printf("你点击了OK"); } else if (IDCANCEL == isok) { printf("你点击了取消"); } }
运行结果: