emwin显示汉字使用vs studio仿真和使用keil编写烧录的不同
我用emwin是在新唐的开发板上练习的,所有我就去官网下了开发板的资料,别的开发板应该也有对应的资料,这些软件网上应该很容易搜得到
然后用GUIBuilder构建一个界面,再用FontArchitect生成自己想要的中文字库,(还没看到这个工具之前我是用网上下的的FontCvt,功能差不多) emwin是不支持显示中文,很不友好
先上代码,
1 #include "DIALOG.h" 2 #include “GUI.h” 3 extern GUI_CONST_STORAGE GUI_FONT GUI_Fontfont16;
4 #define ID_WINDOW_MAIN_WINDOWS (GUI_ID_USER + 0x00)
5 #define ID_FRAMEWIN_BRIDGE (GUI_ID_USER + 0x01)
6 #define ID_FRAMEWIN_VIEW_COUNT (GUI_ID_USER + 0x02)
7 #define ID_FRAMEWIN_VIEW_COUNT (GUI_ID_USER + 0x02)
8 #define ID_FRAMEWIN_PARAMETER_SECTOR (GUI_ID_USER + 0x03)
9 #define ID_FRAMEWIN_KEY_BOARD (GUI_ID_USER + 0x04)
10
11
12 static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
13 { FRAMEWIN_CreateIndirect, "Count", ID_FRAMEWIN_VIEW_COUNT, 0, 0, WINDOWS_SIZE_X, WINDOWS_SIZE_Y, 0, 0, 0 },
14 { TEXT_CreateIndirect, "Text", ID_TEXT_SHOW_ALL_COUNT, 15, 82, 80, 20, 0, 0, 0 },
15 { EDIT_CreateIndirect, "Edit", ID_EDIT_SHOW_COUNT_NUM, 123, 78, 87, 26, 0, 100, 0 },
16 { BUTTON_CreateIndirect, "return", ID_BUTTON_RETURN_COUNT, 230, 10, 61, 30, 0, 0, 0 },
17 };
18 /*********************************************************************
19 * 20 * _cbDialog 21 */ 22 static void _cbDialog(WM_MESSAGE * pMsg) { 23 WM_HWIN hItem; 24 int Id, NCode;27 GUI_UC_SetEncodeUTF8(); 28 29 switch (pMsg->MsgId) { 30 case WM_INIT_DIALOG: 31 // 32 // Initialization of 'Edit' 33 // 34 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_SHOW_ALL_COUNT); 35 TEXT_SetFont(hItem, &GUI_Fontfont16); 36 TEXT_SetText(hItem, "总张数\n"); 37 38 hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_SHOW_COUNT_NUM); 39 EDIT_SetText(hItem, "0"); 40 break; 41 case WM_NOTIFY_PARENT: 42 Id = WM_GetId(pMsg->hWinSrc); 43 NCode = pMsg->Data.v; 44 switch(Id) { 45 case ID_EDIT_SHOW_COUNT_NUM: // Notifications sent by 'Edit' 46 switch(NCode) { 47 case WM_NOTIFICATION_RELEASED: 48 49 break; 50 } 51 break; 52 case ID_BUTTON_RETURN_COUNT: // Notifications sent by 'return' 53 switch(NCode) { 54 case WM_NOTIFICATION_RELEASED: 55 WM_DeleteWindow(pMsg->hWin); 56 break; 57 } 58 break; 59 } 60 break; 61 default: 62 WM_DefaultProc(pMsg); 63 break; 64 } 65 } 66 67 /********************************************************************* 68 * 69 * CreateCount 70 */ 71 WM_HWIN CreateCount(void) { 72 WM_HWIN hWin; 73 74 hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, WM_HBKWIN, 0, 0); 75 return hWin; 76 } 77 78 79 /*************************** End of file ****************************/
80
以上步骤keil和vs studio都是相同的
其中有几个点需要注意:
1、keil的文件最后一行必须要从头开始,不然会报错..\Application\SectorDLG.c(195): warning: #1-D: last line of file ends without a newline。 vs studio不会
2、keil的换行是\n,vs仿真的换行是\r\n,但是vs如果你想要显示的汉字个数为奇数个时,就必须在显示的最后面加个英文符号,或者加个\n,这个\n不会换行,也不会有其他作用(代码第36行就是为了避免奇数个中文的错误,如果是偶数个汉字就没这个问题了)
错误 C2001 常量中有换行符 SimulationTrial d:\setup\emwin\seggereval_win32_msvc_mingw_gui_v548\application\countdlg.c 36 和
错误 C2146 语法错误: 缺少“)”(在标识符“hItem”的前面) SimulationTrial d:\setup\emwin\seggereval_win32_msvc_mingw_gui_v548\application\countdlg.c 38
如果这个时候你的汉字还是显示不出来,记得把这个显示汉字的文件用记事本打开,另存为的时候保存为utf-8,就可以啦