|
最近在做触摸edit小工具弹出小键盘的事,但是一直没有做成功。具体的实现流程应该是:
1.在界面m触摸edit小工具后直接在界面m的某个指定位置弹出小键盘
2.这个小键盘应该具有“模态”窗口的属性,具体是指只能触摸小键盘区域,窗口m的区域不在支持触摸
3.其他小可爱~
现在的问题就是我在弹出小键盘的时候,能显示小键盘的背景图片跟字符,但就是不能显示小键盘窗口上面的edit框。
然而如果我在创建小键盘窗口的时候如果依次做了删除界面m、创建小键盘窗口、设置背景色、清屏(相当于直接重新创建一个窗口),这时候能显示完全的小键盘,但这是不符合要求的,因为我需要将小键盘显示在界面m上面,不能删除它。具体的现象及部分源代码我会贴在下面,不知道有没有好汉知道这是怎么回事呢?
- void CreateKeyboard(WindowElem window)
- {
- /*
- ** 此函数说明:
- 1.此函数不需要保存LastHwin参数,也不需要删除上一个窗口
- 2.需要保存的是keyboardID,在退出小键盘编辑状态的时候删除这个窗口,并退回之前的窗口
- */
- WM_HWIN hWin;
- //WM_DeleteWindow(LastHwin); //1.删除界面m
- hWin = WM_CreateWindow(window.x, window.y, window.width, window.height, WM_CF_SHOW, NULL, 0);
- //LastHwin = hWin;
- WM_SelectWindow(hWin);
- //GUI_SetBkColor(window.bgkColor); //2.设置清屏的背景色
- //GUI_Clear(); //3.清屏
- }
- void showKeyboard(int WindowID)
- {
- WindowList *we = myWindowList->next;
- NewWindowID = WindowID;
- while (we->data.number != WindowID) we = we->next;
- if (we)
- {
- CreateKeyboard(we->data);
- showKeyboardCell(we->data);
- }
- }
- void showKeyboardCell(WindowElem window)
- {
- /*
- ** 此函数说明:
- 1.使用此函数显示小键盘的按钮、字符、edit、背景图片
- */
- NumberList *numberList = window.num->next;
- ButtonList *buttonList = window.button->next;
- ImageList *imageList = window.image->next;
- StringList *stringList = window.str->next;
- int curCellID = 0, haveFind = 0;
- while (numberList || buttonList || imageList || stringList)
- {
- if (numberList && haveFind == 0)
- {
- if (curCellID == numberList->data.cellID)
- {
- showNumber(*numberList);
- numberList = numberList->next;
- haveFind = 1;
- curCellID++;
- }
- }
- if (buttonList && haveFind == 0)
- {
- if (curCellID == buttonList->data.cellID)
- {
- showButton(*buttonList);
- buttonList = buttonList->next;
- haveFind = 1;
- curCellID++;
- }
- }
- if (imageList && haveFind == 0)
- {
- if (curCellID == imageList->data.cellID)
- {
- showImage(*imageList);
- imageList = imageList->next;
- haveFind = 1;
- curCellID++;
- }
- }
- if (stringList && haveFind == 0)
- {
- if (curCellID == stringList->data.cellID)
- {
- showString(*stringList);
- stringList = stringList->next;
- haveFind = 1;
- curCellID++;
- }
- }
- if (haveFind == 0) curCellID++;
- else haveFind = 0;
- }
- }
- void showNumber(NumberList numberList)
- {
- //显示的字符要跟随寄存器值变化,首先需要获取寄存器值
- DrawEdit(numberList.data.cellID, numberList.data.x, numberList.data.y, numberList.data.width,numberList.data.height,numberList.data.font,numberList.data.fontcolor,numberList.data.fontsize,numberList.data.bgkColor,numberList.data.NumberType,numberList.data.m_numFormat,numberList.data.RegType,numberList.data.RegID,numberList.data.keyboard);
- }
- void DrawEdit(int cellID, int x, int y, int width, int height, int font, int fontColor, int fontSize, int bgkColor, int numberType, int M_numFormat, int RegType, int RegID, int keyboard)
- {
- /*
- ** 函数说明:
- 1.字体暂时使用等宽字体
- 2.显示的格式使用文本,可以使用sprintf函数将数值转换成文本显示出来
- 3.句柄的动态创建通过将cellID的类型强制转换成EDIT_Handle
- 4.将寄存器的值读出来赋给value
- */
- char buf[50];
- char value = 0;
- EDIT_Handle hEdit;
-
- hEdit = EDIT_CreateEx(x, y, width, height, LastHwin, WM_CF_SHOW, 0, cellID, 15); //暂时只支持输入、显示15个字符
- sprintf(buf, "%d", value); //将value转换成字符串的形式,以便使用
- EDIT_SetText(hEdit, buf); //这里需要获取寄存器数值,在此之前还需要使用sprintf函数将数值转换成文本
- EDIT_SetFont(hEdit, &GUI_Font8x16x2x2); //暂时使用这个字体,后期做成宏定义
- EDIT_SetTextColor(hEdit, EDIT_CI_DISABLED, (GUI_COLOR)fontColor);
- EDIT_SetBkColor(hEdit, EDIT_CI_DISABLED, (GUI_COLOR)bgkColor);
- }
复制代码
清屏显示小键盘
未清屏显示小键盘
清屏操作是在函数:- void CreateKeyboard(WindowElem window);
复制代码 内执行的。
我在仿真的时候发现显示edit小工具的函数:- void DrawEdit(int cellID, int x, int y, int width, int height, int font, int fontColor, int fontSize, int bgkColor, int numberType, int M_numFormat, int RegType, int RegID, int keyboard);
复制代码 已经进入,并且传入的参数均是有值的。
现在是真的不知道究竟是怎么回事导致edit无法在界面m显示,求好汉相告...感激不尽! |
|