|

楼主 |
发表于 2017-5-18 17:26:04
|
显示全部楼层
好的,谢谢。
看了,还是没看出来为什么第一排和后三排的按键会有区别。我把相关的代码贴出来,麻烦各位给分析分析,看看到底问题在哪。代码是在《第9期:全键盘拼音输入法界面设计》的基础上裁剪的。
static void _cbKeyPad(WM_MESSAGE * pMsg)
{
WM_HWIN hWin;
WM_HWIN hButton;
int Id;
int NCode;
int xSize;
int ySize;
unsigned i;
hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
/* 创建所需的按钮 */
case WM_CREATE:
for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
{
hButton = BUTTON_CreateEx(_aButtonData.xPos, _aButtonData.yPos, _aButtonData.xSize, _aButtonData.ySize,
hWin, WM_CF_SHOW, 0, ID_BUTTON + i);
BUTTON_SetFont(hButton, &GUI_Font16B_ASCII);
BUTTON_SetText(hButton, _aButtonData.acLabel);
BUTTON_SetFocussable(hButton, 0);
}
break;
/* 绘制背景 */
case WM_PAINT:
xSize = WM_GetWindowSizeX(hWin);
ySize = WM_GetWindowSizeY(hWin);
GUI_SetColor(COLOR_BORDER);
GUI_DrawRect(0, 0, xSize - 1, ySize - 1);
GUI_DrawGradientV(1, 1, xSize - 2, ySize - 2, COLOR_KEYPAD0, COLOR_KEYPAD1);
break;
/* 用于处理按钮的消息 */
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (NCode)
{
case WM_NOTIFICATION_RELEASED:
if (_aButtonData[Id - ID_BUTTON].acLabel)
{
/* 第一步:实现字母大小写的切换 *******************************************/
if(strncmp((const char *)_aButtonData[Id - ID_BUTTON].acLabel, "Caps", sizeof(_aButtonData[Id - ID_BUTTON].acLabel)) == 0)
{
/* 当前是小写,切换到大写,必须在英文模式下实现大小写切换*/
if((s_CapsLock == 0)&&(s_SelectLangue == 1))
{
for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
{
BUTTON_SetText(WM_GetDialogItem(hWin, ID_BUTTON + i), _aButtonData.acLabel1);
}
s_CapsLock = 1;
}
else if((s_CapsLock == 1)&&(s_SelectLangue == 1))
{
for (i = 0; i < GUI_COUNTOF(_aButtonData); i++)
{
BUTTON_SetText(WM_GetDialogItem(hWin, ID_BUTTON + i), _aButtonData.acLabel);
}
s_CapsLock = 0;
}
/* 功能键处理完要退出 */
break;
}
/* 第三步:字母大小写的识别 ********************************************/
if(s_CapsLock == 0)
{
s_Key = _aButtonData[Id - ID_BUTTON].acLabel[0];
}
/* 大写字母 */
else
{
s_Key = _aButtonData[Id - ID_BUTTON].acLabel1[0];
}
/* 字符显示*******************************************************************/
/* 点击回车键 */
if(strncmp((const char *)_aButtonData[Id - ID_BUTTON].acLabel, "Enter", sizeof(_aButtonData[Id - ID_BUTTON].acLabel)) == 0)
{
WM_DeleteWindow(hItem_Keyboard);
break;
}
if(strncmp((const char *)_aButtonData[Id - ID_BUTTON].acLabel, "Back", sizeof(_aButtonData[Id - ID_BUTTON].acLabel)) == 0)
{
MULTIEDIT_AddKey(hItem_edit,GUI_KEY_BACKSPACE);
}
/* 其它按键,但不能是功能键 */
if(_aButtonData[Id - ID_BUTTON].Control == 0)
{
s_Textbuf[0] = s_Key;
s_Textbuf[1] = '\\0';
MULTIEDIT_AddText(hItem_edit,s_Textbuf);
}
}
break;
}
}
} |
|