如果用户要在哪个源码文件里面使用这些字体,就把这些字体声明放在相应源文件的开头就行。使用方法,跟使用emWin自带的ASCII和ISO8859-1字体基本是一样的,唯一区别的地方是:调用FontCvt生成的字体时要加上取地址操作&。下面举一个完整的例子,代码在本章节配套例子的MainTask.c文件里面(对于初学者来说,对话框,按钮控件和文本控件还没有讲到,这里只是举个例子,会使用这些新生成的字体即可,后面会讲到这些控件):
复制代码
#include "MainTask.h"
#include "includes.h"
/*
*********************************************************************************************************
* 调用外部字体声明,这个就是第4步中所说的问题
*********************************************************************************************************
*/
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSong16;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSong32;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSong72;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSong144;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSongA144;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSongExA144;
extern GUI_CONST_STORAGE GUI_FONT GUI_FontFontSongExF144;
/*
*********************************************************************************************************
* 对话框资源列表
*********************************************************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "armfly", 0, 0, 0, 800,480,FRAMEWIN_CF_MOVEABLE,0},
{ BUTTON_CreateIndirect, "安富莱我们我们", GUI_ID_BUTTON0, 350,20,420,150,0,0},
{ TEXT_CreateIndirect, "安富莱电子", GUI_ID_TEXT0, 5, 10, 300, 33, 0,0},
{ TEXT_CreateIndirect, "安富莱电子", GUI_ID_TEXT1, 5, 40,250, 50, 0,0},
{ TEXT_CreateIndirect, "安富莱", GUI_ID_TEXT2, 5, 100,360, 90, 0,0},
{ TEXT_CreateIndirect, "富", GUI_ID_TEXT3, 5, 220,144, 144, 0,0},
{ TEXT_CreateIndirect, "富", GUI_ID_TEXT4, 205, 230,144, 144, 0,0},
{ TEXT_CreateIndirect, "富", GUI_ID_TEXT5, 405, 230,144, 144, 0,0},
{ TEXT_CreateIndirect, "富", GUI_ID_TEXT6, 605, 230,144, 144, 0,0}
};
/*
*********************************************************************************************************
* 函 数 名: PaintDialog
* 功能说明: 对话框重绘函数
* 形 参:pMsg 消息指针
* 返 回 值: 无
*********************************************************************************************************
*/
void PaintDialog(WM_MESSAGE * pMsg)
{
// WM_HWIN hWin = pMsg->hWin;
}
/*
*********************************************************************************************************
* 函 数 名: 对话框初始化
* 功能说明: 对话框初始化
* 形 参: pMsg 消息指针
* 返 回 值: 无
*********************************************************************************************************
*/
void InitDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
//
// 配置FrameWin
//
FRAMEWIN_SetFont(hWin,&GUI_Font32B_ASCII);
FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_AddMaxButton(hWin, FRAMEWIN_BUTTON_RIGHT, 1);
FRAMEWIN_AddMinButton(hWin, FRAMEWIN_BUTTON_RIGHT, 2);
FRAMEWIN_SetTitleHeight(hWin,35);
/* 外部的7种字体在文件控件TEXT和按钮控件BUTTON中都使用了,具体调用方法如下,
跟使用emWin自带的字体是一样的。*/
//
// 按钮的字体是4倍抗锯齿,144点阵
//
BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_FontFontSongA144);
//
// 分别用16点阵,32点阵和72点阵字体显示 安富莱电子 五个字。
//
TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT0), GUI_RED);
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_FontFontSong16);
TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT1), GUI_GREEN);
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT1),&GUI_FontFontSong32);
TEXT_SetTextColor(WM_GetDialogItem(hWin,GUI_ID_TEXT2), GUI_BLUE);
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT2),&GUI_FontFontSong72);
//
// 分别用144点阵汉字,144点阵的扩展模式且4倍抗锯齿汉字,144点阵的4倍抗锯齿汉字和
// 144点阵的扩展模式且带边框汉字。
//
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT3),&GUI_FontFontSong144);
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT4),&GUI_FontFontSongExA144);
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT5),&GUI_FontFontSongA144);
TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT6),&GUI_FontFontSongExF144);
}
/*
*********************************************************************************************************
* 函 数 名: _cbCallback
* 功能说明: 对话框回调函数
* 形 参: pMsg 消息指针
* 返 回 值: 无
*********************************************************************************************************
*/
static void _cbCallback(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_PAINT:
PaintDialog(pMsg);
break;
case WM_INIT_DIALOG:
InitDialog(pMsg);
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin, 1);
break;
case GUI_KEY_ENTER:
GUI_EndDialog(hWin, 0);
break;
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (Id)
{
case GUI_ID_OK:
if(NCode==WM_NOTIFICATION_RELEASED)
GUI_EndDialog(hWin, 0);
break;
case GUI_ID_CANCEL:
if(NCode==WM_NOTIFICATION_RELEASED)
GUI_EndDialog(hWin, 0);
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
}
/*
*********************************************************************************************************
* 函 数 名: MainTask
* 功能说明: GUI主函数
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void MainTask(void)
{
/* 初始化 */
GUI_Init();
WM_MULTIBUF_Enable(1);
/* 使能UTF-8编码,这个是第3步中所说的问题,不必限制一定要放在这个位置,使用外部字体之前调用了即可 */
GUI_UC_SetEncodeUTF8();
/* 调用此函数会自动的刷新桌面窗口 */
WM_SetDesktopColor(GUI_WHITE);
/* 创建对话框 */
GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
while(1)
{
GUI_Delay(10);
}
}
通过上面的代码就实现了这7种字体的显示,具体效果可以看实验例程说明。 |