⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcmeter.c

📁 用你的语音Modem实现像电话一样通话的程序
💻 C
字号:
#include "bcmeter.h"BC_Meter::BC_Meter(int x, int y, int w, int h, float min, int mode)	:	BC_Tool(x, y, w, h){	this->min = min;	this->mode = mode;	init_graphics();}BC_Meter::~BC_Meter(){	for(int i = 0; i < 6; i++) delete db_titles[i];}BC_Meter::init_graphics(){	vertical = h > w;	total_width = vertical ? h : w;	for(int i = 0; i < 6; i++) db_titles[i] = new char[6];	// calibrate the db titles	get_divisions(&low_division, 				&medium_division, 				total_width, 				db_titles, 				title_x, 				vertical);}BC_Meter::get_divisions(int *low_division, 						int *medium_division, 						int total_width, 						char **titles, 						int *title_x, 						int vertical){	int i;	float j, j_step;	int division, division_step;		division = 0;	division_step = total_width / 4;	j = min;     // number for title	j_step = min / 4;	for(i = 0; i < 4;)	{		sprintf(titles[i], "%.0f", j);		if(i == 0) title_x[i] = division; else title_x[i] = division - 10;		division += division_step;		j -= j_step;		i++;	}		sprintf(titles[4], "%.0f", j_step / 2);	title_x[4] = (division + title_x[3]) / 2;		sprintf(titles[5], "0");	title_x[5] = division - 10;	*low_division = (int)title_x[2] + 10;	*medium_division = title_x[4] + 10;}BC_Meter::create_tool_objects(){	create_window(x, y, w, h, BLACK);	peak_timer = 0;	level_x = peak_x = 0;	over_timer = 0;	over_count = 0;	draw();}BC_Meter::resize_tool(int x, int y, int w, int h){	resize_window(x, y, w, h);	for(int i = 0; i < 6; i++) delete db_titles[i];	init_graphics();	draw();}BC_Meter::reset(){	level_x = peak_x = 0;	peak_timer = 0;	over_timer = 0;	over_count = 0;	draw();}BC_Meter::reset_over(){	over_timer = 0;}BC_Meter::change_format(int mode){	this->mode = mode;}BC_Meter::draw(){	int low_size = low_division;	int medium_size = medium_division - low_division;	int high_size = total_width - medium_division;	draw_3d_big(0, 0, w, h, DKGREY, BLACK, LTGREY);// draw bars	if(level_x > 0)	{		if(level_x < total_width) high_size = level_x - medium_division;		if(level_x < medium_division) medium_size = level_x - low_division;		if(level_x < low_division) low_size = level_x;		if(low_size > 0)		{			set_color(low_color);			if(vertical) 			draw_box(2, h - low_size - 2, w - 4, low_size);			else			draw_box(2, 2, low_size, h - 4);		}				if(medium_size > 0)		{			set_color(medium_color);			if(vertical)			draw_box(2, h - low_division - medium_size - 2, w - 4, medium_size);			else			draw_box(low_division, 2, medium_size, h - 4);		}				if(high_size > 0)		{			set_color(high_color);			if(vertical)			draw_box(2, h - medium_division - high_size - 2, w - 4, high_size);			else			draw_box(medium_division, 2, high_size, h - 4);		}	}// draw peak	peak_x1 = peak_x - 2;	peak_x2 = peak_x;		if(peak_x1 < 0) peak_x1 = 0;	if(peak_x > 0)	{		if(peak_x2 > medium_division) set_color(high_color);		else		if(peak_x2 > low_division) set_color(medium_color);		else		set_color(low_color);		if(vertical)		draw_box(2, h - peak_x1 - 4, w - 4, peak_x2 - peak_x1);		else		draw_box(peak_x1 + 2, 2, peak_x2 - peak_x1, h-4);	}// draw over	if(over_timer) 	{		set_color(RED);		if(vertical)		draw_text(10, h - 25, "O");		else		draw_text(25, h / 2 + get_text_height(LARGEFONT) / 2 - 2, "OVER");// force user to reset		over_timer--;	}	flash();}BC_Meter::update(float new_value, int over){	peak_timer++;	if(mode == METER_DB)	{		if(new_value == 0) new_value = min;		else		new_value = db.todb(new_value);        // db value				level_x = total_width - 4 - (int)((new_value / min) * total_width);	}		if(mode == METER_INT)	{		level_x = (int)(new_value * total_width - 4);	}		if(level_x > total_width - 4) level_x = total_width - 4;	if(level_x > peak_x)	{		peak_x = level_x;		peak_timer = 0;	}	else	if(peak_timer > 10)	{		peak_x = level_x;		peak_timer = 0;	}	if(over) over_timer = 100;	// only draw if window is visible	if(!top_level->hidden)	{		draw();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -