版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
说到EmWin显示文本,大概就是设置字体大小,设置背景颜色,清屏(背景颜色更新),设置文本颜色,设置文字显示格式,再就是显示了:
GUI_SetFont(&GUI_Font8x16);
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_RED);
GUI_SetTextMode(GUI_TM_NORMAL);
GUI_DispStringAt("I AM A STRING FOR TEST",0,200);
如果您要是不需要太精细的控制,甚至就一句显示,也成:
GUI_DispStringAt("I AM A STRING FOR TEST",0,200);
到了Button控制显示文字我也没觉得会有什么不同,无非就是在回调函数里面按钮按下的那种情况下displaystring
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
GUI_SetFont(&GUI_Font8x16);
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_RED);
GUI_SetTextMode(GUI_TM_NORMAL);
GUI_DispStringAt("I AM A STRING FOR TEST",0,200);
break;
case WM_NOTIFICATION_RELEASED:
break;
}
现象如下,按下了button,背景颜色没变,没有文本显示:
查资料和手册发现,绘制的对象,不是当前的显示窗口,而是“画板”,但是需要占用当前的窗口,所以在绘制之前,保存原窗口,绘制之后,打开原窗口,就把画板绘制到窗口上。这样就显示了:
回调函数先加一个hWinOld:
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem,hWinOld;
int NCode;
int Id;
然后就是“保存原窗口”,画板绘制,显示经过“画板”变化的原窗口:
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
hWinOld = WM_SelectWindow(WM_GetClientWindow(pMsg->hWin));
GUI_DispStringAt("I AM A STRING FOR TEST",150,200);
/* 配置回之前选择的目标窗口 */
WM_SelectWindow(hWinOld);
break;
case WM_NOTIFICATION_RELEASED:
break;
}