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,就可以啦