1. 在資源文件中添加字體庫資源

2. 配置MiniguiCfg文件

3. 添加字體

4. 打開字體文件

5. 輸出文字


6. 使用完畢,回收資源

命名規則參見《MINIGUI-USER-MANUAL-V3.0》,3.1.5 小節。
參考:
https://blog.csdn.net/10km/article/details/81106793
https://blog.csdn.net/10km/article/details/81114067
附:
#include "list_function_view.h"
static ListFunctionView *listFunctionData = NULL;
static PLOGFONT mFont_SimSun20;
static PLOGFONT mFont_SimSun30;
static const char *kaiti[] =
{
"背包",
"浴巾",
"雪紡",
"童裝",
"襯衫"
};
#define __ID_TIMER_SLIDER 100
static int ListFunctionViewProc(HWND hwnd, int message, WPARAM wParam,
LPARAM lParam) {
//HDC hdc;
switch (message) {
case MSG_CREATE:
mFont_SimSun20 = CreateLogFont("ttf", "simkai", "UTF-8",
FONT_WEIGHT_BOOK, FONT_SLANT_ROMAN,
FONT_FLIP_NIL, FONT_OTHER_AUTOSCALE,
FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 50, 2700);
mFont_SimSun30 = CreateLogFont("ttf", "simkai", "UTF-8",
FONT_WEIGHT_BOOK, FONT_SLANT_ROMAN,
FONT_FLIP_NIL, FONT_OTHER_AUTOSCALE,
FONT_UNDERLINE_NONE, FONT_STRUCKOUT_NONE, 60, 2700);
return 0;
case MSG_PAINT: {
HDC hdc = BeginPaint(hwnd);
RECT rect;
GetClientRect(hwnd, &rect);
SetBkMode(hdc, BM_TRANSPARENT);
SetTextColor(hdc, RGB2Pixel(HDC_SCREEN, 255, 255, 255));
SelectFont(hdc, mFont_SimSun20);
/* Zoom out on other items */
if (listFunctionData->currentIndex - 1 >= 0 &&\
listFunctionData->listFunctionImg[listFunctionData->currentIndex - 1].bmBits)
{
FillBoxWithBitmap(hdc, 0, 30, 45, 120,
&listFunctionData->listFunctionImg[listFunctionData->currentIndex
- 1]);
TextOut(hdc, 50, 80, kaiti[listFunctionData->currentIndex - 1]);
}
/* Zoom out on other items */
if (listFunctionData->currentIndex + 1 <= 4
&& listFunctionData->listFunctionImg[listFunctionData->currentIndex
+ 1].bmBits) {
FillBoxWithBitmap(hdc, 195, 30, 45, 120,
&listFunctionData->listFunctionImg[listFunctionData->currentIndex
+ 1]);
TextOut(hdc, 240, 80, kaiti[listFunctionData->currentIndex
+ 1]);
}
if (listFunctionData->currentIndex >= 0
&& listFunctionData->listFunctionImg[listFunctionData->currentIndex].bmBits) {
FillBoxWithBitmap(hdc, 90, 10, 0, 0,
&listFunctionData->listFunctionImg[listFunctionData->currentIndex]);
SelectFont(hdc, mFont_SimSun30);
TextOut(hdc, 150, 65, kaiti[listFunctionData->currentIndex]);
}
/* Draw yellow line */
SetBrushColor(hdc, RGB2Pixel(HDC_SCREEN, 255, 179, 9));
FillBox(hdc, 0, 0, rect.right, 2);
/* Draw gray line */
int selectWidth = rect.right / (listFunctionData->listSize - 1)
* listFunctionData->currentIndex;
SetBrushColor(hdc, PIXEL_darkgray);
FillBox(hdc, rect.right - selectWidth, 0, selectWidth, 2);
EndPaint(hwnd, hdc);
return 0;
}
case MSG_LIST_FUNCTION_SELECT_UPDATE: {
sm_debug("%d\n", wParam);
switch (wParam) {
case CVR_KEY_MODE:
if (listFunctionData->currentIndex < 4) {
listFunctionData->currentIndex++;
//UpdateWindow(hwnd, TRUE);
BroadcastMessage(MSG_LIST_FUNCTION_SELECT_CHANGE,
GetDlgCtrlID(hwnd),
(LPARAM) listFunctionData->currentIndex);
}
break;
case CVR_KEY_MENU:
if (listFunctionData->currentIndex > 0) {
listFunctionData->currentIndex--;
//UpdateWindow(hwnd, TRUE);
BroadcastMessage(MSG_LIST_FUNCTION_SELECT_CHANGE,
GetDlgCtrlID(hwnd),
(LPARAM) listFunctionData->currentIndex);
}
break;
}
break;
}
case MSG_DESTROY: {
if (listFunctionData != NULL) {
int i;
for (i = 0; i < listFunctionData->listSize; i++) {
unloadBitMap(&listFunctionData->listFunctionImg[i]);
}
free(listFunctionData);
listFunctionData = NULL;
}
DestroyLogFont(mFont_SimSun20);
DestroyLogFont(mFont_SimSun30);
return 0;
}
}
return DefaultControlProc(hwnd, message, wParam, lParam);
}
static ListFunctionView* ListFunctionDataInit(
ListFunctionView *listFunctionData) {
listFunctionData = (ListFunctionView*) malloc(sizeof(ListFunctionView));
if (NULL == listFunctionData) {
sm_error("malloc ListFunctionView data error\n");
}
memset((void *) listFunctionData, 0, sizeof(ListFunctionView));
listFunctionData->listSize = 6;
int i = 0;
for (i = 0; i < listFunctionData->listSize; i++) {
setCurrentIconValue(ID_LIST_FUNCTION_IMG, i);
getResBmp(ID_LIST_FUNCTION_IMG, BMPTYPE_BASE,
&listFunctionData->listFunctionImg[i]);
}
return listFunctionData;
}
HWND ListFunctionViewInit(HWND hParent) {
HWND mHwnd;
smRect rect;
getResRect(ID_LIST_FUNCTION_AREA, &rect);
listFunctionData = ListFunctionDataInit(listFunctionData);
mHwnd = CreateWindowEx(LIST_FUNCTION_VIEW, "",
WS_CHILD | WS_VISIBLE, WS_EX_TRANSPARENT, 0, rect.x, rect.y, rect.w, rect.h,
hParent, 0);
if (mHwnd == HWND_INVALID) {
return HWND_INVALID;
}
return mHwnd;
}
BOOL RegisterListFunctionView() {
WNDCLASS MyClass;
MyClass.spClassName = LIST_FUNCTION_VIEW;
MyClass.dwStyle = WS_NONE;
MyClass.dwExStyle = WS_EX_NONE;
MyClass.hCursor = GetSystemCursor(0);
MyClass.iBkColor = PIXEL_black;
MyClass.WinProc = ListFunctionViewProc;
return RegisterWindowClass(&MyClass);
}
void UnregisterListFunctionView(void) {
UnregisterWindowClass(LIST_FUNCTION_VIEW);
}
