简单的MiniGUI软键盘.docx
- 文档编号:17114471
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:18
- 大小:29.85KB
简单的MiniGUI软键盘.docx
《简单的MiniGUI软键盘.docx》由会员分享,可在线阅读,更多相关《简单的MiniGUI软键盘.docx(18页珍藏版)》请在冰点文库上搜索。
简单的MiniGUI软键盘
简单的MiniGUI软键盘
由于已经购买mGi模块,故而自己写的这个用不着了,留在这里做个记念吧。
以下是关键代码,其实思想蛮简单,就是发送消息给输入法窗口就万事大吉了。
但是有个最重要的bug就是中文输入无法选择所有的汉字,估计要改一下minigui输入法的源码,mGi的软键盘是利用了两行。
示例图如下,很简陋,如果经过美化,可以做到很漂亮。
#include"common.h"
#defineITEM_NUM114/*coolbar*/
#defineITEM_NUM214/*coolbar*/
#defineITEM_NUM312/*coolbar*/
#defineITEM_NUM412/*coolbar*/
#defineITEM_NUM58/*coolbar*/
#defineIDC_NovaSKB11001/*ime*/
#defineIDC_NovaSKB21002/*ime*/
#defineIDC_NovaSKB31003/*ime*/
#defineIDC_NovaSKB41004/*ime*/
#defineIDC_NovaSKB51005/*ime*/
#defineHEIGHT_SKB115/*软键盘*/
#defineWIDTH_SKB240/*软键盘*/
staticconstchar*caption1[]=
{
"`","1","2","3","4","5","6","7","8","9","0","-","=","<-"
};
staticconstintSCANCODE1[]=
{
SCANCODE_GRAVE,SCANCODE_1,SCANCODE_2,SCANCODE_3,
SCANCODE_4,
SCANCODE_5,SCANCODE_6,SCANCODE_7,SCANCODE_8,
SCANCODE_9,
SCANCODE_0,SCANCODE_MINUS,SCANCODE_EQUAL,
SCANCODE_BACKSPACE
};
staticconstchar*caption2[]=
{
"Tab","q","w","e","r","t","y","u","i","o","p","[","]","\\"
};
staticconstintSCANCODE2[]=
{
SCANCODE_TAB,SCANCODE_Q,SCANCODE_W,SCANCODE_E,
SCANCODE_R,
SCANCODE_T,SCANCODE_Y,SCANCODE_U,SCANCODE_I,SCANCODE_O,
SCANCODE_P,SCANCODE_BRACKET_LEFT,SCANCODE_BRACKET_RIGHT,SCANCODE_BACKSLASH
};
staticconstchar*caption3[]=
{
"Shift","a","s","d","f","g","h","j","k","l",";","'"
};
staticconstintSCANCODE3[]=
{
SCANCODE_LEFTSHIFT,SCANCODE_A,SCANCODE_S,SCANCODE_D,
SCANCODE_F,
SCANCODE_G,SCANCODE_H,SCANCODE_J,SCANCODE_K,
SCANCODE_L,
SCANCODE_SEMICOLON,SCANCODE_APOSTROPHE
};
staticconstchar*caption4[]=
{
"Ctrl","z","x","c","v","b","n","m
",",",".","/","Enter"
};
staticconstintSCANCODE4[]=
{
SCANCODE_LEFTCONTROL,SCANCODE_Z,SCANCODE_X,SCANCODE_C,
SCANCODE_V,
SCANCODE_B,SCANCODE_N,SCANCODE_M,SCANCODE_COMMA,
SCANCODE_PERIOD,
SCANCODE_SLASH,SCANCODE_ENTER
};
staticconstchar*caption5[]=
{
"Del","英","中","Space",
"|","|","->","<-"
};
staticconstintSCANCODE5[]=
{
SCANCODE_REMOVE,-1,-1,SCANCODE_SPACE,
SCANCODE_CURSORBLOCKDOWN,
SCANCODE_CURSORBLOCKUP,SCANCODE_CURSORBLOCKLEFT,
SCANCODE_CURSORBLOCKRIGHT
};
staticvoidcreate_novaskb1(HWNDhWnd)
{
HWNDcb;
COOLBARITEMINFOitem;
inti;
staticBITMAPdel_bmp;
if(LoadBitmap(HDC_SCREEN,&del_bmp,"./little/del.bmp")!
=ERR_BMP_OK)
exit
(1);
cb=CreateWindow(CTRL_COOLBAR,
"",
WS_CHILD|WS_VISIBLE|WS_BORDER,
IDC_NovaSKB1,
0,0,240,20,
hWnd,
0);
item.ItemType=TYPE_TEXTITEM;
item.Bmp=NULL;
item.dwAddData=0;
for(i=0;i item.insPos=i; item.id=i; item.Caption=caption1[i]; item.ItemHint=NULL; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); } /*del按键*/ item.insPos=i; item.id=i; item.ItemType=TYPE_BMPITEM; item.Bmp=&del_bmp; item.ItemHint=NULL; item.Caption=NULL; item.dwAddData=0; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); } staticvoidcreate_novaskb2(HWNDhWnd){ HWNDcb; COOLBARITEMINFOitem; inti; cb=CreateWindow(CTRL_COOLBAR, "", WS_CHILD|WS_VISIBLE|WS_BORDER, IDC_NovaSKB2, 0,22,240,20, hWnd, 0); item.ItemType=TYPE_TEXTITEM; item.Bmp=NULL; item.dwAddData=0; for(i=0;i item.insPos=i; item.id=i; item.Caption=caption2[i]; item.ItemHint=NULL; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); } } staticvoidcreate_novaskb3(HWNDhWnd){ HWNDcb; COOLBARITEMINFOitem; inti; cb=CreateWindow(CTRL_COOLBAR, "", WS_CHILD|WS_VISIBLE|WS_BORDER, IDC_NovaSKB3, 0,44,240,20, hWnd, 0); item.ItemType=TYPE_TEXTITEM; item.Bmp=NULL; item.dwAddData=0; for(i=0;i item.insPos=i; item.id=i; item.Caption=caption3[i]; item.ItemHint=NULL; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); } } staticvoidcreate_novaskb4(HWNDhWnd){ HWNDcb; COOLBARITEMINFOitem; inti; cb=CreateWindow(CTRL_COOLBAR, "", WS_CHILD|WS_VISIBLE|WS_BORDER, IDC_NovaSKB4, 0,66,240,20, hWnd, 0); item.ItemType=TYPE_TEXTITEM; item.Bmp=NULL; item.dwAddData=0; for(i=0;i item.insPos=i; item.id=i; item.Caption=caption4[i]; item.ItemHint=NULL; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); } } staticvoidcreate_novaskb5(HWNDhWnd){ HWNDcb; COOLBARITEMINFOitem; inti; staticBITMAPdown_bmp; staticBITMAPup_bmp; staticBITMAPleft_bmp; staticBITMAPright_bmp; if(LoadBitmap(HDC_SCREEN,&down_bmp, "./little/down.bmp")! =ERR_BMP_OK) exit (1); if(LoadBitmap(HDC_SCREEN,&up_bmp,"./little/up.bmp")! = ERR_BMP_OK) exit (1); if(LoadBitmap(HDC_SCREEN,&left_bmp, "./little/left.bmp")! =ERR_BMP_OK) exit (1); if(LoadBitmap(HDC_SCREEN,&right_bmp, "./little/right.bmp")! =ERR_BMP_OK) exit (1); cb=CreateWindow(CTRL_COOLBAR, "", WS_CHILD|WS_VISIBLE|WS_BORDER, IDC_NovaSKB5, 0,88,240,20, hWnd, 0); item.ItemType=TYPE_TEXTITEM; item.Bmp=NULL; item.dwAddData=0; for(i=0;i item.insPos=i; item.id=i; item.Caption=caption5[i]; item.ItemHint=NULL; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); } #if1 /*down按键*/ item.insPos=i; item.id=i; item.ItemType=TYPE_BMPITEM; item.Bmp=&down_bmp; item.ItemHint=NULL; item.Caption=NULL; item.dwAddData=0; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); /*up按键*/ i++; item.insPos=i; item.id=i; item.ItemType=TYPE_BMPITEM; item.Bmp=&up_bmp; item.ItemHint=NULL; item.Caption=NULL; item.dwAddData=0; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); /*left按键*/ i++; item.insPos=i; item.id=i; item.ItemType=TYPE_BMPITEM; item.Bmp=&left_bmp; item.ItemHint=NULL; item.Caption=NULL; item.dwAddData=0; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); /*right按键*/ i++; item.insPos=i; item.id=i; item.ItemType=TYPE_BMPITEM; item.Bmp=&right_bmp; item.ItemHint=NULL; item.Caption=NULL; item.dwAddData=0; SendMessage(cb,CBM_ADDITEM,0,(LPARAM)&item); #endif } staticintNovaSKBProc(HWNDhWnd,intmessage,WPARAMwParam, LPARAMlParam) { switch(message) { caseMSG_CREATE: create_novaskb1(hWnd); create_novaskb2(hWnd); create_novaskb3(hWnd); create_novaskb4(hWnd); create_novaskb5(hWnd); break; caseMSG_COMMAND: { intid=LOWORD(wParam); intcode=HIWORD(wParam); switch(id) { caseIDC_NovaSKB1: SendMessage(hIMEWnd, MSG_KEYDOWN,SCANCODE1[code],0); break; caseIDC_NovaSKB2: SendMessage(hIMEWnd, MSG_KEYDOWN,SCANCODE2[code],0); break; caseIDC_NovaSKB3: SendMessage(hIMEWnd,MSG_KEYDOWN,SCANCODE3[code],0); break; caseIDC_NovaSKB4: SendMessage(hIMEWnd,MSG_KEYDOWN,SCANCODE4[code],0); break; caseIDC_NovaSKB5: if(code==1) { /*英文*/ SetIMEStatus(IS_ENABLE,0); /*刷新输入窗口*/ ShowWindow(hIMEWnd,SW_HIDE); ShowWindow(hIMEWnd,SW_SHOWNORMAL); } elseif(code==2) { /*中文*/ SetIMEStatus(IS_ENABLE,1); /*刷新输入窗口*/ ShowWindow(hIMEWnd,SW_HIDE); ShowWindow(hIMEWnd, SW_SHOWNORMAL); } else { SendMessage(hIMEWnd,MSG_KEYDOWN,SCANCODE5[code],0); //Send2ActiveClient(MSG_KEYDOWN,SCANCODE_CURSORDOWN,0); //Send2ActiveClient(MSG_KEYUP,SCANCODE_CURSORDOWN,0); } break; } } break; caseMSG_KEYDOWN: Send2ActiveClient(MSG_KEYDOWN,wParam,lParam); break; caseMSG_DESTROY: DestroyAllControls(hWnd); return0; caseMSG_CLOSE: DestroyMainWindow(hWnd); PostQuitMessage(hWnd); return0; } returnDefaultMainWinProc(hWnd,message,wParam,lParam); } staticvoidInitNovaSKBCreateInfo(PMAINWINCREATEpCreateInfo, intx,inty) { pCreateInfo->dwStyle=WS_ABSSCRPOS|WS_BORDER|WS_VISIBLE; pCreateInfo->dwExStyle=WS_EX_TOOLWINDOW; pCreateInfo->spCaption="NovaSKB"; pCreateInfo->hMenu=0; pCreateInfo->hCursor=GetSystemCursor(IDC_ARROW); pCreateInfo->hIcon=0; pCreateInfo->MainWindowProc=NovaSKBProc; pCreateInfo->lx=x; pCreateInfo->ty=y; pCreateInfo->rx=x+WIDTH_SKB; pCreateInfo->by=y+HEIGHT_SKB; pCreateInfo->iBkColor=PIXEL_lightwhite; pCreateInfo->dwAddData=0; pCreateInfo->hHosting=HWND_DESKTOP;} HWNDNovaSKBWindow(HWNDhosting,intx,inty) { HWNDhwnd_novaskb; MAINWINCREATECreateInfo; InitNovaSKBCreateInfo(&CreateInfo,x,y); CreateInfo.hHosting=hosting; hwnd_novaskb=CreateMainWindow(&CreateInfo); if(hwnd_novaskb==HWND_INVALID) return-1; ShowWindow(hwnd_novaskb,SW_HIDE); returnhwnd_novaskb; } 创建于: 2006-05-0715: 30: 30,修改于: 2006-05-0715: 34: 22,已浏览1264次, 有评论20条 网友评论 网友: 本站网友时间: 2006-05-0908: 57: 54IP地址: 218.87.41.? 非常感谢,别人找了n久,功夫不负有心人啊 网友: 朋友时间: 2006-05-1808: 30: 43IP地址: 60.183.132.? 你的版本是free的吗,我的1.3.3版的汉字显示效果实在是差,后来加上了TTF支持,感觉也不 好看,不知道您的字体是怎么弄的(在font配置的时候一般选哪些字体,),很漂亮~希望能得 到您的指点 网友: er时间: 2006-05-1809: 38: 31IP地址: 211.71.95.? 刚开始就是用的1.3.3,也试过1.6.8都差不多,也没有啥特殊配置.就是1.3.3在redhat中有些字 显示两个竖线,不过在开发板上没事. 网友: 阿布时间: 2006-05-1810: 19: 22IP地址: 222.171.7.? 谢谢你提供的源码,好奇怪,我用的是1.3.3,在redhat中用qvfb没事,但是在开发板上有些字 显示两个竖线,和你的情况正好相反,不知道是为什么 网友: guan时间: 2006-06-2316: 29: 36IP地址: 219.131.185.? 不错,先谢谢了 网友: 本站网友时间: 2006-09-1420: 15: 23IP地址: 219.137.116.? 太好了,谢谢 网友: 本站网友时间: 2006-09-1420: 18: 41IP地址: 219.137.116.? 在windows,vc++6.0调试出错 errorC2065: hIMEWnd': undeclaredidentifier errorC2065: 'Send2ActiveClient': undeclaredidentifier 网友: 本站网友时间: 2006-11-0314: 36: 52IP地址: 222.92.76.? 我想问一下把这代码放到哪里去哈 我现在初学不知道怎么搞
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 MiniGUI 软键