1. 程式人生 > 實用技巧 >emwin顯示漢字使用vs studio模擬和使用keil編寫燒錄的不同

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