📄 asix_key.c
字号:
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 + -