初级会员
- 积分
- 183
- 金钱
- 183
- 注册时间
- 2015-7-16
- 在线时间
- 51 小时
|
10金钱
最近在做触摸edit小工具弹出小键盘的事,但是一直没有做成功。具体的实现流程应该是:1.在界面m触摸edit小工具后直接在界面m的某个指定位置弹出小键盘
2.这个小键盘应该具有“模态”窗口的属性,具体是指只能触摸小键盘区域,窗口m的区域不在支持触摸
3.其他小可爱~
现在的问题就是我在弹出小键盘的时候,能显示小键盘的背景图片跟字符,但就是不能显示小键盘窗口上面的edit框。
然而如果我在创建小键盘窗口的时候如果依次做了删除界面m、创建小键盘窗口、设置背景色、清屏(相当于直接重新创建一个窗口),这时候能显示完全的小键盘,但这是不符合要求的,因为我需要将小键盘显示在界面m上面,不能删除它。具体的现象及部分源代码我会贴在下面,不知道有没有好汉知道这是怎么回事呢?
[mw_shl_code=applescript,true]void CreateKeyboard(WindowElem window)
{
/*
** 此函数说明:
1.此函数不需要保存LastHwin参数,也不需要删除上一个窗口
2.需要保存的是keyboardID,在退出小键盘编辑状态的时候删除这个窗口,并退回之前的窗口
*/
WM_HWIN hWin;
//WM_DeleteWindow(LastHwin); //1.删除原窗口
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);
}
}[/mw_shl_code]
[mw_shl_code=applescript,true]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;
}
}[/mw_shl_code]
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);
}
|
-
未清屏
-
清屏
最佳答案
查看完整内容[请看2#楼]
已经自行解决,函数:
[mw_shl_code=applescript,true]EDIT_CreateEx(x, y, width, height, LastKeyboard, WM_CF_SHOW, 0, cellID, 15);[/mw_shl_code]
参数LastKeyboard给错了。
|