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

📄 asix_kb.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
//				}
//			}
//			memcpy( &(ctrlstr->HW_Icon1[i].icon_data),data,20 );
			for( i=0;i<10;i++)
			{
				ctrlstr->HW_Icon1[i].icon_data=data[i];
				chtext[0]=ctrlstr->HW_Icon1[i].icon_data;
				TextOut(ctrlstr->pGC,(PBYTE)chtext,(LCD_WIDTH-CHAR_WIDTH*10)/2+i*CHAR_WIDTH,ctrlstr->cur_y-CHAR_WIDTH-1,0,GPC_BLACK,GPC_REPLACE_STYLE);
				ActiveAreaSuspend(ctrlstr->HW_Icon1[i].icon_id,AREA_REENABLE);
			}
		#endif
			}//end if ( ctrlstr->cur_mode == SHOUXIE ){...}
			if( ctrlstr->cur_mode == PINYING )
			{
				for( i=0;i<7;i++)
				{
					ctrlstr->PY_Icon[i].icon_data=data[i];
					chtext[0]=ctrlstr->PY_Icon[i].icon_data;
					TextOut(ctrlstr->pGC,(PBYTE)chtext,(LCD_WIDTH-CHAR_WIDTH*7)/2+i*CHAR_WIDTH,ctrlstr->cur_y-CHAR_WIDTH-1,0,GPC_BLACK,GPC_REPLACE_STYLE);
					ActiveAreaSuspend(ctrlstr->PY_Icon[i].icon_id,AREA_REENABLE);
				}
				ActiveAreaSuspend(ctrlstr->PY_LeftButtonId,AREA_REENABLE);
				ActiveAreaSuspend(ctrlstr->PY_RightButtonId,AREA_REENABLE);
			}
//			trans_msg->message = WM_HANDWRITING;
			trans_msg->message = WM_CHINESE;
			trans_msg->lparam = ctrlstr->wndid;
			trans_msg->data = (void *)ctrlstr;
			trans_msg->wparam = (U16)WNDCLASS_KEYBD;		
			break;
		
		case ASIX_SOFTKEY:
			if ( ctrlstr->cur_mode != PINYING )
			{
//				ctrlstr->char_data = *data;
				ctrlstr->char_data = (U16)data;
				ctrlstr->char_flag = KB_KBINPUT;
				
				trans_msg->message = WM_SOFTKEY;
				trans_msg->lparam = ctrlstr->wndid;
				trans_msg->data = (void *)ctrlstr;
//				trans_msg->wparam = KB_KBINPUT;
				trans_msg->wparam = WNDCLASS_KEYBD;
			} else {
//				PY_Key = (char)*data;
				PY_Key = (char)data;
				if (ctrlstr->Pycb->PY_Buf_Offset < 0) ctrlstr->Pycb->PY_Buf_Offset = 0;
				
				if( (PY_Key>='a') && (PY_Key<='z')) {
					if ( ctrlstr->Pycb->PY_Buf_Offset < 13 ) {
						ctrlstr->Pycb->PY_Buffer[ctrlstr->Pycb->PY_Buf_Offset] = PY_Key;
						ctrlstr->Pycb->PY_Buffer[++(ctrlstr->Pycb->PY_Buf_Offset)] = '\0';
					}
					
					ctrlstr->Pycb->PY_Status = PY_REFRESH;
					trans_msg->message = WM_PINYING;
					trans_msg->lparam = ctrlstr->wndid;
					trans_msg->data = (void *)ctrlstr;
					trans_msg->wparam = (U16)WNDCLASS_KEYBD;
					
				} else if (((U8)PY_Key == 0xb0 )&&((--ctrlstr->Pycb->PY_Buf_Offset) >= 0)){	
					ctrlstr->Pycb->PY_Buffer[ctrlstr->Pycb->PY_Buf_Offset] = '\0';
					ctrlstr->Pycb->PY_Status = PY_REFRESH;
					trans_msg->message = WM_PINYING;
					trans_msg->lparam = ctrlstr->wndid;
					trans_msg->data = (void *)ctrlstr;
					trans_msg->wparam = (U16)WNDCLASS_KEYBD;	
				
				} else if (((U8)PY_Key==0x0d) && (ctrlstr->Pycb->PY_Buffer[0] != '\0') &&(ctrlstr->Pycb->PY_Buf_Offset != 0 ) ) {
					ctrlstr->Pycb->PY_Status = PY_QUERY;
					trans_msg->message = WM_PINYING;
					trans_msg->lparam = ctrlstr->wndid;
					trans_msg->data = (void *)ctrlstr;
					trans_msg->wparam = (U16)WNDCLASS_KEYBD;
				
				} else {
//					ctrlstr->char_data = *data;
					ctrlstr->char_data = (U16)data;
					ctrlstr->char_flag = KB_KBINPUT;
					
					trans_msg->message = WM_SOFTKEY;
					trans_msg->lparam = ctrlstr->wndid;
					trans_msg->data = (void *)ctrlstr;
//					trans_msg->wparam = KB_KBINPUT;
					trans_msg->wparam = WNDCLASS_KEYBD;
				}	
			}
			
			break;
	
		default:
			
			return ASIX_NO_MSG;
	}	
	
	return ASIX_OK;
	
}


STATUS kbd_msgproc( U32 win_id, U16 asix_msg, U32 lparam, void *data, U16 wparam, void *reserved)
{
	
	
	U16						xSrc,ySrc,xDest,yDest;
	register struct kbd_ctrl *ctrl_str;
	register U8				i;
	//static struct MSG		kb_msg;
	static MSG				kb_msg;
	U32						areaid;
	U8						pytext[2];
	U16						chtext[2];
	DWORD					bmp;

	static char ch[]="我收拾好行囊决定到她的老家向她表明我的心意东去的中巴颠簸前行空气中弥漫一股属于夏日的气息令人昏昏欲睡不愿自己睡眼惺忪面对她只得打起精神望着窗外急速后退的风景夏日白花花的阳光映得一切迷迷茫茫起来田园风光只剩一抹抹的绿车过渭南进入华阴连绵的青山映入眼底是呵快到她家乡了高高悬着的心似乎获得了点解脱又觉得落不到底窗外远处一团乌云正在纠结但阳光依旧耀眼似乎不觉它的存在于是我只得低下头来再次细细读着随身的一本小书只是思蓄早已飞到她身边";
	unsigned short *p=(unsigned short *)ch;
	ASIX_WINDOW				*wndptr;
	
	U8						DispNum = 7,CandyLen; //these two for PinYing;
#ifdef SOLIVE 
	U8						candidate_num = 8;
//	U16						disp_str[9];
#endif 
#ifdef SANBAO 
	U8						candidate_num = 4;
	U16						disp_str[5];
#endif 	
	
	pytext[1]=0;
	chtext[1]=0;
	
//	if (asix_msg != WM_PENDOWN && asix_msg != WM_PENDRAG &&
//		asix_msg != WM_PENDRAGUP && asix_msg != WM_PENUP &&
//		asix_msg != WM_CHINESE/*WM_HANDWRITING*/ && asix_msg != WM_PINYING &&
//		asix_msg != WM_SOFTKEY)
//		return ASIX_OK;
	
	wndptr = (ASIX_WINDOW *)win_id;
	//It is not for me, Just go away! By LingMing 2001/11/27
	if( wndptr == NULL )
		return ASIX_ERROR;

	if( wndptr->wndclass == NULL || wndptr->wndclass->wndclass_id != WNDCLASS_KEYBD )
		return ASIX_ERROR;
	
	//if ( *(P_U32)data != WNDCLASS_KEYBD ) //the first U32 in ctrl_str should be Class name
	//	return ASIX_ERROR;
	
	/*param checking for msg filtering. By Lingming 2001/11/27*/
//	if (wparam != WNDCLASS_KEYBD) return ASIX_OK;//it is not for us
	
//	ctrl_str = (struct kb_ctrl *)data;
//	ctrl_str = (kbd_ctrl *)data;
	ctrl_str = (kbd_ctrl *)wndptr->ctrl_str;
	//check ctrl struct. by Lingming 2001/11/27
	if ( ctrl_str == NULL ) return ASIX_ERROR; 
//	if (lparam != ctrl_str->wndid) return ASIX_ERROR;//it must be somthing wrong!
	
	i = ctrl_str->icon_index; 
	areaid = ctrl_str->icon_areaid;
	
//	memset( (void *)&kb_msg, 0x0, sizeof(struct MSG) );
	memset( (void *)&kb_msg, 0x0, sizeof(MSG) );
	kb_msg.messageType = ASIX_MESSAGE;
	
	
	switch ( asix_msg )
	{
	case WM_PENDOWN:/*Fall through*/
	case WM_PENDRAG:
		if ( (ctrl_str->cur_mode == BOHAO) && (ctrl_str->CtrlIconSelect & BH_ICON) ) 
		{
			U16	aw, ah, bw, bh;

			bmp=LoadBitmap(BohaoList[i].icon_bmp, NULL);
			bw = ((BITMAP *)bmp)->info.width;
			bh = ((BITMAP *)bmp)->info.height;
			aw = bw +3;
			ah = bh +8;
			
			ClearRec(ctrl_str->pGC,GPC_WHITE,ctrl_str->cur_x+(i % 3)*aw,ctrl_str->cur_y+(i / 3)*ah,bw,bh,GPC_REPLACE_STYLE);
//modified by dsa 2002/04/17
//			Advswitchonetotwo(BohaoList[i].icon_bmp,2+(i % 3)*52 + 6,ctrl_str->cur_y+(i / 3)*40+9,\
//			44,25,BLACK_TO_DARKGREY,WHITE_TO_WHITE);
//			SysDrawMonoImage(ctrl_str->pGC,BohaoList[i].icon_bmp,2+(i % 3)*52 + 6,ctrl_str->cur_y+(i / 3)*40+9,\
//						44,25,GPC_WHITE,GPC_BLACK);
			DisplayBMP(ctrl_str->pGC,ctrl_str->cur_x+(i % 3)*aw +2,ctrl_str->cur_y+(i / 3)*ah+2,bmp);
			FreeBitmap(bmp);
			ctrl_str->CtrlIconSelect = 0;
			break;
		}		/*Fall through*/
	case WM_PENDRAGUP:
		if (   ctrl_str->CtrlIconSelect & CONTROL_ICON
			|| ctrl_str->CtrlIconSelect & HWR_ICON1
			|| ctrl_str->CtrlIconSelect & HWR_ICON2
			|| ctrl_str->CtrlIconSelect & HWR_NUMBER
			|| ctrl_str->CtrlIconSelect & PY_ICON
			|| ctrl_str->CtrlIconSelect & PY_RIGHT
			|| ctrl_str->CtrlIconSelect & PY_LEFT )
		{
			ActiveAreaRead( areaid, &xSrc, &ySrc, &xDest, &yDest);
			InvRec( ctrl_str->pGC, xSrc, ySrc, xDest-xSrc, yDest-ySrc);
			ctrl_str->CtrlIconSelect = 0;
			break;
		}
		
	case WM_PENUP:
		if (   ctrl_str->CtrlIconSelect & CONTROL_ICON
			|| ctrl_str->CtrlIconSelect & HWR_ICON1
			|| ctrl_str->CtrlIconSelect & HWR_ICON2
			|| ctrl_str->CtrlIconSelect & HWR_NUMBER
			|| ctrl_str->CtrlIconSelect & PY_ICON
			|| ctrl_str->CtrlIconSelect & PY_RIGHT
			|| ctrl_str->CtrlIconSelect & PY_LEFT )
		{
			ActiveAreaRead( areaid, &xSrc, &ySrc, &xDest, &yDest);
			InvRec( ctrl_str->pGC, xSrc, ySrc, xDest-xSrc, yDest-ySrc);
			
//			kb_msg.message = WM_CHAR;
//			kb_msg.lparam = ctrl_str->wndid;
			
			
		}
		
		if ( ctrl_str->CtrlIconSelect & CONTROL_ICON ) 
		{
			PenIrptDisable();
			/* we have nothing to do if this openning fialed */
			openinput ( ctrl_str->cur_y, ctrl_str->CtrlIcon[i].icon_name, ctrl_str->allowed_btm, ctrl_str );
			ctrl_str->CtrlIconSelect = 0;
			PenIrptEnable();
			
			break;
			
		} 
		
		if ( ctrl_str->cur_mode == SHOUXIE ) 
		{
			ctrl_str->char_data = ctrl_str->HW_Icon1[i].icon_data;
			kb_msg.message = WM_CHAR;
			kb_msg.lparam = ((ASIX_WINDOW *)GetFocus( ))->wnd_id;
			kb_msg.data = (P_U16)(&ctrl_str->char_data);
			kb_msg.wparam = ctrl_str->char_data;

			for(i=0;i<10;i++)
				ActiveAreaSuspend(ctrl_str->HW_Icon1[i].icon_id,AREA_SUSPEND);
				ClearRec(ctrl_str->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*10)/2,ctrl_str->cur_y-CHAR_WIDTH-1,CHAR_WIDTH*10,CHAR_WIDTH,GPC_REPLACE_STYLE);
				ActiveAreaSuspend(ctrl_str->areaId1,AREA_REENABLE);
			
			AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
			break;
/*			if ( ctrl_str->CtrlIconSelect & HWR_ICON1 )
			{
				ctrl_str->CtrlIconSelect = 0;
				ctrl_str->char_data = ctrl_str->HW_Icon1[i].icon_data;
				ctrl_str->char_flag = KB_HWLINE1;
				
				kb_msg.data = (P_U16)(&ctrl_str->char_data);				
				kb_msg.wparam = KB_HWLINE1;
			
				AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
				break;
				 
			
			} else if ( ctrl_str->CtrlIconSelect & HWR_ICON2 ) {
				ctrl_str->CtrlIconSelect = 0;
				ctrl_str->char_data = ctrl_str->HW_Icon2[i].icon_data;
				ctrl_str->char_flag = KB_HWLINE2;
								
				kb_msg.data = (P_U16)(&ctrl_str->char_data);
				kb_msg.wparam = KB_HWLINE2;
			
				AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
				break;
							
			} else if (ctrl_str->CtrlIconSelect & HWR_NUMBER ) {
			#ifdef SANBAO	
				ctrl_str->CtrlIconSelect = 0;
				ctrl_str->char_data = ctrl_str->HW_Number[i].icon_data;
				ctrl_str->char_flag = KB_KBINPUT;
				
				kb_msg.data = (P_U16)(&ctrl_str->char_data);
				kb_msg.wparam = KB_KBINPUT;
			
				AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
				break;
			#endif	
			
			}*/
		
		}
		
		if ( ctrl_str->cur_mode == PINYING )
		{
			if ( ctrl_str->CtrlIconSelect & PY_ICON )
			{
				ctrl_str->CtrlIconSelect = 0;
				ctrl_str->char_data = ctrl_str->PY_Icon[i].icon_data;
				ctrl_str->char_flag = KB_PYINPUT;
				ctrl_str->Pycb->ClearFlag = TRUE;//we should consider how to handle this clearflag
				
//				kb_msg.data = (P_U16)(&ctrl_str->char_data);
//				kb_msg.wparam = KB_PYINPUT;
				kb_msg.message = WM_CHAR;
				kb_msg.lparam = ((ASIX_WINDOW *)GetFocus( ))->wnd_id;
				kb_msg.data = (P_U16)(&ctrl_str->char_data);
				kb_msg.wparam = ctrl_str->char_data;

				for(i=0;i<7;i++)
					ActiveAreaSuspend(ctrl_str->PY_Icon[i].icon_id,AREA_SUSPEND);
				ActiveAreaSuspend(ctrl_str->PY_LeftButtonId,AREA_SUSPEND);
				ActiveAreaSuspend(ctrl_str->PY_RightButtonId,AREA_SUSPEND);
				ClearRec(ctrl_str->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2,ctrl_str->cur_y-CHAR_WIDTH-1,CHAR_WIDTH*7,CHAR_WIDTH,GPC_REPLACE_STYLE);

				ctrl_str->Pycb->win_offset=0;
				memset((void *)ctrl_str->Pycb->candidate,'\0',PY_MAX_NUM*2);
								
				AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
				break;
			} else if (ctrl_str->CtrlIconSelect & PY_RIGHT) {
				ctrl_str->CtrlIconSelect = 0;
				
//				CandyLen = strlen( (char *)(ctrl_str->Pycb->candidate) )/2;
				CandyLen = ctrl_str->Pycb->candidatesize;
				ctrl_str->Pycb->win_offset += 7;
				
				if ( ctrl_str->Pycb->win_offset >= CandyLen )
					ctrl_str->Pycb->win_offset -= 7;
				
				if( (i = (CandyLen - ctrl_str->Pycb->win_offset)) < DispNum )
					DispNum=i;

				ClearRec(ctrl_str->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2,ctrl_str->cur_y-CHAR_WIDTH-1,CHAR_WIDTH*7,CHAR_WIDTH,GPC_REPLACE_STYLE);
			
				for (i = 0; i < DispNum; i++) {
//					ctrl_str->Pycb->hz_buf[i] = ctrl_str->Pycb->candidate[i+ctrl_str->Pycb->win_offset];
					ctrl_str->PY_Icon[i].icon_data = ctrl_str->Pycb->candidate[i+ctrl_str->Pycb->win_offset];
					chtext[0]=ctrl_str->PY_Icon[i].icon_data;
					TextOut(ctrl_str->pGC,(PBYTE)chtext,(LCD_WIDTH-CHAR_WIDTH*7)/2+i*CHAR_WIDTH,ctrl_str->cur_y-CHAR_WIDTH-1,0,GPC_BLACK,GPC_REPLACE_STYLE);
				}
				for ( i = DispNum; i < 7; i++) {
//					ctrl_str->Pycb->hz_buf[i] = 0;
					ctrl_str->PY_Icon[i].icon_data = 0;
					ActiveAreaSuspend(ctrl_str->PY_Icon[i].icon_id,AREA_SUSPEND);
				}
							
//				ClearRec(ctrl_str->pGC, GPC_WHITE,24,ctrl_str->cur_y-16,112,16,GPC_REPLACE_STYLE);
//				Disp16String(ctrl_str->Pycb->hz_buf,24,ctrl_str->cur_y-16);
				
				break;
				
			} else if (ctrl_str->CtrlIconSelect & PY_LEFT) {
				ctrl_str->CtrlIconSelect = 0;
				if(ctrl_str->Pycb->win_offset > 0)
					ctrl_str->Pycb->win_offset -= 7;
				if (ctrl_str->Pycb->win_offset < 0 )
					ctrl_str->Pycb->win_offset = 0;
				
				ClearRec(ctrl_str->pGC,GPC_WHITE,(LCD_WIDTH-CHAR_WIDTH*7)/2,ctrl_str->cur_y-CHAR_WIDTH-1,CHAR_WIDTH*7,CHAR_WIDTH,GPC_REPLACE_STYLE);

				for (i=0; i<7;i++) {
//					ctrl_str->Pycb->hz_buf[i] = ctrl_str->Pycb->candidate[i+ctrl_str->Pycb->win_offset];
					ctrl_str->PY_Icon[i].icon_data = ctrl_str->Pycb->candidate[i+ctrl_str->Pycb->win_offset];
					chtext[0]=ctrl_str->PY_Icon[i].icon_data;
					TextOut(ctrl_str->pGC,(PBYTE)chtext,(LCD_WIDTH-CHAR_WIDTH*7)/2+i*CHAR_WIDTH,ctrl_str->cur_y-CHAR_WIDTH-1,0,GPC_BLACK,GPC_REPLACE_STYLE);
				}
//				ClearRec(ctrl_str->pGC,GPC_WHITE,24,ctrl_str->cur_y-16,112,16,GPC_REPLACE_STYLE);			
//				Disp16String(ctrl_str->Pycb->hz_buf,24,ctrl_str->cur_y-16);		 
				break;
			}
			
		} 	
		
		if ( (ctrl_str->cur_mode == BOHAO) && (ctrl_str->CtrlIconSelect & BH_ICON) ) 
		{
			U16	aw, ah, bw, bh;

			bmp=LoadBitmap(BohaoList[i].icon_bmp, NULL);
			bw = ((BITMAP *)bmp)->info.width;
			bh = ((BITMAP *)bmp)->info.height;
			aw = bw +3;
			ah = bh +8;

			ClearRec(ctrl_str->pGC, WHITE,ctrl_str->cur_x+(i % 3)*aw+2,ctrl_str->cur_y+(i / 3)*ah+2,bw,bh,REPLACE_STYLE);
//modified by dsa 2002/04/17
//			switchonetotwo(BohaoList[i].icon_bmp,2+(i % 3)*52 + 4,ctrl_str->cur_y+(i / 3)*40+7, \
//			44,25);	
//			SysDrawMonoImage(ctrl_str->pGC,BohaoList[i].icon_bmp,2+(i % 3)*52 + 4,ctrl_str->cur_y+(i / 3)*40+7,\
//						44,25,GPC_WHITE,GPC_BLACK);
			DisplayBMP(ctrl_str->pGC,ctrl_str->cur_x+(i % 3)*aw,ctrl_str->cur_y+(i / 3)*ah,bmp);
			FreeBitmap(bmp);
			ctrl_str->CtrlIconSelect = 0;
			ctrl_str->char_data = 0x00ff&(U16)BohaoList[i].icon_name;
			ctrl_str->char_flag = KB_BHINPUT;
			
			kb_msg.message = WM_CHAR;
			kb_msg.lparam = ((ASIX_WINDOW *)GetFocus( ))->wnd_id;//ctrl_str->wndid;
			kb_msg.data = (P_U16)(&ctrl_str->char_data);
			kb_msg.wparam = ctrl_str->char_data;//KB_BHINPUT;
			
			AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
			
			break;			
		}	
	
//	case WM_HANDWRITING:
//	case WM_CHINESE:
//	#ifdef SOLIVE
//		disp_str[8] = 0;
//		for (i=0; i<9; i++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -