asix_key.c

来自「一个操作系统源代码 用于嵌入式设备 在Vc++环境下仿真 成功移植到多款处理器上」· C语言 代码 · 共 1,439 行 · 第 1/5 页

C
1,439
字号
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%3 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_4:
							Enable( kbctrl,KEY_4 );
							if ( kbctrl->keycount == 1 )
							{
								TextOut(pGC,"G",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"H",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"I",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%3 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_5:
							Enable( kbctrl,KEY_5 );
							if ( kbctrl->keycount == 1 )
							{
								TextOut(pGC,"J",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"K",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"L",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%3 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_6:
							Enable( kbctrl,KEY_6 );
							if ( kbctrl->keycount == 1 )
							{
								TextOut(pGC,"M",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"N",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"O",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%3 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_7:
							Enable( kbctrl,KEY_7 );
							if ( kbctrl->keycount == 1 )
							{
								TextOut(pGC,"P",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"Q",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"R",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"S",kbctrl->x+18+kbctrl->boxw*3+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%4 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%4 == 3 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%4 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%4 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_8:
							Enable( kbctrl,KEY_8 );
							if ( kbctrl->keycount == 1 )
							{
								TextOut(pGC,"T",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"U",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"V",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%3 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%3 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_9:
							Enable( kbctrl,KEY_9 );
							if ( kbctrl->keycount == 1 )
							{
								TextOut(pGC,"W",kbctrl->x+18+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"X",kbctrl->x+18+kbctrl->boxw+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"Y",kbctrl->x+18+kbctrl->boxw*2+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								TextOut(pGC,"Z",kbctrl->x+18+kbctrl->boxw*3+5,kbctrl->y+2,0,GPC_BLACK,GPC_REPLACE_STYLE);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%4 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%4 == 3 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%4 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%4 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_Asterisk:
							Enable( kbctrl,KEY_Asterisk );
							if ( kbctrl->keycount == 1 )
							{
								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);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 3 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 4 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*4+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%5 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*4+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
							case KEY_NO:
							Enable( kbctrl,KEY_NO );
							if ( kbctrl->keycount == 1 )
							{
								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);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 2 )
							{
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 3 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 4 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*2+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( kbctrl->keycount%5 == 0 )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*3+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*4+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							else if ( ( kbctrl->keycount%5 == 1 )&&( kbctrl->keycount != 1 ) )
							{
								InvRec( pGC,kbctrl->x+18+kbctrl->boxw*4+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
								InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);
							}
							break;
						}
						StartTimer( kbctrl->timerId );
					}
				}else
				if( kbctrl->tabflag%4 == 2 )
				{
					if( kbctrl->keycount == 0 )
						kbctrl->prekey=kbctrl->curkey;
					if( kbctrl->prekey != kbctrl->curkey )
					{
						kb_msg.wparam=ProcessSmall( kbctrl );
						Suspend( kbctrl );
						kbctrl->keycount=0;
						kbctrl->prekey=kbctrl->curkey;
						//kb_msg.lparam=kbctrl->windowid;
						//kb_msg.lparam=FocusWindow->wnd_id;
						kb_msg.lparam=((ASIX_WINDOW *)GetFocus( ))->wnd_id;
						kb_msg.message=WM_CHAR;
						ClearRec( pGC,GPC_WHITE,kbctrl->x+18+1,kbctrl->y+1,
										kbctrl->boxw*5,kbctrl->boxw,GPC_REPLACE_STYLE );
						AdvSendMessage(GetCurTask()->id,(P_MESSAGE)(&kb_msg),NO_SWAP_TASK);
						goto SHOW_NEW_CHAR_small;/* show the new char */	
					}
					else
					{
					SHOW_NEW_CHAR_small:
						kbctrl->keycount++;
						switch( kbctrl->prekey )
						{
							case KEY_0:
							Enable( kbctrl,KEY_0 );
							if( kbctrl->keycount <= 5 )
							{
								SHOW_FIRST_5_CHAR_0_SMALL:
								if ( kbctrl->keycount == 1 )
								{
									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);
									InvRec( pGC,kbctrl->x+18+1,kbctrl->y+1,kbctrl->boxw,kbctrl->boxw);

⌨️ 快捷键说明

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