emWin对话框接收不到自定义消息

自定义消息接收问题
本文介绍了解决在GUI应用中创建对话框后无法接收自定义消息的问题。通过正确设置回调函数及向客户端窗口句柄发送消息的方式,确保了自定义消息能够被正常处理。

在使用自定义消息时,使用GUI_CreateDialogBox()创建对话框后,无法接收到发送的自定义消息。
解决方法:
1. 创建页面成功后,获取到句柄,再调用WM_SetCallback()设置回调函数,则能成功接收到消息。
2. 需要先调用WM_GetClientWindow()得到客户端窗口的句柄,然后把消息发送给这个句柄。

如下:

void _SendKeyvalue(char *pStr)
{
    WM_MESSAGE Message;
    Message.MsgId =  MSG_KEY_DOWN;
    Message.Data.p = pStr;
    WM_SendMessage(WM_GetClientWindow(DialogWin),&Message);
    WM_InvalidateWindow(DialogWin);
}
WM_HWIN CreateFramewin(void) {

  DialogWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  WM_SetCallback(DialogWin,_cbDialog);
}
static void _cbDialog (WM_MESSAGE* pMsg) { WM_HWIN hItem; int NCode = 0; int Id; HWND hListview; switch (pMsg->MsgId) { case WM_INIT_DIALOG : BeginDraw (); hItem = WM_GetDialogItem (pMsg->hWin, ID_LISTVIEW_0); LISTVIEW_AddColumn (hItem, 20, "1", GUI_TA_LEFT); LISTVIEW_AddColumn (hItem, 280, "2", GUI_TA_LEFT); LISTVIEW_SetHeaderHeight (hItem, 0); LISTVIEW_SetGridVis (hItem, 0); int FontHeight = GUI_GetFontDistY (); WIDGET_SetEffect (hItem, &WIDGET_Effect_None); LISTVIEW_SetRowHeight (hItem, FontHeight + 13); LISTVIEW_SetFont (hItem, GUI_FONT_16_ASCII); for (int i = 0; i < GUI_COUNTOF (main_text); i++) { LISTVIEW_AddRow (hItem, NULL); LISTVIEW_SetItemText (hItem, 0, i, main_text[i][0]); LISTVIEW_SetItemText (hItem, 1, i, main_text[i][1]); } hItem = WM_GetDialogItem (pMsg->hWin, ID_BUTTON_0); BUTTON_SetFont (hItem, GUI_FONT_13_ASCII); BUTTON_SetText (hItem, "[SELECT]"); BUTTON_SetFrameColor (hItem, GUI_WHITE); BUTTON_SetBkColor (hItem, BUTTON_CI_PRESSED, GUI_WHITE); BUTTON_SetBkColor (hItem, BUTTON_CI_UNPRESSED,GUI_WHITE); BUTTON_SetFocusColor (hItem, GUI_WHITE); //hItem = WM_GetClientWindow(pMsg->hWin); //WM_InvalidateWindow (hItem); break; case WM_PAINT: EndDraw (); hItem = pMsg->hWin; GUI_SetBkColor (GUI_WHITE); GUI_Clear (); const GUI_FONT* pOldFont = GUI_GetFont (); GUI_SetFont (&GUI_Font32B_ASCII); GUI_SetColor (GUI_BLACK); GUI_SetTextMode (GUI_TM_TRANS); GUI_DispStringAt ("SYSTEM MAINTAIN MAIN MENU", 0, 0); GUI_SetFont (pOldFont); EndDraw (); break; case WM_NOTIFY_PARENT: Id = WM_GetId (pMsg->hWinSrc); NCode = pMsg->Data.v; switch (Id) { case ID_LISTVIEW_0: switch (NCode) { case WM_NOTIFICATION_CLICKED: break; case WM_NOTIFICATION_RELEASED: break; case WM_NOTIFICATION_SEL_CHANGED: break; } break; case ID_BUTTON_0: switch (NCode) { case WM_NOTIFICATION_CLICKED: break; case WM_NOTIFICATION_RELEASED: hListview = WM_GetDialogItem (pMsg->hWin, ID_LISTVIEW_0); int Sel = LISTVIEW_GetSel (hListview); if (Sel < 0 || Sel > 12) break; LISTVIEW_DeleteAllRows (hListview); (is_main == 0) ? _select_main (Sel, hListview) : _select_next (Sel, hListview); break; default: WM_DefaultProc (pMsg); return; } break; } break; default: WM_DefaultProc (pMsg); break; } }
最新发布
10-17
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值