DEV-C++ ege.h库 绘图教程(六)
一、前情回顾
DEV-C++ ege.h库 绘图教程(一)
DEV-C++ ege.h库 绘图教程(二)
DEV-C++ ege.h库 绘图教程(三)
DEV-C++ ege.h库 绘图教程(四)
DEV-C++ ege.h库 绘图教程(五)
那么今天,我们来讲一个比较简单的东西——音乐。
二、音乐函数
1.MUSIC类
首先看一看类声明。
class MUSIC
{
public:MUSIC();virtual ~MUSIC();operator HWND()const{ return (HWND)m_dwCallBack; }
public:int IsOpen() { return (m_DID != MUSIC_ERROR) ? 1 : 0; }DWORD OpenFile(LPCSTR filepath);DWORD OpenFile(LPCWSTR filepath);DWORD Play(DWORD dwFrom = MUSIC_ERROR, DWORD dwTo = MUSIC_ERROR);DWORD Pause();DWORD Seek(DWORD dwTo); //播放位置定位,单位为msDWORD SetVolume(float value);DWORD Close();DWORD Stop();DWORD GetPosition();DWORD GetLength();// 以下函数GetPlayStatus的返回值为以下之一(意义看后缀):// MUSIC_MODE_NOT_OPEN //没有正确打开// MUSIC_MODE_NOT_READY //设备没准备好 (较少使用)// MUSIC_MODE_PAUSE //暂停中// MUSIC_MODE_PLAY //正在播放// MUSIC_MODE_STOP //成功打开后,或者播放完是这个状态// MUSIC_MODE_OPEN //打开中 (较少使用)// MUSIC_MODE_SEEK //定位中 (较少使用)DWORD GetPlayStatus();
private:DWORD m_DID;PVOID m_dwCallBack;
};
MUSIC类就是EGE播放音乐的核心。(当然你也可以直接用Windows的mciSendString)
首先我们
MUSIC mus;
就建立了一个MUSIC变量,可以用来播放音乐了。
2.IsOpen
这个函数返回是否已经打开(注意不是播放)音乐,或者你也可以用
GetPlayStatus()==MUSIC_MODE_STOP
来判断是否已经打开音乐。
3.OpenFile
打开一个音乐文件,注意,只能打开mp3文件!!!
MUSIC mus;
mus.OpenFile("C:\TEST.mp3"); //绝对路径
mus.OpenFile("TEST.mp3"); //相对路径
4.Play
播放音乐,没有什么需要讲的。
MUSIC mus;
mus.OpenFile("C:\TEST.mp3"); //绝对路径
mus.OpenFile("TEST.mp3"); //相对路径
mus.Play();
getch(); //防止程序一播音乐就结束
5.Pause
暂停音乐,需要继续播放的话用Play函数。
6.Stop
停止播放音乐。
Pause:再次播放时可以从暂停的地方开始。
Stop:再次播放时从头开始。
(废话)
7.Seek
定位,例如
mus.Seek(1006);
可以从音乐的1.006秒开始播放。(单位是毫秒)
8.SetVolume
设置音量,1为最大声,取值范围[0,1]。
因为是float所以可以使用
mus.SetVolume(0.45);
(也是废话)
9.Close
关闭音乐
Stop:停止后可以使用Play再次播放。
Close:已经关闭了音乐文件,需要再次OpenFiile才能播放。
10.GetPlayStatus
获取播放状态,返回值上面的注释里头都写了。
// 以下函数GetPlayStatus的返回值为以下之一(意义看后缀):// MUSIC_MODE_NOT_OPEN //没有正确打开// MUSIC_MODE_NOT_READY //设备没准备好 (较少使用)// MUSIC_MODE_PAUSE //暂停中// MUSIC_MODE_PLAY //正在播放// MUSIC_MODE_STOP //成功打开后,或者播放完是这个状态// MUSIC_MODE_OPEN //打开中 (较少使用)// MUSIC_MODE_SEEK //定位中 (较少使用)DWORD GetPlayStatus();
enum music_state_flag {MUSIC_MODE_NOT_OPEN = 0x0,MUSIC_MODE_NOT_READY = 0x20C,MUSIC_MODE_PAUSE = 0x211,MUSIC_MODE_PLAY = 0x20E,MUSIC_MODE_STOP = 0x20D,MUSIC_MODE_OPEN = 0x212,MUSIC_MODE_SEEK = 0x210,
};
也就是说
if(mus.GetPlayStatus()==MUSIC_MODE_PLAY) mus.Stop();
可以在音乐播放时把它停止。
比较方便。
三、文字函数
不过讲完了音乐函数发现这篇文章才写了一点点,所以为了凑字数,我再来给大家讲一讲文字函数。
1.getfont
获取当前的字体样式,他的返回值是LOGFONT结构体,我们等下就说。
void EGEAPI getfont(LOGFONTA *font, PCIMAGE pimg = NULL); // 获取当前字体样式
void EGEAPI getfont(LOGFONTW *font, PCIMAGE pimg = NULL); // 获取当前字体样式
2.LOGFONT结构体
用来保存字体样式。比较复杂,就直接上官方解释了。
功能:这个结构体定义了字体的属性。 struct LOGFONT {LONG lfHeight;LONG lfWidth LONG lfEscapement;LONG lfOrientation;LONG lfWeight;BYTE lfItalic;BYTE lfUnderline;BYTE lfStrikeOut;BYTE lfCharSet;BYTE lfOutPrecision;BYTE lfClipPrecision;BYTE lfQuality;BYTE lfPitchAndFamily;TCHAR lfFaceName[LF_FACESIZE]; };
成员 lfHeight 指定高度(逻辑单位)。 如果为正,表示指定的高度是字体的完整高度;如果为负,表示指定的高度不包含tmInternalLeading的高度。也就是说相同绝对值下,负的比正的会稍高一些;而实际输出的字体高度,正数时精确匹配,负数时,和实际略有偏差,绝对值比实际的略小。 lfWidth 指定字符的平均宽度(逻辑单位)。如果为 0,则比例自适应。 lfEscapement 字符串的书写角度,单位 0.1 度,默认为 0。 lfOrientation 每个字符的书写角度,单位 0.1 度,默认为 0。 lfWeight 字符的笔画粗细,范围 0~1000,0 表示默认粗细,使用数字或下表中定义的宏均可。lfItalic 指定字体是否是斜体。 lfUnderline 指定字体是否有下划线。 lfStrikeOut 指定字体是否有删除线。 lfCharSet 指定字符集。以下是预定义的值: ANSI_CHARSET BALTIC_CHARSET CHINESEBIG5_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET GB2312_CHARSET GREEK_CHARSET HANGUL_CHARSET MAC_CHARSET OEM_CHARSET RUSSIAN_CHARSET SHIFTJIS_CHARSET SYMBOL_CHARSET TURKISH_CHARSET 其中,OEM_CHARSET 表示字符集依赖本地操作系统。 DEFAULT_CHARSET 表示字符集基于本地操作系统。例如,系统位置是 English (United States),字符集将设置为 ANSI_CHARSET。 lfOutPrecision 指定文字的输出精度。输出精度定义输出与所请求的字体高度、宽度、字符方向、行距、间距和字体类型相匹配必须达到的匹配程度。可以是以下值:
宏 粗细值 FW_DONTCARE 0 FW_THIN 100 FW_EXTRALIGHT 200 FW_ULTRALIGHT 200 FW_LIGHT 300 FW_NORMAL 400 FW_REGULAR 400 FW_MEDIUM 500 FW_SEMIBOLD 600 FW_DEMIBOLD 600 FW_BOLD 700 FW_EXTRABOLD 800 FW_ULTRABOLD 800 FW_HEAVY 900 FW_BLACK 900 lfClipPrecision 指定文字的剪辑精度。剪辑精度定义如何剪辑字符的一部分位于剪辑区域之外的字符。可以是以下值:
值 含义 OUT_DEFAULT_PRECIS 指定默认的映射行为。 OUT_DEVICE_PRECIS 当系统包含多个名称相同的字体时,指定设备字体。 OUT_OUTLINE_PRECIS 指定字体映射选择 TrueType 和其它的 outline-based 字体。 OUT_RASTER_PRECIS 当系统包含多个名称相同的字体时,指定光栅字体(即点阵字体)。 OUT_STRING_PRECIS 这个值并不能用于指定字体映射,只是指定点阵字体枚举数据。 OUT_STROKE_PRECIS 这个值并不能用于指定字体映射,只是指定 TrueType 和其他的 outline-based 字体,以及矢量字体的枚举数据。 OUT_TT_ONLY_PRECIS 指定字体映射只选择 TrueType 字体。如果系统中没有安装 TrueType 字体,将选择默认操作。 OUT_TT_PRECIS 当系统包含多个名称相同的字体时,指定 TrueType 字体。 lfQuality 指定文字的输出质量。输出质量定义图形设备界面 (GDI) 必须尝试将逻辑字体属性与实际物理字体的字体属性进行匹配的仔细程度。可以是以下值:
值 含义 CLIP_DEFAULT_PRECIS 指定默认的剪辑行为。 CLIP_STROKE_PRECIS 这个值并不能用于指定字体映射,只是指定光栅(即点阵)、矢量或 TrueType 字体的枚举数据。 CLIP_EMBEDDED 当使用内嵌的只读字体时,必须指定这个标志。 CLIP_LH_ANGLES 如果指定了该值,所有字体的旋转都依赖于坐标系统的方向是逆时针或顺时针。如果没有指定该值,设备字体始终逆时针旋转,但是其它字体的旋转依赖于坐标系统的方向。该设置影响 lfOrientation 参数的效果。 如果 ANTIALIASED_QUALITY 和 NONANTIALIASED_QUALITY 都未被选择,抗锯齿效果将依赖于控制面板中字体抗锯齿的设置。 lfPitchAndFamily 指定以常规方式描述字体的字体系列。字体系列描述大致的字体外观。字体系列用于在所需精确字体不可用时指定字体。 1~2 位指定字体间距,可以是以下值:
值 含义 ANTIALIASED_QUALITY 指定输出质量是抗锯齿的(如果字体支持)。 DEFAULT_QUALITY 指定输出质量不重要。 DRAFT_QUALITY 草稿质量。字体的显示质量是不重要的。对于光栅字体(即点阵字体),缩放是有效的,这就意味着可以使用更多的尺寸,但是显示质量并不高。如果需要,粗体、斜体、下划线和删除线字体会被合成。 NONANTIALIASED_QUALITY 指定输出质量不是抗锯齿的。 PROOF_QUALITY 正稿质量。指定字体质量比匹配字体属性更重要。对于光栅字体(即点阵字体),缩放是无效的,会选用其最接近的字体大小。虽然选中 PROOF_QUALITY 时字体大小不能精确地映射,但是输出质量很高,并且不会有畸变现象。如果需要,粗体、斜体、下划线和删除线字体会被合成。 4~7 位指定字体系列,可以是以下值:
值 含义 DEFAULT_PITCH 指定默认间距。 FIXED_PITCH 指定固定间距。 VARIABLE_PITCH 指定可变间距。
值 含义 FF_DECORATIVE 指定特殊字体。例如 Old English。 FF_DONTCARE 指定字体系列不重要。 FF_MODERN 指定具有或不具有衬线的等宽字体。例如,Pica、Elite 和 Courier New 都是等宽字体。 FF_ROMAN 指定具有衬线的等比字体。例如 MS Serif。 FF_SCRIPT 指定设计为类似手写体的字体。例如 Script 和 Cursive。 FF_SWISS 指定不具有衬线的等比字体。例如 MS Sans Serif。 字体间距和字体系列可以用布尔运算符 OR 连接(即符号 |)。 lfFaceName 字体名称,名称不得超过 31 个字符。如果是空字符串,系统将使用第一个满足其它属性的字体。
3.outtext
在当前位置输出文字。(不要问我什么是当前位置,之前讲过)
void EGEAPI outtext(LPCSTR textstring, PIMAGE pimg = NULL); // 在当前位置输出文字
void EGEAPI outtext(LPCWSTR textstring, PIMAGE pimg = NULL); // 在当前位置输出文字
void EGEAPI outtext(CHAR c, PIMAGE pimg = NULL); // 在当前位置输出字符
void EGEAPI outtext(WCHAR c, PIMAGE pimg = NULL); // 在当前位置输出字符
4.outtexyxy
在指定位置输出文字。(这个就比较好理解)
void EGEAPI outtextxy(int x, int y, LPCSTR textstring, PIMAGE pimg = NULL); // 在指定位置输出文字
void EGEAPI outtextxy(int x, int y, LPCWSTR textstring, PIMAGE pimg = NULL); // 在指定位置输出文字
void EGEAPI outtextxy(int x, int y, CHAR c, PIMAGE pimg = NULL); // 在指定位置输出字符
void EGEAPI outtextxy(int x, int y, WCHAR c, PIMAGE pimg = NULL); // 在指定位置输出字符
5.outtextrect
在指定矩形区域内输出字符串。
声明: void outtextrect(int x,int y,int w,int h,LPCSTR textstring,PIMAGE pimg = NULL ); void outtextrect(int x,int y,int w,int h,LPCWSTR textstring,PIMAGE pimg = NULL );
参数: x, y, w, h 要输出字符串所在的矩形区域 textstring 要输出的字符串。
6.xyprintf
在指定位置格式化输出文字。
和我们平常用的printf差不多,举个栗子。
xyprintf(100,100,"%.14lf",PI);
就是在(100,100)的位置14位小数输出π的值(PI是EGE库里的一个常量).
7.rectprintf
在指定矩形格式化输出字符串.
void EGEAPI rectprintf(int x, int y, int w, int h, LPCSTR fmt, ...); // 在指定矩形输出格式化字符串,指定绘图目标调用settarget
void EGEAPI rectprintf(int x, int y, int w, int h, LPCWSTR fmt, ...); // 在指定矩形输出格式化字符串,指定绘图目标调用settarget
这些变量是什么意思都不用我说了吧。
8.setfont
设置字体。
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, BYTE fbCharSet,BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, BYTE fbCharSet,BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily, PIMAGE pimg = NULL);
void EGEAPI setfont(const LOGFONTA *font, PIMAGE pimg = NULL); // 设置当前字体样式
void EGEAPI setfont(const LOGFONTW *font, PIMAGE pimg = NULL); // 设置当前字体样式
一般来说我们直接
setfont(高度,宽度,"字体名");
就可以了,下面的大家可以看一看。
参数: nHeight 指定高度(逻辑单位)。如果为正,表示指定的高度包括字体的默认行距;如果为负,表示指定的高度只是字符的高度。nWidth 字符的平均宽度(逻辑单位)。如果为 0,则比例自适应。lpszFace 字体名称。对于此参数均有LPCSTR和LPCWSTR两个版本,以上函数声明仅列出一种。提供两个接口是为了方便能同时使用两种不同的字符集。 常用的字体名称有:宋体,楷体_GB2312,隶书,黑体,幼圆,新宋体,仿宋_GB2312,Fixedsys,Arial,Times New Roman 具体可用名字,可查阅你系统已安装字体。nEscapement 字符串的书写角度,单位为 0.1°。nOrientation 每个字符的书写角度,单位为 0.1°。nWeight 字符的笔画粗细,范围 0~1000。0 表示默认粗细。使用数字或下表中定义的宏均可:
bItalic 是否斜体,true / false。 bUnderline 是否有下划线,true / false。 bStrikeOut 是否有删除线,true / false。 fbCharSet 指定字符集(详见 LOGFONT 结构体)。 fbOutPrecision 指定文字的输出精度(详见 LOGFONT 结构体)。 fbClipPrecision 指定文字的剪辑精度(详见 LOGFONT 结构体)。 fbQuality 指定文字的输出质量(详见 LOGFONT 结构体)。 fbPitchAndFamily 指定以常规方式描述字体的字体系列(详见 LOGFONT 结构体)。 font 指向 LOGFONT 结构体的指针。 返回值: (无) 示例:
宏 粗细值 FW_DONTCARE 0 FW_THIN 100 FW_EXTRALIGHT 200 FW_ULTRALIGHT 200 FW_LIGHT 300 FW_NORMAL 400 FW_REGULAR 400 FW_MEDIUM 500 FW_SEMIBOLD 600 FW_DEMIBOLD 600 FW_BOLD 700 FW_EXTRABOLD 800 FW_ULTRABOLD 800 FW_HEAVY 900 FW_BLACK 900 // 设置当前字体为高 16 像素的“宋体”(忽略行距)。 setfont(-16, 0,"宋体"); outtextxy(0, 0,"测试"); // 设置输出效果为抗锯齿(LOGFONTA是MBCS版本,LOGFONTW是UTF16版本) LOGFONTA f; getfont(&f); // 获取当前字体设置 f.lfHeight = 48; // 设置字体高度为 48(包含行距) strcpy(f.lfFaceName, "黑体"); // 设置字体为“黑体” f.lfQuality = ANTIALIASED_QUALITY; // 设置输出效果为抗锯齿 setfont(&f); // 设置字体样式 outtextxy(0,50,"抗锯齿效果");
9.settextjustify
功能:设置文字对齐方式。声明:
void settextjustify( int horiz, int vert, PIMAGE pimg = NULL );参数: horiz 水平对齐方式,可选值 LEFT_TEXT (默认), CENTER_TEXT, RIGHT_TEXT vert 垂直对齐方式,可选值 TOP_TEXT (默认), CENTER_TEXT, BOTTOM_TEXT
水平对齐方式 垂直对齐方式 LEFT_TEXT (默认) 左对齐 TOP_TEXT (默认) 顶部对齐 CENTER_TEXT 居中对齐 CENTER_TEXT 居中对齐 RIGHT_TEXT 右对齐 BOTTOM_TEXT 底部对齐 textstring 要输出的字符串的指针。
void EGEAPI settextjustify(int horiz, int vert, PIMAGE pimg = NULL);// 设置当前字体样式(详见帮助)
// nHeight: 字符的平均高度;
// nWidth: 字符的平均宽度(0 表示自适应);
// lpszFace: 字体名称;
// nEscapement: 字符串的书写角度(单位 0.1 度);
// nOrientation: 每个字符的书写角度(单位 0.1 度);
// nWeight: 字符的笔画粗细(0 表示默认粗细);
// bItalic: 是否斜体;
// bUnderline: 是否下划线;
// bStrikeOut: 是否删除线;
// fbCharSet: 指定字符集;
// fbOutPrecision: 指定文字的输出精度;
// fbClipPrecision: 指定文字的剪辑精度;
// fbQuality: 指定文字的输出质量;
// fbPitchAndFamily: 指定以常规方式描述字体的字体系列。
10.textheight,textwidth
获取当前字体高和宽。
11.ege_drawtext
功能:在指定位置格式化输出字符串。文本颜色使用 ARGB 颜色,由 setcolor() 指定。声明:
void ege_drawtext( LPCSTR format, int x, int y, ... ); void ege_drawtext( LPCWSTR format, int x, int y, ... );参数: format 格式字符串。 x 字符串输出时头字母的 x 轴的坐标值 y 字符串输出时头字母的 y 轴的坐标值。 ... 要输出的内容的参数,类似 printf。
四、附录
音乐函数
class MUSIC
{
public:MUSIC();virtual ~MUSIC();operator HWND()const{ return (HWND)m_dwCallBack; }
public:int IsOpen() { return (m_DID != MUSIC_ERROR) ? 1 : 0; }DWORD OpenFile(LPCSTR filepath);DWORD OpenFile(LPCWSTR filepath);DWORD Play(DWORD dwFrom = MUSIC_ERROR, DWORD dwTo = MUSIC_ERROR);DWORD Pause();DWORD Seek(DWORD dwTo); //播放位置定位,单位为msDWORD SetVolume(float value);DWORD Close();DWORD Stop();DWORD GetPosition();DWORD GetLength();// 以下函数GetPlayStatus的返回值为以下之一(意义看后缀):// MUSIC_MODE_NOT_OPEN //没有正确打开// MUSIC_MODE_NOT_READY //设备没准备好 (较少使用)// MUSIC_MODE_PAUSE //暂停中// MUSIC_MODE_PLAY //正在播放// MUSIC_MODE_STOP //成功打开后,或者播放完是这个状态// MUSIC_MODE_OPEN //打开中 (较少使用)// MUSIC_MODE_SEEK //定位中 (较少使用)DWORD GetPlayStatus();
private:DWORD m_DID;PVOID m_dwCallBack;
};
文字函数
// 文字相关函数
void EGEAPI outtext(LPCSTR textstring, PIMAGE pimg = NULL); // 在当前位置输出文字
void EGEAPI outtext(LPCWSTR textstring, PIMAGE pimg = NULL); // 在当前位置输出文字
void EGEAPI outtext(CHAR c, PIMAGE pimg = NULL); // 在当前位置输出字符
void EGEAPI outtext(WCHAR c, PIMAGE pimg = NULL); // 在当前位置输出字符
void EGEAPI outtextxy(int x, int y, LPCSTR textstring, PIMAGE pimg = NULL); // 在指定位置输出文字
void EGEAPI outtextxy(int x, int y, LPCWSTR textstring, PIMAGE pimg = NULL); // 在指定位置输出文字
void EGEAPI outtextxy(int x, int y, CHAR c, PIMAGE pimg = NULL); // 在指定位置输出字符
void EGEAPI outtextxy(int x, int y, WCHAR c, PIMAGE pimg = NULL); // 在指定位置输出字符
void EGEAPI outtextrect(int x, int y, int w, int h, LPCSTR textstring, PIMAGE pimg = NULL); // 在指定矩形范围输出文字
void EGEAPI outtextrect(int x, int y, int w, int h, LPCWSTR textstring, PIMAGE pimg = NULL); // 在指定矩形范围输出文字
void EGEAPI xyprintf(int x, int y, LPCSTR fmt, ...); // 在指定位置输出格式化字符串,指定绘图目标调用settarget
void EGEAPI xyprintf(int x, int y, LPCWSTR fmt, ...); // 在指定位置输出格式化字符串,指定绘图目标调用settarget
void EGEAPI rectprintf(int x, int y, int w, int h, LPCSTR fmt, ...); // 在指定矩形输出格式化字符串,指定绘图目标调用settarget
void EGEAPI rectprintf(int x, int y, int w, int h, LPCWSTR fmt, ...); // 在指定矩形输出格式化字符串,指定绘图目标调用settarget
int EGEAPI textwidth(LPCSTR textstring, PIMAGE pimg = NULL); // 获取字符串占用的像素宽
int EGEAPI textwidth(LPCWSTR textstring, PIMAGE pimg = NULL); // 获取字符串占用的像素宽
int EGEAPI textwidth(CHAR c, PIMAGE pimg = NULL);
int EGEAPI textwidth(WCHAR c, PIMAGE pimg = NULL);
int EGEAPI textheight(LPCSTR textstring, PIMAGE pimg = NULL); // 获取字符串占用的像素高
int EGEAPI textheight(LPCWSTR textstring, PIMAGE pimg = NULL); // 获取字符串占用的像素高
int EGEAPI textheight(CHAR c, PIMAGE pimg = NULL);
int EGEAPI textheight(WCHAR c, PIMAGE pimg = NULL);
void EGEAPI settextjustify(int horiz, int vert, PIMAGE pimg = NULL);// 设置当前字体样式(详见帮助)
// nHeight: 字符的平均高度;
// nWidth: 字符的平均宽度(0 表示自适应);
// lpszFace: 字体名称;
// nEscapement: 字符串的书写角度(单位 0.1 度);
// nOrientation: 每个字符的书写角度(单位 0.1 度);
// nWeight: 字符的笔画粗细(0 表示默认粗细);
// bItalic: 是否斜体;
// bUnderline: 是否下划线;
// bStrikeOut: 是否删除线;
// fbCharSet: 指定字符集;
// fbOutPrecision: 指定文字的输出精度;
// fbClipPrecision: 指定文字的剪辑精度;
// fbQuality: 指定文字的输出质量;
// fbPitchAndFamily: 指定以常规方式描述字体的字体系列。
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, BYTE fbCharSet,BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily, PIMAGE pimg = NULL);
void EGEAPI setfont(int nHeight, int nWidth, LPCWSTR lpszFace, int nEscapement, int nOrientation,int nWeight, int bItalic, int bUnderline, int bStrikeOut, BYTE fbCharSet,BYTE fbOutPrecision, BYTE fbClipPrecision, BYTE fbQuality, BYTE fbPitchAndFamily, PIMAGE pimg = NULL);
void EGEAPI setfont(const LOGFONTA *font, PIMAGE pimg = NULL); // 设置当前字体样式
void EGEAPI setfont(const LOGFONTW *font, PIMAGE pimg = NULL); // 设置当前字体样式
void EGEAPI getfont(LOGFONTA *font, PCIMAGE pimg = NULL); // 获取当前字体样式
void EGEAPI getfont(LOGFONTW *font, PCIMAGE pimg = NULL); // 获取当前字体样式
五、后记
那么今天我们讲了音乐函数还有文字函数,下次,我们将会讲解按键鼠标输入的函数,敬请期待!
上期文章:DEV-C++ ege.h库 绘图教程(五)
下期文章:DEV-C++ ege.h库 绘图教程(七)
相关文章:

DEV-C++ ege.h库 绘图教程(六)
一、前情回顾 DEV-C ege.h库 绘图教程(一) DEV-C ege.h库 绘图教程(二) DEV-C ege.h库 绘图教程(三) DEV-C ege.h库 绘图教程(四) DEV-C ege.h库 绘图教程(五)…...

MySQL原理(一)架构组成之物理文件组成
目录 一、日志文件 1、错误日志 Error Log 1.1、作用: 1.2、开启关闭: 1.3、使用 2、二进制日志 Binary Log & Binary Log Index 2.1、作用: 2.2、开启关闭: 2.3、Binlog还有一些附加选项参数 (1&#x…...

代码随想录算法训练营第三十七天 | 738.单调递增的数字、 968.监控二叉树
题目链接:738.单调递增的数字 文章讲解:代码随想录 738.单调递增的数字讲解 视频讲解:贪心算法,思路不难想,但代码不好写!LeetCode:738.单调自增的数字 思路和解法 题目: 当且仅当每个相邻位…...

【Django-ninja】django-ninja的hello world
django-ninja简介 Django Ninja是一个用于使用Django和Python 3.6类型提示构建API的Web框架。 主要特点: 易用性:旨在易于使用和直观。 高性能执行:由于Pydantic和异步支持,具有非常高的性能。 编码效率高:类型提…...

ArrayList集合初始化长度是多少,初始化的时候分配内存空间吗
ArrayList一旦初始化,在内存中就会分配空间吗 是的,当ArrayList在Java中初始化时,即使它没有添加任何元素,也会立即分配内存空间。具体来说,对于默认构造函数创建的ArrayList(即不指定初始容量)…...

C语言数组:从入门到进阶
前言: 在这篇博客中,我们将学习如何使用C语言数组的基本知识。数组是C语言中的一种重要数据结构,它允许我们存储一系列相同类型的数据。我们将讨论数组的定义、初始化、访问元素、遍历数组以及数组的应用场景。此外,我们还将通过…...

9.回文数
回文数 将整型转换为字符型反转前一半是否等于后一半将数字本身反转输入一个整数 x,如果 x是一个回文整数,返回 true;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 将整型转换为字符型 反转…...

一分钟在SpringBoot项目中使用EMQ
先展示最终的结果: 生产者端: RestController RequiredArgsConstructor public class TestController {private final MqttProducer mqttProducer;GetMapping("/test")public String test() {User build User.builder().age(100).sex(1).address("世界潍坊渤…...

SOME/IP 协议介绍(七)传输 CAN 和 FlexRay 帧
SOME/IP 不应仅用于传输 CAN 或 FlexRay 帧。但是,消息 ID 空间需要在两种用例之间进行协调。 传输 CAN/FlexRay 应使用完整的 SOME/IP 标头。 AUTOSAR Socket-Adapter 使用消息 ID 和长度来构建所需的内部 PDU,但不会查看其他字段。因此,必…...

与数组相关经典面试题
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...

数据结构与算法面试系列-02
1. 一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: 程序代码如下: package com.yoodb.uti…...

CMake 完整入门教程(五)
CMake 使用实例 13.1 例子一 一个经典的 C 程序,如何用 cmake 来进行构建程序呢? //main.c #include <stdio.h> int main() { printf("Hello World!/n"); return 0; } 编写一个 CMakeList.txt 文件 ( 可看做 cmake 的…...

pgsql中with子句和直接查询差别
1、代码的可读性和维护性: 当查询较为复杂时,WITH子句可以将复杂的查询分解成多个简单的步骤,每个步骤都可以有一个易于理解的名字。这样做提高了代码的可读性,也便于后期维护。 2、代码的重用性: 在WITH子句中定义…...

Day 31 | 贪心算法 理论基础 、455.分发饼干 、 376. 摆动序列 、 53. 最大子序和
理论基础 文章讲解 455.分发饼干 题目 文章讲解 视频讲解 思路:从小饼干开始喂小胃口 class Solution {public int findContentChildren(int[] g, int[] s) {Arrays.sort(g);Arrays.sort(s);int start 0;int count 0;for (int i 0; i < s.length &&a…...

vue3使用is动态切换组件报错Vue received a Component which was made a reactive object.
vue3使用is动态切换组件,activeComponent用ref定义报错 Vue received a Component which was made a reactive object. This can lead to unnecessary performance overhead, and should be avoided by marking the component with markRaw or using shallowRef ins…...

React16源码: React中LegacyContext的源码实现
LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了,就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢?因为它…...

Gin 框架之jwt 介绍与基本使用
文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …...

从[redis:LinkedList]中学习链表
文章目录 adlistlistNodelistmacros[宏定义]listCreatelistInitNodelistEmptylistReleaselistAddNodeHeadlistLinkNodeHeadlistAddNodeTaillistLinkNodeTaillistInsertNodelistDelNodelistUlinkNodelistIndexredis3.2.100quicklistredis7.2.2quicklist redis的基本数据类型之一…...

Prometheus+grafana配置监控系统
使用docker compose安装 方便拓展, 配置信息都放在在 /docker/prometheus 目录下 1.目录结构如下 . ├── conf │ └── prometheus.yml ├── grafana_data ├── prometheus_data └── prometheus_grafana.yaml2.创建目录文件 mkdir /docker/prometheus &&am…...

Linux之安装配置CentOS 7
一、CentOS简介 CentOS(Community Enterprise Operating System,中文意思是社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,…...
神经网络与深度学习Pytorch版 Softmax回归 笔记
Softmax回归 目录 Softmax回归 1. 独热编码 2. Softmax回归的网络架构是一个单层的全连接神经网络。 3. Softmax回归模型概述及其在多分类问题中的应用 4. Softmax运算在多分类问题中的应用及其数学原理 5. 小批量样本分类的矢量计算表达式 6. 交叉熵损失函数 7. 模型预…...

git学习及简单maven打包
前提: 已经有远程仓库地址 和账号密码了 已经安装git了 1.本地新建文件夹A用作本地仓库 2.在A文件夹下右键打开GIT BASH HERE 3.创建用户和密码,方便追踪提交记录 git config --global user.email “caoqingqing0108” //创建邮箱 git config --global …...

如何用MapTalks IDE来发布网站?
简介 MapTalks IDE 全称 MapTalks集成设计环境(Integrated Design Environment),是由MapTalks技术团队开发的新一代web地图设计软件。 通过MapTalks IDE,您可以自由的创建二维和三维地图,在其中载入或创建地理数据&a…...

我用selenium开发了一个自动创建任务,解放重复性工作
我用selenium开发了一个自动创建任务,大大解放了我做重复性工作带来的疲惫感,收获了更多的乐趣。 我司有100多个服务,运维忙不过来的时候,就会让我们自己创建云负载,你首先需要在云服务上创建负载,再创建容…...

安卓11修改HDMI自适应分辨率
客户需要hdmi自适应屏幕分辨率,没发现有相关的指令,我发现设置中有个hdmi的Auto选项,于是就试试选中这个选项,试下了可以自适应,于是就找到相关代码,在开机完成后执行这个代码,基本满足需求&…...

Linux实验记录:使用Apache的虚拟主机功能
前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 正文: 目录 前言: 正文&…...

分布式空间索引了解与扩展
目录 一、空间索引快速理解 (一)区域编码 (二)区域编码检索 (三)Geohash 编码 (四)RTree及其变体 二、业内方案选取 三、分布式空间索引架构 (一)PG数…...

Set和Map的应用场景
Set: 1.成员不能重复 2.只有键值,没有键名,有点类似数组 3.可以遍历,方法 add,delete,has Map: 1.本质上是键值对的集合,类似集合; 2.可以遍历,方法很多,可以干跟各种数据格式转换 Set和…...

小白级教程,10秒开服《幻兽帕鲁》
在帕鲁的世界,你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活,也可以为你在工厂工作。你也可以将它们进行售卖,或肢解后食用。 前言 马上过年…...

IDEA 构建开发环境
本博客主要讲解了如何创建一个Maven构建Java项目。(本文是创建一个用Maven构建项目的方式,所以需要对Maven有一定的了解) IDEA 构建开发环境 一、创建一个空工程二、构建一个普通的Maven模块 一、创建一个空工程 创建一个空的工程 * 设置整…...