⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imehandwrite.c

📁 好记星的控件,包括button,list,对文件操作
💻 C
📖 第 1 页 / 共 2 页
字号:
    }
    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 + -