硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4297|回复: 2
收起左侧

[emWin] [已解决]如何通过自定义按键消息在对话框回调函数中创建EDIT控件

[复制链接]

4

主题

11

回帖

4

积分

新手上路

积分
4
发表于 2015-6-29 20:46:20 | 显示全部楼层 |阅读模式
尝试着通过自定义按键消息在对话框回调函数中创建EDIT控件(代码如下),在对话框回调函数中接收到自定义按键消息后能在串口打印出编号1(50行)处的提示信息,但下面的代码运行后屏幕上不出现EDIT_CreateEx函数创建的EDIT控件,一开始怀疑是编号2(58行)处的窗口无效化语句没加,但加上后仍然不显示。是我对EDIT_CreateEx函数的使用方式不对么?求教~

  1. static GUI_WIDGET_CREATE_INFO edit_window[] =
  2. {
  3.     {WINDOW_CreateIndirect, "", 0, 0, 0, 480, 272, 0, 0, 0},
  4.     {TEXT_CreateIndirect, NULL, GUI_ID_TEXT0, TIPS_POSITION_X, TIPS_POSITION_Y,  400, 30, 0, 0},
  5.     {EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, TEXT_POSITION_X1 + 120, TEXT_POSITION_Y - 4,                                        200, 30, 0, 0x0, 0},
  6.     {EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, TEXT_POSITION_X1 + 120, TEXT_POSITION_Y - 4 + TEXT_SIZE_Y + TEXT_SPACE_Y - 4,       200, 30, 0, 0x0, 0},
  7.     {EDIT_CreateIndirect, NULL, GUI_ID_EDIT2, TEXT_POSITION_X1 + 120, TEXT_POSITION_Y - 4 + (TEXT_SIZE_Y + TEXT_SPACE_Y - 4) * 2, 200, 30, 0, 0x0, 0},
  8.     {EDIT_CreateIndirect, NULL, GUI_ID_EDIT3, TEXT_POSITION_X1 + 120, TEXT_POSITION_Y - 4 + (TEXT_SIZE_Y + TEXT_SPACE_Y - 4) * 3, 200, 30, 0, 0x0, 0},
  9.     {EDIT_CreateIndirect, NULL, GUI_ID_EDIT4, TEXT_POSITION_X1 + 120, TEXT_POSITION_Y - 4 + (TEXT_SIZE_Y + TEXT_SPACE_Y - 4) * 4, 200, 30, 0, 0x0, 0},
  10.     {EDIT_CreateIndirect, NULL, GUI_ID_EDIT5, TEXT_POSITION_X1 + 120, TEXT_POSITION_Y - 4 + (TEXT_SIZE_Y + TEXT_SPACE_Y - 4) * 5, 200, 30, 0, 0x0, 0},
  11.     {BUTTON_CreateIndirect, NULL, GUI_ID_BUTTON0, 400, 60, 65, 30, 0, 0}
  12. };
  13. static EDIT_Handle s_flow_edit_handle;
  14. int main()
  15. {
  16.     /** emWin初始化 */
  17.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);
  18.     GUI_Init();
  19.     WM_SetCreateFlags(WM_CF_MEMDEV);
  20.     GUI_CreateDialogBox(edit_window, GUI_COUNTOF(edit_window), edit_cb, 0, 0, 0);
  21.     while (1)
  22.     {
  23.         GUI_Delay(10);
  24.     }
  25. }
  26. static void edit_cb(WM_MESSAGE *pMsg)
  27. {
  28.     WM_HWIN hWin;
  29.     WM_HWIN hWinSrc;
  30.     hWin    = pMsg->hWin;
  31.     hWinSrc = pMsg->hWinSrc;
  32.     switch (pMsg->MsgId)
  33.     {
  34.         case WM_INIT_DIALOG:
  35.             /** 控件初始化 */
  36.             break;
  37.         case WM_PAINT:
  38.             /** 绘制一些背景线条 */
  39.             break;
  40.         case WM_KEY:
  41.             switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
  42.             {
  43.                 case USER_KEY_ENTER:                                 /**< 自定义按键消息 */
  44.                     rt_kprintf("Create the flow 1 edit\n");          /**< 编号 1 */
  45.                     /** 创建编辑框 */
  46.                     s_flow_edit_handle = EDIT_CreateEx(350, i, 60, 30, hwin, WM_CF_SHOW, 0, GUI_ID_EDIT6, 3);
  47.                     EDIT_SetFont(s_flow_edit_handle, TITLE_FONT);
  48.                     EDIT_SetFocussable(s_flow_edit_handle, 0);
  49.                     EDIT_SetTextAlign(s_flow_edit_handle, GUI_TA_VCENTER | GUI_TA_CENTER);
  50.                     WM_DisableWindow(s_flow_edit_handle);
  51.                     EDIT_SetDecMode(s_flow_edit_handle, (long)345, 0, 999, 0, GUI_EDIT_NORMAL);
  52.                     //WM_InvalidateWindow(WM_GetClientWindow(hWin)); /**< 编号2 */
  53.                     break;
  54.             }
  55.             break;
  56.     }
  57.     default:
  58.         WM_DefaultProc(pMsg);
  59. }
复制代码

解决:早上起来再看上面的代码发现原来是个粗心的错误,52行代码中有个局部变量i,这个i的值在自定义的USER_KEY_ENTER消息中是未定义的,导致EDIT_CreateEx函数创建的EDIT控件坐标超出了屏幕的显示范围。Orz...
这也提示我
作为接口的使用者不应该依赖接口内部的参数合法性检验(万一就没有检验呢?),尽量保证传入参数的合法性。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2015-6-30 11:45:05 | 显示全部楼层
不好意思楼主,昨晚和今天都有事情不能及时回复你.
解决了就好
[s:151]
回复

使用道具 举报

4

主题

11

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2015-7-3 10:51:38 | 显示全部楼层

回 eric2013 的帖子

eric2013:不好意思楼主,昨晚和今天都有事情不能及时回复你.
解决了就好
[s:151]  (2015-06-30 11:45) 
恩,粗心的问题也不该耽误版主时间[s:149]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 15:22 , Processed in 0.351420 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表