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依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
