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

📄 asix_key.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			trans_msg->lparam=kbctrl->windowid;
			trans_msg->data=(void *)kbctrl;
			trans_msg->wparam=(U16)WNDCLASS_KEYBAR;
			trans_msg->message=WM_CHINESE;
			break;

		case ASIX_KEY:
			StopTimer( kbctrl->timerId );
			
//			if( ( *data <= KEY_9 ) || ( *data == KEY_Asterisk ) || ( *data == KEY_NO ) )
//				kbctrl->curkey=*data;
//			else if( *data == KEY_MiddleVoice && kbctrl->open == 0 )//kbctrl->open == 0 add by DSA 2002/02/08
//			{
//				DisplayStatus( kbctrl );
//			}
//			else if( (*data == KEY_VoiceUp) || (*data == KEY_VoiceDown) || (*data == KEY_Call) || (*data == KEY_Menu) ||
//					(*data == KEY_Cancel) || (*data == KEY_Done) || (*data == KEY_Up) || (*data == KEY_Right) ||
//					(*data == KEY_Down) || (*data == KEY_Left) || (*data == KEY_Drop) )
//			{
//				kbctrl->funckey=*data;
//			}
			if( ( size <= KEY_9 ) || ( size == KEY_Asterisk ) || ( size == KEY_NO ) )
				kbctrl->curkey=size;
			else if( size == KEY_MiddleVoice && kbctrl->open == 0 )//kbctrl->open == 0 add by DSA 2002/02/08
			{
				DisplayStatus( kbctrl );
			}
			else if( (size == KEY_VoiceUp) || (size == KEY_VoiceDown) || (size == KEY_Call) || (size == KEY_Menu) ||
					(size == KEY_Cancel) || (size == KEY_Done) || (size == KEY_Up) || (size == KEY_Right) ||
					(size == KEY_Down) || (size == KEY_Left) || (size == KEY_Drop) )
			{
				kbctrl->funckey=size;
			}
			trans_msg->lparam=kbctrl->windowid;
			trans_msg->data=(void *)kbctrl;
			trans_msg->wparam=(U16)WNDCLASS_KEYBAR; //Debugging state
			trans_msg->message=WM_KEYUP;//WM_KEYDOWN will not be sent to here
			break;

		default:
			return ASIX_NO_MSG;	
	}
	return ASIX_OK;
}


STATUS	kb_msgproc(U32 win_id, U16 asix_msg,U32 lparam,void *data,U16 wparam,void *reserved)
{
	U16						xSrc,ySrc,xDest,yDest;
	register kb_ctrl *kbctrl;
	static MSG				kb_msg; //it will be sent by KB
	U32						areaId;
	U32						pGC;
	ASIX_WINDOW		*wndptr;

//	if ( asix_msg != WM_PENDOWN && asix_msg != WM_PENDRAG && 
//		asix_msg != WM_PENDRAGUP && asix_msg != WM_PENUP && asix_msg != WM_KEYUP )
//		return ASIX_OK;

	wndptr = (ASIX_WINDOW *)win_id;
	if( wndptr == NULL  )
		return ASIX_ERROR;

	if ( wndptr->wndclass == NULL || wndptr->wndclass->wndclass_id != WNDCLASS_KEYBAR )
		return ASIX_ERROR;

	kbctrl=(kb_ctrl *)wndptr->ctrl_str;
	pGC=kbctrl->pGC;

	if ( kbctrl == NULL ) return ASIX_ERROR;
	if ( lparam != kbctrl->windowid) return ASIX_OK;

	memset( (void *)&kb_msg,0x0,sizeof(MSG) );
	kb_msg.messageType=ASIX_MESSAGE;

	asixprintf("kb_msgproc-----------begin\n");
	switch ( asix_msg )
	{
		case WM_PENDOWN:
			asixprintf("WM_PENDOWN\n");
			StopTimer( kbctrl->timerId );//add by DSA 2001/12/20
			if ( kbctrl->areaselect == KB_NEXT )
				areaId=kbctrl->next_id;
			else if ( kbctrl->areaselect == KB_PRE )
				areaId=kbctrl->pre_id;
			else if ( kbctrl->areaselect == KB_FIGURE0 )
				areaId=kbctrl->figure[0];
			else if ( kbctrl->areaselect == KB_FIGURE1 )
				areaId=kbctrl->figure[1];
			else if ( kbctrl->areaselect == KB_FIGURE2 )
				areaId=kbctrl->figure[2];
			else if ( kbctrl->areaselect == KB_FIGURE3 )
				areaId=kbctrl->figure[3];
			else if ( kbctrl->areaselect == KB_FIGURE4 )
				areaId=kbctrl->figure[4];
			else if ( kbctrl->areaselect == KB_TAB )
				areaId=kbctrl->tab_id;
			
			ActiveAreaRead( areaId,&xSrc,&ySrc,&xDest,&yDest);
			InvRec( pGC,xSrc,ySrc,xDest-xSrc+1,yDest-ySrc+1);
			if( areaId == kbctrl->next_id || areaId == kbctrl->pre_id )
			{
				StartTimer( kbctrl->timerId );
			}
			else
			{
				if( kbctrl->prekey == KEY_0 || kbctrl->prekey == KEY_1 || kbctrl->prekey == KEY_Asterisk || kbctrl->prekey == KEY_NO )
					InvRec( pGC,kbctrl->x+18+kbctrl->boxw*(kbctrl->keycount%5-1)+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
				if( kbctrl->prekey == KEY_2 || kbctrl->prekey == KEY_3 || kbctrl->prekey == KEY_4 || kbctrl->prekey == KEY_5 || kbctrl->prekey == KEY_6 || kbctrl->prekey == KEY_8 )
					InvRec( pGC,kbctrl->x+18+kbctrl->boxw*(kbctrl->keycount%3-1)+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
				if( kbctrl->prekey == KEY_7 || kbctrl->prekey == KEY_9 )	
					InvRec( pGC,kbctrl->x+18+kbctrl->boxw*(kbctrl->keycount%4-1)+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
			}

			break;
				
		case WM_PENUP:
			asixprintf("WM_PENUP\n");
			if ( kbctrl->areaselect == KB_NEXT )
			{
				areaId=kbctrl->next_id;
				switch( kbctrl->prekey )
				{
					case KEY_0:
					if( kbctrl->keycount%10 < 5 )
					{
						ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
						TextOut(pGC,"?",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,":",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,";",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"<",kbctrl->x+18+kbctrl->boxw*3+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,">",kbctrl->x+18+kbctrl->boxw*4+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						kbctrl->keycount=6;
						InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
					}
					break;
					case KEY_1:
					if( kbctrl->keycount%10 < 5 )
					{
						ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
						TextOut(pGC,")",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"[",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"]",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"{",kbctrl->x+18+kbctrl->boxw*3+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"}",kbctrl->x+18+kbctrl->boxw*4+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						kbctrl->keycount=6;
						InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
					}
					break;
					default:
						break;
				}
				if( kbctrl->handwritingflag == 1 )
				{
					DisplayText( kbctrl,1 );;
				}
				ActiveAreaRead( areaId,&xSrc,&ySrc,&xDest,&yDest);
				InvRec( pGC,xSrc,ySrc,xDest-xSrc+1,yDest-ySrc+1);
				break;
			}else
			if ( kbctrl->areaselect == KB_PRE )
			{
				areaId=kbctrl->pre_id;
				switch( kbctrl->prekey )
				{
					case KEY_0:
					if( kbctrl->keycount%10 >= 5 )
					{
						ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
						TextOut(pGC," ",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,".",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"!",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"\"",kbctrl->x+18+kbctrl->boxw*3+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,",",kbctrl->x+18+kbctrl->boxw*4+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						kbctrl->keycount=1;
						InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
					}
					break;
					case KEY_1:
					if( kbctrl->keycount%10 >= 5 )
					{
						ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
						TextOut(pGC,"@",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"&",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"$",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"%",kbctrl->x+18+kbctrl->boxw*3+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						TextOut(pGC,"(",kbctrl->x+18+kbctrl->boxw*4+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
						kbctrl->keycount=1;
						InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
					}
					break;
					default:
						break;
				}
				if( kbctrl->handwritingflag == 1 )
				{
					DisplayText( kbctrl,0 );
				}
				ActiveAreaRead( areaId,&xSrc,&ySrc,&xDest,&yDest);
				InvRec( pGC,xSrc,ySrc,xDest-xSrc+1,yDest-ySrc+1);
				break;
			}else
			if ( kbctrl->areaselect == KB_FIGURE0 )
				areaId=kbctrl->figure[0];
			else
			if ( kbctrl->areaselect == KB_FIGURE1 )
				areaId=kbctrl->figure[1];
			else
			if ( kbctrl->areaselect == KB_FIGURE2 )
				areaId=kbctrl->figure[2];
			else
			if ( kbctrl->areaselect == KB_FIGURE3 )
				areaId=kbctrl->figure[3];
			else
			if ( kbctrl->areaselect == KB_FIGURE4 )
				areaId=kbctrl->figure[4];
			else
			if ( kbctrl->areaselect == KB_TAB )
			{
				if( kbctrl->tabflag%4 == 1 )
					kb_msg.wparam=ProcessBig( kbctrl );
				else if( kbctrl->tabflag%4 == 2 )
					kb_msg.wparam=ProcessSmall( kbctrl );
				if( kbctrl->tabflag%4 == 1 || kbctrl->tabflag%4 == 2 && kbctrl->prekey != 0xffff)
				{
					Suspend( kbctrl );
					ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
					kbctrl->keycount=0;
					kbctrl->prekey=0xffff;
					kbctrl->curkey=0xffff;
					//kb_msg.lparam=kbctrl->windowid;
					//kb_msg.lparam=FocusWindow->wnd_id;
					kb_msg.lparam=((ASIX_WINDOW *)GetFocus( ))->wnd_id;
					kb_msg.message=WM_CHAR;
					AdvSendMessage(GetCurTask()->id,(P_MESSAGE)(&kb_msg),NO_SWAP_TASK);
				}
				areaId=kbctrl->tab_id;
				if( kbctrl->tabflag%4 == 3 && kbctrl->open == 1 )
				{
					ActiveAreaRead( areaId,&xSrc,&ySrc,&xDest,&yDest);
					InvRec( pGC,xSrc,ySrc,xDest-xSrc+1,yDest-ySrc+1);
					goto A;//add by DSA 2002/02/08
				}
				DisplayStatus( kbctrl );
				kbctrl->pretabflag=kbctrl->tabflag;
				A:
				
				break;
			}
			//出字母
			if( kbctrl->handwritingflag == 0 )
			{
				kb_msg.wparam=PenSelect( areaId,kbctrl );//if kbctrl->tabflag%4 == 1
				if(kbctrl->tabflag%4 == 2 && kbctrl->prekey != KEY_0 && kbctrl->prekey != KEY_1 && kbctrl->prekey != KEY_Asterisk && kbctrl->prekey != KEY_NO )//now it is small
					kb_msg.wparam += 0x20; 
			}
			//出汉字
			else if( kbctrl->handwritingflag == 1 && kbctrl->select == 0 )
			{
				if( areaId == kbctrl->figure[0] )kb_msg.wparam=kbctrl->chinese[0];
				else if( areaId == kbctrl->figure[1] )kb_msg.wparam=kbctrl->chinese[1];
				else if( areaId == kbctrl->figure[2] )kb_msg.wparam=kbctrl->chinese[2];
				else if( areaId == kbctrl->figure[3] )kb_msg.wparam=kbctrl->chinese[3];
				else if( areaId == kbctrl->figure[4] )kb_msg.wparam=kbctrl->chinese[4];
				kbctrl->handwritingflag=0;
				kbctrl->open=0;
			}
			else if( kbctrl->handwritingflag == 1 && kbctrl->select == 1 )
			{
				if( areaId == kbctrl->figure[0] )kb_msg.wparam=kbctrl->chinese[5];
				else if( areaId == kbctrl->figure[1] )kb_msg.wparam=kbctrl->chinese[6];
				else if( areaId == kbctrl->figure[2] )kb_msg.wparam=kbctrl->chinese[7];
				else if( areaId == kbctrl->figure[3] )kb_msg.wparam=kbctrl->chinese[8];
				else if( areaId == kbctrl->figure[4] )kb_msg.wparam=kbctrl->chinese[9];
				kbctrl->handwritingflag=0;
				kbctrl->open=0;
			}
			Suspend( kbctrl );
			kb_msg.message=WM_CHAR;
			//kb_msg.lparam=kbctrl->windowid;
			//kb_msg.lparam=FocusWindow->wnd_id;
			kb_msg.lparam=((ASIX_WINDOW *)GetFocus( ))->wnd_id;
			AdvSendMessage(GetCurTask()->id,(P_MESSAGE)(&kb_msg),NO_SWAP_TASK);
			kbctrl->prekey=0xffff;
			kbctrl->curkey=0xffff;
			kbctrl->keycount=0;
			ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
		//	SaveRec(pGC,kbctrl->kb_coveredmap1,1,90,118,53,0 );//add by DSA 2002.03.22
			break;//pen up is over

⌨️ 快捷键说明

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