新手教学,使用c/c++制作简单的菜单面板(音乐播放器示例)

新手教学,使用c/c++制作简单的菜单面板(音乐播放器示例)

我们需要的工具

在大学学了一年的c++其实已经可以进行初步的软件设计了,但我们什么都不会的原因其实在于工具的欠缺,这里建议想继续深入学习c/c++的同学们在平时自己练习c/c++的时候最好是用VS系列,Visual Studio,不建议使用Dev,Visual Code,这两个软件已经很老了,很多现在的库都是用不了的。附上Visual Studiod的官方下载链接: l这里下载.然后我们还需要一个图形化的库:easyX,下载链接:https://easyx.cn/downloads/view.aspx?id=10,(注意先安装好VS后在下载easyX)

菜单分析

想完成一个音乐播放的小软件我们需要完成三方面的工作

  1. 完成图片背景和按键的制作
  2. 完成按键与鼠标的交互
  3. 通过程序操作多媒体设备

图片背景和按键的制作

这里我们需要用到头文件#include<graphics.h>
我们需要用到里面的函数:
initgraph();
loadimage();
putimage();
fillrectangle();
outtextxy();
setfillcolor(color);
settextstyle();
setlinecolor();
settextcolor();
setbkmode();
变量类型:
IMAGE
代码和具体讲解在后面

完成按键与鼠标的交互

我们只需要用到变量类型:MOUSEMSG

通过程序操作多媒体设备

我们需要操作多媒体的头文件和静态库:
#include<mmsyscom.h>
#pragma comment(lib,“winmm.lib”)
还有函数
mciSendString(“指令”,0, 0,0)后面三个参数没有使用随意

代码详解

我们先完成按键类的设计
一个按键实际上就是画出了一个矩形的图片然后在这个图片区域进行鼠标的交互
那么一个按键其应该具备的属性应该有哪些?
1,按键的位置
2,按键的大小
3,按键的颜色
4,按键所表示的信息(按键上的字)
这里说明一下在图形窗口中(0,0)所在的位置是最左上角然后分别向左向下为正方向建立x轴和y轴

#include<graphics.h>
#include<string>
class button
{
    
    
public:
	int x;
	int y;//(x,y)按键左上角的位置
	int width;//按键宽度
	int height;//按键高度
	COLORREF color;//按键的颜色,颜色全部都是大写的英文单词
	char* str;//按键上的字
	void build(int x_,int y_, int width_, int height_, COLORREF color_, const char* str_) //对按键进行初始化,这里也可以直接用构造函数
	{
    
    
		x = x_;
		y = y_;
		width = width_;
		height = height_;
		color = color_;
		str = new char[strlen(str_)+1];//字符指针需要预先分配内存
		strcpy(str, str_);//复制字符串
	}
	void drawbutton()//画出按键
	{
    
    
		setfillcolor(color);//设置填充的颜色为按键的颜色
		settextstyle(35, 0, "楷体");//设置字体属性,宽度35,高度0(自适应),字体楷体
		setlinecolor(BLACK);//设置边框线条颜色
		settextcolor(BLACK);//设置字体颜色
		setbkmode(TRANSPARENT);//设置字体背景为透明treansparent
		fillrectangle(x, y, x + width, y + height);//填充出一个矩形,参数为该矩形的左上和右下的坐标,颜色为上面所设置的颜色默认为黑色
		outtextxy(x + 20, y + 10, str);//在x+20,y+10位置输出设置好的字体文字str
	}
	//鼠标交互的一部分
	bool mouseInButton(MOUSEMSG m)//用于判断鼠标是否在按键的范围内
	{
    
    
	//m.x,m.y表示该鼠标的横纵坐标
		if (m.x >= x && m.x <= x + width && m.y >= y && m.y <= y + height)
		{
    
    
			color = RED;//如果在就将按键颜色改变
			return true;
		}
		else
		{
    
    
			color = YELLOW;//变回来
			return false;
		}
	}
	~button() {
    
    //析构函数
		delete []str;
	}
};

按键的类型已经建立好了,现在主函数

#include<iostream>
#include<graphics.h>
#include"button.h"
#include<mmsyscom.h>
#pragma comment(lib,"winmm.lib")//要操作多媒体设备要使用的头文件和静态库(记着要固定这样用就行,静态库我也不知道是啥)
int main()
{
    
    
	initgraph(800, 600);//初始化一个800*600大小的图形窗口
	IMAGE mm=0;//定义一个图形变量并初始化(初始化成什么没有要求)
	loadimage(&mm, "photo.png", 800, 600);//下载图片以800*600大小到该图形变量中(图片这里最好标明后缀,如果不是和程序的可执行文件在同一个文件夹内的话,就要写成完整路径)
	putimage(0, 0, &mm);//在(0,0)位置输出变量的图片
	button b1,b2,b3,b4;//定义4个按键
	//分别初始化其位置,宽,高,颜色,文字
	b1.build(300, 150, 200, 50, YELLOW, "播放音乐");
	b1.drawbutton();//将按键画出
	b2.build(300, 205, 200, 50, YELLOW, "暂停播放");
	b2.drawbutton();
	b3.build(300, 260, 200, 50, YELLOW, "继续播放");
	b3.drawbutton();
	b4.build(300, 315, 200, 50, YELLOW, "停止播放");
	b4.drawbutton();
	while (1)
	{
    
    
	 //更新按键,对按键进行重新绘制
		b1.drawbutton();
		b2.drawbutton();
		b3.drawbutton();
		b4.drawbutton();
		MOUSEMSG m = GetMouseMsg();//定义一个鼠标信息变量并初始化为现在的鼠标信息
		//m.uMsg表示鼠标变量m此时的按键状态(左键按下,右键按下,没按)
		//播放音乐的函数:mciSendString("指令",0, 0,0)后面三个参数没有使用随意 
	//play; 播放;open:打开;close:关闭;pause:暂停,resume:继续。
	//指令后面加音乐名(要求和图片名字要求一样)
	//mciSendString---Media Control Interface Send String
		if (b1.mouseInButton(m) && m.uMsg == WM_LBUTTONDOWN)//当鼠标在按键的范围内且左键按下,WM_LBUTTONDOWN----window message left button down
		{
    
    
			mciSendString("open 1.mp3", 0, 0, 0);
			mciSendString("play 1.mp3", 0, 0, 0);
		}
		else if (b2.mouseInButton(m) && m.uMsg == WM_LBUTTONDOWN)
		{
    
    
			mciSendString("pause 1.mp3", 0, 0, 0);
		}
		else if (b3.mouseInButton(m) && m.uMsg == WM_LBUTTONDOWN)
			mciSendString("resume 1.mp3", 0, 0, 0);
		else if (b4.mouseInButton(m) && m.uMsg == WM_LBUTTONDOWN)
			mciSendString("close 1.mp3", 0, 0, 0);
	}
		closegraph();//关闭图像
		return 0;
}

总结

1.完成图片背景和按键的制作
图片窗口:
创建:initgraph()
关闭:closegraph()
下载图片:loadimage();
输出图片:putimage();
画出矩形填充区域:fillrectangle();
输出文字:outtextxy();
设置填充颜色:setfillcolor(color);
设置字体属性:settextstyle();
设置边框颜色:setlinecolor();
设置字体颜色:settextcolor();
设置字体背景属性:setbkmode();
图片类型:IMAGE
2. 完成按键与鼠标的交互
鼠标类型:MOUSEMSG–mouse message
鼠标位置为其公开元素x,y
按键情况:uMsg
左键按下:WM_LBUTTONDOWN–window message left button down
右键按下:WM_RBUTTONDOWN–window message right button down
3. 通过程序操作多媒体设备
头文件和静态库
#include<mmsyscom.h>
#pragma comment(lib,“winmm.lib”)
操作函数:
mciSendString(“指令”,0, 0,0)–media control interface send string
指令:
open:打开
close:关闭
play:播放
pause:暂停
resume:继续

补充可能遇到的问题

1,如果使用字符串代替文字部分时报错(b1.build(300, 150, 200, 50, YELLOW, “播放音乐”);)播放音乐处报错
解决方案:在项目出右键打开“属性”—>“高级”---->“字符集”—>改为使用多字节字符集
2,This function or variable may be unsafe…
软件对于可能不安全的用法会报错,并不是代码的问题
解决方案:在项目出右键打开“属性”—>“c/c++”---->“SDL检查”—>改为否

おすすめ

転載: blog.csdn.net/qq_49327751/article/details/113405802