📄 imehandwrite.c
字号:
}
else if (*pEvent == EVENT_PENMOVE) {
switch(nPressedKey) {
case HW_INPUTBOX_HANDWRITE:{
if ((g_nPressedKey == HW_INPUTBOX_HANDWRITE))
{
switch (g_hwManageData.szHwAction) {
case HW_ACT_IDLE:{ //在空闲状态下
HwNewStroke(dwMsgX, dwMsgY);
break;
}
case HW_ACT_WRITING:{ //在写的过程中
//继续写入笔迹点(同一笔迹还没有结束)
HwInputStroke(dwMsgX, dwMsgY);
break;
}
case HW_ACT_STROKEEND:{ //前一笔迹已经结束
//在同一窗口中,则在同一窗口中输入新的笔迹
HwNewStroke(dwMsgX, dwMsgY);
break;
}
case HW_ACT_FULLEND:{ //当输入缓冲区已经满了
// if (HwCheckDotArea(dwMsgX, dwMsgY, 1 - g_byHwCurBox))
// {
// //只能在另一窗口中输入新的笔迹
// HwSwitchBox(dwMsgX, dwMsgY);
// }
break;
}
default:
break;
}
bClearMsg = TRUE;
}
break;
}
case HW_INPUTBOX_CHARSELECTED:
break;
case HW_INPUTBOX_BACKSPACE:
case HW_INPUTBOX_SPACE:
case HW_INPUTBOX_ENTER:
case HW_INPUTBOX_CHINESE:
case HW_INPUTBOX_NUMBER:
case HW_INPUTBOX_SYMBOL:
case HW_INPUTBOX_ENGLISH:{
g_nPressedKey = nPressedKey;
GraphInvertRect(g_hwManageData.inputBox[i].rect.x,g_hwManageData.inputBox[i].rect.y,
g_hwManageData.inputBox[i].rect.width,g_hwManageData.inputBox[i].rect.height);
break;
}
}
}
else if (*pEvent == EVENT_PENUP) {
switch(nPressedKey) {
case HW_INPUTBOX_HANDWRITE:{
break;
}
case HW_INPUTBOX_CHARSELECTED:{
break;
}
case HW_INPUTBOX_BACKSPACE:{
*pEvent = EVENT_KEY;
*pParam = MVK_BACKSPACE;
break;
}
case HW_INPUTBOX_ENTER:{
*pEvent = EVENT_KEY;
*pParam = MVK_ENTER;
break;
}
case HW_INPUTBOX_SPACE:{
*pEvent = EVENT_CHAR;
*pParam = MVK_SPACE;
break;
}
case HW_INPUTBOX_CHINESE:
case HW_INPUTBOX_NUMBER:
case HW_INPUTBOX_SYMBOL:
case HW_INPUTBOX_ENGLISH:{
g_hwManageData.szHwType = nPressedKey - HW_INPUTBOX_CHINESE;
break;
}
default:
break;
}
if(g_hwManageData.szHwAction == HW_ACT_WRITING){
//结束一笔,并将笔迹数据写入对应的缓冲区
HwToStenoBuffer(g_hwManageData.wHwStroke);
g_hwManageData.szHwAction = HW_ACT_STROKEEND;
// TimerStartTimer(g_hwManageData.hHwTimer);
}
g_nPressedKey = NOTHING;
}
if (g_mInputBox.refresh) {
// _DrawHandWriteBox();
}
if (bClearMsg) {
*pEvent = EVENT_NOTHING;
}
#endif
return 0;
}
/*************************************************************************/
/* FUNCTION: _HandWriteHandleEvent */
/* DESCRIPTION:手写输入法事件处理函数 */
/* INPUTS: NONE */
/* OUTPUTS: NONE */
/*************************************************************************/
/* NAME DATE REMARKS */
/* ========== ============ ===========================================*/
/* LiangRuhui 2007-09-24 创建初始版本 */
/*************************************************************************/
INT _HandWriteHandleEvent(IMEGUI_STRUCT *pApGui,UINT *pEvent,UINT *pParam)
{
INT ret = 0;
#if 0
if ((*pEvent == EVENT_PENDOWN) || (*pEvent == EVENT_PENMOVE) ||
(*pEvent == EVENT_PENUP))
{
return _HWHandlePenEvent(pEvent,pParam);
}
switch(*pEvent) {
case EVENT_IME:
if (*pParam == CM_HW_BUFFER_OK) {
UINT8* pStenoPtr;
int nLength;
// UINT16 whichBox;
// whichBox = *pParam;
g_hwManageData.szHwAction = HW_ACT_FULLEND;
// g_szHwAction[whichBox] = HW_ACT_FULLEND;
pStenoPtr = g_hwManageData.pHwStenoBuf;//g_szHwStenoPtr[whichBox];
nLength = *(UINT32*)pStenoPtr + SIGN_SIZE;
memmove(g_hwManageData.pHwBuffer, pStenoPtr + 4, nLength);
// HwRecognize(whichBox, pStenoPtr);
return 0;
}
else if (*pParam == CM_HW_RECOGNIZED) {
// UINT8 *pData = (UINT8 *)pEvent->pvInfoPtr;
g_mInputBox.state = IM_INPUT_ZC;
g_hwManageData.szHwAction = HW_ACT_IDLE;
HwClearBox(/*pEvent->yParam*/);
if (!_ImGetAssociation(MAKEWORD(*(pData + 1), *pData))) {
g_pIMEWordNum = 0;
}
_IMEDrawGraph(IME_HANDWRITE);
return 0;
}
else if (*pParam == CM_HW_ASSOCIATION) {
//如果有选择字符的操作,则要将光标向后移
UINT wLine, wRow, wTempLine, wTempRow, wCharLen;
UINT16 data = (UINT16)pEvent->yParam;
MEdit *hEditCtrl = (MEdit *)pEvent->pvInfoPtr;
if (data & 0x80) {
wCharLen = 2;
}
else {
wCharLen = 1;
}
// if (EditGetCursorLineRow((MEdit *)hEditCtrl, &wLine, &wRow))
// {
// EditSetCursorLineRow((MEdit *)hEditCtrl,
// wLine, wRow + wCharLen);
// EditGetCursorLineRow((MEdit *)hEditCtrl,
// &wTempLine, &wTempRow);
// if ((wLine == wTempLine) && (wRow == wTempRow))
// EditSetCursorLineRow((MEdit *)hEditCtrl, wLine + 1, 0);
// }
data = MAKEWORD(HIBYTE(data), LOBYTE(data));
if (_ImGetAssociation(data)) {
g_mInputBox.state = IM_INPUT_LX;
}
else {
g_pIMEWordNum = 0;
}
_DrawHandWriteBox();
}
else if (*pParam == CM_HW_REFRESH) {
g_mInputBox.refresh = TRUE;
}
break;
case EVENT_DRAW:
g_mInputBox.refresh = TRUE;
break;
case EVENT_TIMER:
break;
}
#endif
if (g_mInputBox.refresh) {
// _DrawHandWriteBox();
}
return ret;
}
VOID HwTaskProcess(UNSIGNED argc, VOID *argv)
{
#if 0
UINT8 *pHwBuffer;
int nLength, num;
UINT8 *pData;
nLength = *(UINT32 *)argv + SIGN_SIZE;
pData = g_hwManageData.pHwOutBuf/* + sizeof(MEdExtraCharHead)*/;
#ifdef _WIN32
pHwBuffer = g_hwManageData.pHwBuffer;
num = PcHWRecognize(pHwBuffer, nLength, pData, HW_CANDI_NUM, g_hwManageData.wHwRange);
{
int i;
UINT8 *pTmp;
pTmp = pData;
for (i = 0; i < num; ++ i) {
if (*pTmp == 0) {
*pTmp = pTmp[1];
pTmp[1] = 0;
}
pTmp += 2;
}
}
#else
pHwBuffer = (UINT8 *)argv + 4;
num = HWRecognize((WORD *)pHwBuffer, pData, HW_CANDI_NUM, g_hwManageData.wHwRange);
#endif
if (num > 0 && num <= HW_CANDI_NUM) {
// MsgPost(NULL, EVENT_STRING, 0, 0, g_pHwOutBuf);
MsgPost(NULL, EVENT_IME, CM_HW_RECOGNIZED/*, argc, pData*/);
*(UINT32 *)argv = 0;
}
else {
MsgPost(NULL, EVENT_DRAW, 0/*, 0, 0*/);
g_hwManageData.szHwAction = HW_ACT_IDLE;
}
NU_Release_Semaphore(&g_hwManageData.hHwSemaph);
#endif
}
UINT8 HwTimerProcess(VOID)
{
if (g_hwManageData.szHwAction == HW_ACT_STROKEEND)
{
g_hwManageData.szHwAction = HW_ACT_FULLEND;
MsgPost(NULL, EVENT_IME, CM_HW_BUFFER_OK);
TimerStopTimer(g_hwManageData.hHwTimer);
}
return 0;
}
VOID _HWDrawGraph()
{
#if 0
UINT16 tempnum;
UINT8 *addr;
MDC *pDC;
INT x0, i;
UINT8 bakDrawMode;
MEdExtraCharHead *pCharData;
int x1, y1, x2, y2;
GraphDisableRefresh();
x1 = inputBoxRect[2].x + 1;
y1 = inputBoxRect[2].y + 1;
x2 = x1 + inputBoxRect[2].width - 3;
y2 = y1 + inputBoxRect[2].height - 3;
bakDrawMode = GraphSetDrawMode(g_pFullDC, DRMODE_FADE);
GraphDrawRect(g_pFullDC, x1, y1, x2, y2);
GraphSetDrawMode(g_pFullDC, bakDrawMode);
pDC = &(g_mInputBox.dc);
switch (g_mInputBox.state) {
case IM_INPUT_DOING: /*用户正在输入*/
case IM_INPUT_ZC: /*有内容备选*/
//draw candidate
pCharData = (MEdExtraCharHead *)g_pHwOutBuf;
tempnum = READ_WORD(&pCharData->wMemLen) - sizeof(MEdExtraCharHead);
tempnum /= 2;
x0 = IME_LX_X - IME_WORD_SPACE * 2;
for (i = 0; i < tempnum; i++)
{
memset(g_pIMEOutBuffer, 0, IM_OUTBUFF_LEN);
addr = (UINT8 *)(pCharData + 1) + i * 2;
memmove(g_pIMEOutBuffer, addr, 2);
GraphDrawText(pDC, x0 + i * IME_WORD_SPACE, IME_INPUT_Y,
0, 0, NULL, g_pIMEOutBuffer);
}
case IM_INPUT_LX:
GraphDrawText(pDC, IME_INPUT_X, IME_INPUT_Y + 14, 0, 0, NULL, "联");
x0 = IME_LX_X;
// draw the word
tempnum = g_pIMEWordNum - g_pIMECandiPos;
if (tempnum > g_pIMEWordTypeNum)
tempnum = g_pIMEWordTypeNum;
for (i = 0; i < tempnum; i++)
{
memset(g_pIMEOutBuffer, 0, IM_OUTBUFF_LEN);
addr = g_pIMEDataAddr + (g_pIMECandiPos + i) * 2;
memmove(g_pIMEOutBuffer, addr, 2);
GraphDrawText(pDC, x0 + i * IME_WORD_SPACE, IME_INPUT_Y + 14,
0, 0, NULL, g_pIMEOutBuffer);
}
// draw the left arrow
if (g_pIMECandiPos) {
GraphDrawBitmap(pDC, x0 - 12, IME_INPUT_Y + 14, 0, 0,
0, MAKE_ID(IDB_IME_ARROWL));
}
// draw the right arrow
if ((g_pIMEWordNum - g_pIMECandiPos) > g_pIMEWordTypeNum)
{
GraphDrawBitmap(pDC, IME_RIGHT_X, IME_INPUT_Y + 14, 0, 0,
0, MAKE_ID(IDB_IME_ARROWR));
}
break;
}
g_mInputBox.refresh = IME_NO_REFRESH;
GraphEnableRefresh();
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -