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

📄 asix_kb.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
//			disp_str[i] = ctrl_str->HW_Icon2[i].icon_data;	
		
//		ClearRec(ctrl_str->pGC,GPC_WHITE,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-32,144,16,GPC_REPLACE_STYLE);
//		Disp16String((char *)disp_str,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-32);
		
//		for (i=0; i<9; i++)
//			disp_str[i] = ctrl_str->HW_Icon1[i].icon_data;
		
//		ClearRec(ctrl_str->pGC,GPC_WHITE,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-16,144,16,GPC_REPLACE_STYLE);
//		Disp16String((char *)disp_str,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-16);
//	#endif
//	#ifdef SANBAO
//		disp_str[4] = 0;
//		for (i=0; i<4; i++)
//			disp_str[i] = ctrl_str->HW_Icon2[i].icon_data;	
		
//		ClearRec(WHITE,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-32,144,16,REPLACE_STYLE);
//		Disp16String((char *)disp_str,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-32);
		
//		for (i=0; i<4; i++)
//			disp_str[i] = ctrl_str->HW_Icon1[i].icon_data;
//		
//		ClearRec(WHITE,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-16,144,16,REPLACE_STYLE);
//		Disp16String((char *)disp_str,ctrl_str->cur_x+CONTROL_ICON_WIDTH,ctrl_str->cur_y-16);
//	#endif	
		
//		ctrl_str->char_data = ctrl_str->HW_Icon1[0].icon_data;
//		ctrl_str->char_flag = KB_HWDEFAULT;
		
//		kb_msg.message = WM_CHAR;
//		kb_msg.lparam = ctrl_str->wndid;
//		kb_msg.data = (P_U16)(&ctrl_str->char_data);
//		kb_msg.wparam = KB_HWDEFAULT;
		
//		AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
			
//		break;

	case WM_SOFTKEY:
		{
			ASIX_WINDOW *focus;

			focus = (ASIX_WINDOW *)GetFocus( );
			if( focus == NULL )
				break;

			kb_msg.message = WM_CHAR;
			kb_msg.lparam = focus->wnd_id;
			kb_msg.data = (P_U16)(&ctrl_str->char_data);
			kb_msg.wparam = ctrl_str->char_data;
			
			AdvSendMessage(GetCurTask()->id, (P_MESSAGE)&kb_msg, NO_SWAP_TASK);
		}
		break;

	case WM_PINYING:
		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 );
		if (ctrl_str->Pycb->PY_Status == PY_REFRESH ) {
			/*显示已按下的拼音*/
//			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<ctrl_str->Pycb->PY_Buf_Offset;i++)
			{
				pytext[0]=ctrl_str->Pycb->PY_Buffer[i];
				TextOut(ctrl_str->pGC,(PBYTE)pytext,(LCD_WIDTH-CHAR_WIDTH*7)/2+(CHAR_WIDTH/2)*i,ctrl_str->cur_y-CHAR_WIDTH-1,0,GPC_BLACK,GPC_REPLACE_STYLE);
			}
		} else if (ctrl_str->Pycb->PY_Status == PY_QUERY ) {
			WORD num = 0;
			
			/*调用拼音的识别函数*/
			ctrl_str->Pycb->PY_Buf_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 );
//			ctrl_str->Pycb->candidate="祝中华人民共和国万岁";
//			static char ch[]={"我收拾好行囊决定到她的老家向她表明我的心意东去的中巴颠簸前行空气中弥漫一股属于夏日的气息令人昏昏欲睡不愿自己睡眼惺忪面对她只得打起精神望着窗外急速后退的风景夏日白花花的阳光映得一切迷迷茫茫起来田园风光只剩一抹抹的绿车过渭南进入华阴连绵的青山映入眼底是呵快到她家乡了高高悬着的心似乎获得了点解脱又觉得落不到底窗外远处一团乌云正在纠结但阳光依旧耀眼似乎不觉它的存在于是我只得低下头来再次细细读着随身的一本小书只是思蓄早已飞到她身边"};
//			static char ch[]={"祝中华人民共和国万岁"};
//			unsigned short *p=(unsigned short *)ch;
	
			p = (WORD *)py_ime( ctrl_str->Pycb->PY_Buffer, &num );
//			for(i=0;i<30;i++)
//			{
//				ctrl_str->Pycb->candidate[i] = *p++;
//			}
			strncpy( ctrl_str->Pycb->candidate, p, PY_MAX_NUM*2 );
			ctrl_str->Pycb->candidatesize = (BYTE)(strlen( (char *)(ctrl_str->Pycb->candidate) )/2);
			for( i=0;i<7;i++)
				{
					ctrl_str->PY_Icon[i].icon_data=ctrl_str->Pycb->candidate[i];
					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);
					ActiveAreaSuspend(ctrl_str->PY_Icon[i].icon_id,AREA_REENABLE);
				}
				ActiveAreaSuspend(ctrl_str->PY_LeftButtonId,AREA_REENABLE);
				ActiveAreaSuspend(ctrl_str->PY_RightButtonId,AREA_REENABLE);
		} else {
			;
		}
		
		break;
	default:
	
		break;
		
	}
	
	return ASIX_OK;
	
}

STATUS kbd_repaint( void *ctrl_str, U32 lparam)
{
	
	struct kbd_ctrl	*kbctrl;
	ASIX_WINDOW 	*wndptr;
	register U8		i, j;
	U8				mode, allow;
	register U16	xSrc,ySrc;
	register U16	position_temp=0;
	DWORD			bmp;
#ifdef SOLIVE 
	U8						candidate_num = 8;
	U16						disp_str[11];
#endif 
#ifdef SANBAO 
	U8						candidate_num = 4;
	U16						disp_str[5];
#endif 	
	
	if (ctrl_str == NULL || *((U32 *)ctrl_str) != WNDCLASS_KEYBD ) return ASIX_ERROR;
	
//	kbctrl = (struct kb_ctrl *)ctrl_str;
	kbctrl = (kbd_ctrl *)ctrl_str;
	wndptr = (ASIX_WINDOW *)(kbctrl->wndid);
	
	mode = kbctrl->cur_mode;
	allow = kbctrl->allowed_btm;
	
	ySrc = kbctrl->cur_y;
	xSrc = kbctrl->cur_x;
	
	j = 0 ;
	for(i=0;(i<5) && (mode != BOHAO) ;i++) {
		for( ;j<6;j++) {
			if (kbctrl->icon_select_map[j]==BEENSELECTED) {
				//kbctrl->CtrlIcon[i].icon_name=IconList[j].icon_name;
				if ( (kbctrl->CtrlIcon[i].icon_name & kbctrl->allowed_btm)!=0 ){
					position_temp=ySrc+i*CONTROL_ICON_HEIGHT;
					/*ActiveAreaEnable( (P_U32)&( kbctrl->CtrlIcon[i].icon_id ), ICON_AREA,\
					STROKE_MODE, xSrc, position_temp, xSrc+CONTROL_ICON_WIDTH,\
					position_temp+CONTROL_ICON_HEIGHT );*/
//modified by dsa 2002/04/17
//					switchonetotwo(IconList[j].icon_bmp, xSrc, position_temp,\
//					CONTROL_ICON_WIDTH, CONTROL_ICON_HEIGHT);
//					SysDrawMonoImage(kbctrl->pGC,IconList[j].icon_bmp,xSrc,position_temp,\
//						CONTROL_ICON_WIDTH,CONTROL_ICON_HEIGHT,GPC_BLACK,GPC_WHITE);
					bmp=LoadBitmap(IconList[j].icon_bmp, NULL);
					DisplayBMP(kbctrl->pGC,xSrc,position_temp,bmp);
					FreeBitmap(bmp);
				} else {
//modified by dsa 2002/04/17
//					Advswitchonetotwo(IconList[j].icon_bmp, xSrc, ySrc+i*CONTROL_ICON_HEIGHT,\
//					CONTROL_ICON_WIDTH, CONTROL_ICON_HEIGHT, BLACK_TO_DARKGREY, WHITE_TO_WHITE);
//					SysDrawMonoImage(kbctrl->pGC,IconList[j].icon_bmp,xSrc,ySrc+i*CONTROL_ICON_HEIGHT,\
//						CONTROL_ICON_WIDTH,CONTROL_ICON_HEIGHT,GPC_WHITE,GPC_BLACK);
					bmp=LoadBitmap(IconList[j].icon_bmp, NULL);
					DisplayBMP(kbctrl->pGC,xSrc,ySrc+i*CONTROL_ICON_HEIGHT,bmp);
					FreeBitmap(bmp);
				}
				//kbctrl->icon_select_map[j] = BEENSELECTED;
				j++;
				break;
			}
		}
	}			
	
	for (i=0; (i<5) && (mode != BOHAO) ;i++) {
		position_temp =	ySrc+(i+1)*CONTROL_ICON_HEIGHT;
		DrawLine(kbctrl->pGC, WHITE,xSrc,position_temp,xSrc+CONTROL_ICON_WIDTH,\
		position_temp, 0,REPLACE_STYLE);
	}	
	
	
	if( mode != BOHAO )
		xSrc += CONTROL_ICON_WIDTH;
	
	switch (mode)
	{
		case YINGWEN_L:
//			PutRec(kbctrl->pGC, lkb_bitmap, xSrc, ySrc, EKEY_WIDTH*10, EKEY_HEIGHT*5, REPLACE_STYLE, 0);
			bmp=LoadBitmap(lkb_bitmap, NULL);
			DisplayBMP(kbctrl->pGC, xSrc, ySrc, bmp);
			FreeBitmap(bmp);
			break;
		case YINGWEN_U:
//			PutRec(kbctrl->pGC, ukb_bitmap, xSrc, ySrc, EKEY_WIDTH*10, EKEY_HEIGHT*5, REPLACE_STYLE, 0);
			bmp=LoadBitmap(ukb_bitmap, NULL);
			DisplayBMP(kbctrl->pGC, xSrc, ySrc, bmp);
			FreeBitmap(bmp);
			break; 
		case SHUZI:
//			PutRec(kbctrl->pGC, nkb_bitmap, xSrc, ySrc, NKEY_WIDTH*7, NKEY_HEIGHT*3, REPLACE_STYLE, 0);		
			bmp=LoadBitmap(nkb_bitmap, NULL);
			DisplayBMP(kbctrl->pGC, xSrc, ySrc, bmp);
			FreeBitmap(bmp);
			break;
		case FUHAO:
//			PutRec(kbctrl->pGC, fkb_bitmap, xSrc, ySrc, FKEY_WIDTH*10, FKEY_HEIGHT*4, REPLACE_STYLE, 0);		
			bmp=LoadBitmap(fkb_bitmap, NULL);
			DisplayBMP(kbctrl->pGC, xSrc, ySrc, bmp);
			FreeBitmap(bmp);
			break;
		case PINYING:
//			PutRec(kbctrl->pGC, lkb_bitmap, xSrc, ySrc, EKEY_WIDTH*10, EKEY_HEIGHT*5, REPLACE_STYLE, 0);
			bmp=LoadBitmap(lkb_bitmap, NULL);
			DisplayBMP(kbctrl->pGC, xSrc, ySrc, bmp);
			FreeBitmap(bmp);
			DrawRec(kbctrl->pGC, BLACK,24,ySrc-18,136,ySrc,GPC_SOLID_LINE,REPLACE_STYLE);	
			break;
		case SHOUXIE:
			
//			PutRec(kbctrl->pGC, hkb_bitmap, xSrc+130, ySrc, 14, 75, REPLACE_STYLE, 0);
			bmp=LoadBitmap(hkb_bitmap, NULL);
			DisplayBMP(kbctrl->pGC, xSrc+130, ySrc, bmp);
			FreeBitmap(bmp);
			DrawRec(kbctrl->pGC, BLACK, xSrc, ySrc, xSrc+64, ySrc+74, GPC_SOLID_LINE, REPLACE_STYLE);
			DrawRec(kbctrl->pGC, BLACK, xSrc+65, ySrc, xSrc+129, ySrc+74, GPC_SOLID_LINE, REPLACE_STYLE);
			
		#ifdef SOLIVE
//			disp_str[8] = 0;
//			for (i=0; i<9; i++)
//				disp_str[i] = kbctrl->HW_Icon2[i].icon_data;	
		
//			ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-32,144,16,GPC_REPLACE_STYLE);
//			Disp16String((char *)disp_str,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-32);
		
			for (i=0; i<=9; i++)
				disp_str[i] = kbctrl->HW_Icon1[i].icon_data;
			disp_str[10] = 0;
			ClearRec(kbctrl->pGC,GPC_WHITE,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-16,144,16,GPC_REPLACE_STYLE);
			DrawRec(kbctrl->pGC,GPC_BLACK,(LCD_WIDTH-CHAR_WIDTH*10)/2-1,ySrc-CHAR_WIDTH-2,(LCD_WIDTH-CHAR_WIDTH*10)/2+CHAR_WIDTH*10,ySrc-1,GPC_SOLID_LINE,GPC_REPLACE_STYLE);
			Disp16String((char *)disp_str,(LCD_WIDTH-CHAR_WIDTH*10)/2,kbctrl->cur_y-CHAR_WIDTH-1 );
		#endif
		#ifdef SANBAO
//modified by dsa 2002/04/17		
//			switchonetotwo(sx_number,2,ySrc-16,156,16);
			SysDrawMonoImage(kbctrl->pGC,sx_number,2,ySrc-16,\
						156,16,GPC_BLACK,GPC_WHITE);

			disp_str[4] = 0;
			for (i=0; i<4; i++)
				disp_str[i] = kbctrl->HW_Icon2[i].icon_data;	
		
			ClearRec(WHITE,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-32,144,16,REPLACE_STYLE);
			Disp16String((char *)disp_str,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-32);
		
			for (i=0; i<4; i++)
				disp_str[i] = kbctrl->HW_Icon1[i].icon_data;
		
			ClearRec(WHITE,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-16,144,16,REPLACE_STYLE);
			Disp16String((char *)disp_str,kbctrl->cur_x+CONTROL_ICON_WIDTH,kbctrl->cur_y-16);
		#endif	
	
			break;
		
		case BOHAO:
			{
				U16	aw, ah, bw, bh;
				for (i=0;i<12;i++){
				bmp=LoadBitmap(BohaoList[i].icon_bmp, NULL);
				bw = ((BITMAP *)bmp)->info.width;
				bh = ((BITMAP *)bmp)->info.height;
				aw = bw +3;
				ah = bh +8;
				
				position_temp = xSrc +(i % 3)*aw;
//modified by dsa 2002/04/17
//				switchonetotwo(BohaoList[i].icon_bmp, position_temp + 4, ySrc+(i / 3)*40+7, \
//				44, 25);
//				SysDrawMonoImage(kbctrl->pGC,BohaoList[i].icon_bmp,position_temp + 4,ySrc+(i / 3)*40+7,\
//						44,25,GPC_BLACK,GPC_WHITE);
					DisplayBMP(kbctrl->pGC,position_temp,ySrc+(i / 3)*ah,bmp);
					FreeBitmap(bmp);
				}
			}
			break;
		default:
			
			break;
			
	}	
	
	
	return ASIX_OK;	
}

STATUS SysOpenSoftKey(U32 pGC,P_U32 areaId,U16 xPos,U16 yPos,U16 keyWidth,U16 keyHeight,U16 numCol,U16 numRow,P_U16 keyMap,P_U8 bitMap)
{
	ATVCB *p;
	int id;
	SOFTKEY *softkey;
	ATV *info,*start;
	DWORD bmp;
			
	if( areaId == NULL )
		return PPSM_ERR_AREA_ID;
	
	/* Get id of the running task */
    get_tid(&id);
    /* Get pointer to ATVCB of the running task */
    p = gSysTcbTbl[id-1].atvcb;

	softkey=( SOFTKEY * )SysLmalloc( sizeof( SOFTKEY ) );
    if( softkey == NULL )
        return PPSM_ERR_NO_MEMORY;
    softkey->pbitmap=(WORD *)Lcalloc( numCol*keyWidth*numRow*keyHeight*2);
    if( softkey->pbitmap == NULL )
	{
		SysLfree( softkey );
		return PPSM_ERR_NO_MEMORY;
	}   
    info=( ATV* )SysLmalloc( sizeof( ATV ) );
    if( info == NULL )
	{
		SysLfree( softkey->pbitmap );
		SysLfree( softkey );
        return PPSM_ERR_NO_MEMORY;
	}
    
    softkey->xPos=xPos;
    softkey->yPos=yPos;
    softkey->numRow=numRow;
    softkey->numCol=numCol;
	softkey->keyWidth=keyWidth;
	softkey->keyHeight=keyHeight;
//    softkey->areaWidth=numCol*keyWidth;
//    softkey->areaHeight=numRow*keyHeight;
	softkey->keymap=keyMap;
	softkey->bitmap=bitMap;
//	softkey->WndId=WndId;
	softkey->areaId=( DWORD )info;

    start=p->stack[ p->top ];
    
    info->mode=CONTINUOUS_MODE;
    info->areaId=( DWORD )info;
    info->flag=AREA_REENABLE;
    info->previous=NULL;
    info->next=start;
    start->previous=info;
    info->type=KEY_AREA;
    info->xsrc=softkey->xPos;
    info->ysrc=softkey->yPos;
    info->xdest=softkey->xPos + softkey->numCol * softkey->keyWidth-1;
    info->ydest=softkey->yPos + softkey->numRow * softkey->keyHeight-1;
//	info->wndId=WndId;
    info->extptr2=softkey;
//	pad=info->extptr2;
    start=info;
    p->stack[ p->top ]=start;
	SaveRec( pGC,softkey->pbitmap,xPos,yPos,numCol*keyHeight,numRow*keyWidth,0 );
//	SysDrawMonoImage(pGC,bitMap,xPos,yPos,numCol*keyWidth,numRow*keyHeight,GPC_BLACK,GPC_WHITE );
						
//	SysDrawBitmap( pGC,bitMap,xPos,yPos,numCol*keyWidth,numRow*keyHeight,GPC_BLACK,GPC_WHITE );
	bmp=LoadBitmap(bitMap, NULL);
	DisplayBMP(pGC,xPos,yPos,bmp);
	FreeBitmap(bmp);
	*areaId=start->areaId;
	return PPSM_OK;
}

STATUS  SysCloseSoftKey ( DWORD areaId )
{
	ATVCB *p;
	ATV *start,*info;
	int id;
	SOFTKEY *softkey;
	DWORD pGC;
		
	/* Get id of the running task */
    get_tid(&id);
    /* Get pointer to ATVCB of the running task */
    p = gSysTcbTbl[id-1].atvcb;

	pGC=GetCurGC( );
    
   	start=p->stack[ p->top ];
	
	if( ( info = findId( start,areaId ) ) == NULL || info->extptr2 == NULL )
		return PPSM_ERR_AREA_ID;
	if( start == info )
	{
		start=info->next;
		if ( start != NULL )
			start->previous=NULL;
	}
	else
	{
		info->previous->next=info->next;
		if( info->next != NULL )
			info->previous->next->previous=info->previous;
	}
	softkey=info->extptr2;
	PutRec( pGC,softkey->pbitmap,softkey->xPos,softkey->yPos,
		softkey->numRow*softkey->keyWidth,softkey->numCol*softkey->keyHeight,GPC_REPLACE_STYLE,0 );
	SysLfree( softkey->pbitmap );
	SysLfree( softkey );
	SysLfree( info );
	p->stack[ p->top ]=start;
	
	return PPSM_OK;
}				 

⌨️ 快捷键说明

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