关于韩语异常显示的问题
htk719809837 opened this issue · 5 comments
你好,在使用中发现韩语存在两个问题,比较紧急,希望能够帮忙尽快修复
1、Minigui 3.0.12 使用韩语:static控件,设置部分文本时(多行),行尾最后一个字会出现乱码现象,下一行的第一个字也会出现乱码,文本对齐方式为 同时顶部和左部对齐、水平垂直居中都会出现。
2、Minigui 3.0.12 / 5.0.11 使用韩语发现:韩文尾部混合英文字母的时候(单行),使用drawtext进行绘制文本时,尾部字母没有正常显示出来。将该尾部字母移动到行首时,又可以正常显示,文本对齐方式为左对齐。
收到。请提供可重现问题的源代码。
#include <stdio.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <time.h>
#include <sys/time.h>
#define MSG_TIMER_START (0x900)
static PLOGFONT caption_font;
static LRESULT HelloWinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND button;
HWND hWnd1;
switch (message) {
case MSG_CREATE:
hWnd1 = CreateWindowEx(CTRL_STATIC,
"비밀번호 재설정 기능이 잠겼습니다.....30A1분 후 시도하십시오.",
WS_VISIBLE | SS_CENTER,
WS_EX_TRANSPARENT,
111,
65,
50,
355,
64,
hWnd,0);
caption_font= CreateLogFont("ttf", "vgaoem", "UTF-8",
FONT_WEIGHT_REGULAR,
FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,
FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE,
FONT_STRUCKOUT_NONE, 18, 0);
SetWindowFont(hWnd1, caption_font);
SetWindowElementAttr(hWnd1, WE_FGC_WINDOW, 0x00ff00);
break;
case MSG_CLOSE:
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
break;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
int MiniGUIMain (int argc, const char* argv[])
{
MSG Msg;
HWND hMainWnd;
MAINWINCREATE CreateInfo;
JoinLayer(NAME_DEF_LAYER , "timer" , 0 , 0);
CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
CreateInfo.dwExStyle = WS_EX_NONE;
CreateInfo.spCaption = "Hello, world";
CreateInfo.hMenu = 0;
CreateInfo.hCursor = GetSystemCursor(0);
CreateInfo.hIcon = 0;
CreateInfo.MainWindowProc = HelloWinProc;
CreateInfo.lx = 0;
CreateInfo.ty = 0;
CreateInfo.rx = 600;
CreateInfo.by = 600;
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.dwAddData = 0;
CreateInfo.hHosting = HWND_DESKTOP;
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID)
return -1;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while (GetMessage(&Msg, hMainWnd)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MainWindowThreadCleanup (hMainWnd);
return 0;
}
以上是问题一的复现代码,使用不等宽字体,在32位的环境下,5.0.11版本,(和#116 问题单的环境一样),若无法复现,可稍微调整韩语中间字母、数字和标点的数量,以及控件的宽度,即可复现
收到。我们尽快处理。
已处理,原因是文本中包含有 0x001E 控制字符,这类字符在渲染时将被忽略。rel-3-0 分支上也做了同步处理。