其他分享
首页 > 其他分享> > 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,就可以啦

 

标签:COUNT,烧录,emwin,keil,WM,ID,break,pMsg,GUI
来源: https://www.cnblogs.com/qhz1063196264/p/13390878.html