📄 keyboard.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mgext.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/time.h>
#include <ctype.h>
#include "common.h"
#include "keyboard.h"
unsigned char str_edit[50];
int name_keyborad_cols;
int name_keyborad_rows;
#define COL_MAX 10//20列
#define ROW_MAX 20 //共10行
#define KEY_MUT 30//每行跳动30
int TagNameDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
int id,nc;
static unsigned char buff[2];
static unsigned char tag_clic_str[2];
static unsigned char tag_precul_str[15];
static unsigned char tag_cul_str [15];
switch (message)
{
case MSG_INITDIALOG:
name_keyborad_cols=1;
name_keyborad_rows=1;
str_edit[1]='\0';
buff[0]='\0';
tag_clic_str [2] = '\0';
tag_precul_str[15]= '\0';
tag_cul_str [14]= '\0';
return 1;
case MSG_SHOWWINDOW:
{
}
break;
case MSG_KEYDOWN:
break;
case MSG_KEYUP:
if(id==KEY_EXIT) SendMessage (hDlg, MSG_CLOSE, 0, 0L);
if(id==KEY_LEFT)
{
name_keyborad_rows--;
if(name_keyborad_rows<1)name_keyborad_rows=ROW_MAX;
ctrl_kb_tag_id=TAG_BN+name_keyborad_cols*30+name_keyborad_rows;
SetFocusChild( GetDlgItem(hDlg,ctrl_kb_tag_id));
}
if(id==KEY_RIGHT)
{
name_keyborad_rows++;
if(name_keyborad_rows>ROW_MAX)name_keyborad_rows=1;
ctrl_kb_tag_id=TAG_BN+name_keyborad_cols*30+name_keyborad_rows;
SetFocusChild( GetDlgItem(hDlg,ctrl_kb_tag_id));
}
if(id==KEY_UP)
{
name_keyborad_cols--;
if(name_keyborad_cols<1)name_keyborad_cols=COL_MAX;
ctrl_kb_tag_id=TAG_BN+name_keyborad_cols*30+name_keyborad_rows;
SetFocusChild( GetDlgItem(hDlg,ctrl_kb_tag_id));
}
if(id==KEY_DOWN)
{
name_keyborad_cols++;
if(name_keyborad_cols>COL_MAX)name_keyborad_cols=1;
ctrl_kb_tag_id=TAG_BN+name_keyborad_cols*30+name_keyborad_rows;
SetFocusChild( GetDlgItem(hDlg,ctrl_kb_tag_id));
}
if(id==KEY_ENTER)
{
GetDlgItemText(hDlg, GetDlgCtrlID(GetFocusChild(hDlg)),str_edit,1);
printf("str_edit=%s\n",str_edit);
SetDlgItemText(hDlg,TAG_EDIT,str_edit);
}
break;
case MSG_COMMAND:
{id= LOWORD (wParam);
if(id>=TAG_BN&&id<=TAG_BN1120){
GetDlgItemText(hDlg, id,tag_clic_str,2);
strcpy(tag_precul_str,tag_cul_str);
strncat(tag_cul_str,tag_clic_str,2);
//SetDlgItemText(hDlg, TAG_EDIT,buff);
SetDlgItemText(hDlg, TAG_EDIT,tag_cul_str);
// memset(tag_clic_str,0,15);
}
if(id==TAG_OK){
printf("%d\n",strlen(tag_cul_str));
SendMessage(GetHosting(hDlg),MSG_COMMAND,EN_CHANGE,(LPARAM)tag_cul_str) ;
memset(tag_cul_str,0,15);//清空cul_str
SendMessage (hDlg, MSG_CLOSE, 0, 0);
}
if ( id==TAG_CANCEL){
SendMessage (hDlg, MSG_CLOSE, 0, 0);
memset(tag_cul_str,0,15);//清空cul_str
}
if ( id==TAG_BACK){
SetDlgItemText(hDlg, TAG_EDIT,tag_precul_str);
strcpy(tag_cul_str,tag_precul_str);
}
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
return 0;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
void TagNameConfig (HWND hWnd)
{
DlgTagName.controls = CtrlTagName;
DialogBoxIndirectParam (&DlgTagName, hWnd, TagNameDialogProc, 0L);
}
/*数字输入对话框*/
int DigitalKeyDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
int id ;
unsigned char clic_str[2];
static unsigned char precul_str[15];
static unsigned char cul_str [15];
static int curnum_bn;
id= LOWORD (wParam);
switch (message)
{
case MSG_INITDIALOG:
clic_str [2] = '\0';
precul_str[15]= '\0';
cul_str [15]= '\0';
curnum_bn=NUM_BN0;
SetFocusChild(GetDlgItem(hDlg ,curnum_bn));
// SetWindowCallbackProc(GetDlgItem(hDlg,Digital_Edit),MATHInput);
return 1;
case MSG_DESTROY:
break;
case MSG_SHOWWINDOW:
{
}
break;
case MSG_KEYUP:
{
if(id==SCANCODE_W){
curnum_bn=numkey_id_up[curnum_bn-NUM_BN0];
SetFocusChild( GetDlgItem(hDlg,curnum_bn));
}
if(id==SCANCODE_S){
curnum_bn=numkey_id_down[curnum_bn-NUM_BN0];
SetFocusChild( GetDlgItem(hDlg,curnum_bn));
printf("curnum_bn%d\n",curnum_bn);
}
if(id==SCANCODE_A){
curnum_bn=numkey_id_left[curnum_bn-NUM_BN0];
SetFocusChild( GetDlgItem(hDlg,curnum_bn));
}
if(id==SCANCODE_D){
curnum_bn=numkey_id_right[curnum_bn-NUM_BN0];
SetFocusChild( GetDlgItem(hDlg,curnum_bn));
}
if(id==SCANCODE_ENTER){
//选数字
if(curnum_bn>=NUM_BN0&&curnum_bn<=NUM_BNSym){
GetDlgItemText(hDlg, curnum_bn,clic_str,1);
strcpy(precul_str,cul_str);
strcat(cul_str,clic_str);
SetDlgItemText(hDlg, DialogDigital_Edit_Input,cul_str);
printf(" cul_str=%s\n",cul_str);
}
//把选好的数值输入到父窗口
if(curnum_bn==NUM_BNOK){
//printf("get hosting cul_str=%s\n",cul_str);
SendMessage(GetHosting(hDlg),MSG_COMMAND,EN_CHANGE,(LPARAM)cul_str) ;
memset(cul_str,0,15);//清空cul_str
SendMessage (hDlg, MSG_CLOSE,0,0);
}
if ( curnum_bn==NUM_BNCancel){
SendMessage (hDlg, MSG_CLOSE, 0, 0);
memset(cul_str,0,15);//清空cul_str
}
if ( curnum_bn==NUM_BNBack){
SetDlgItemText(hDlg, DialogDigital_Edit_Input,precul_str);
strcpy(cul_str,precul_str);
}
}
}
break;
case MSG_COMMAND:
{//id= LOWORD (wParam);
/*if(id>=NUM_BN0&&id<=NUM_BNSym){
GetDlgItemText(hDlg, id,clic_str,1);
strcpy(precul_str,cul_str);
strcat(cul_str,clic_str);
SetDlgItemText(hDlg, DialogDigital_Edit_Input,cul_str);
}
if(id==NUM_BNOK){
SendMessage(GetHosting(hDlg),MSG_COMMAND,EN_CHANGE,(LPARAM)cul_str) ;
memset(cul_str,0,15);//清空cul_str
SendMessage (hDlg, MSG_CLOSE, 0, 0);
}
if ( id==NUM_BNCancel){
SendMessage (hDlg, MSG_CLOSE, 0, 0);
memset(cul_str,0,15);//清空cul_str
}
if ( id==NUM_BNBack){
SetDlgItemText(hDlg, DialogDigital_Edit_Input,precul_str);
strcpy(cul_str,precul_str);
}
*/
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
return 0;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
/*启动数字键盘*/
void DigitalConfig (HWND hWnd)
{
hWndMATH1=hWnd;
DlgDigital.controls = CtrlDigital;
DialogBoxIndirectParam (&DlgDigital, hWnd, DigitalKeyDialogProc, 0L);
}
unsigned char *box_source[] = {"AI1 ","AI2","AI3","AI4","AI5","AI6","AI7", "AI8","AI9","AI10",
"AI11","AI12","AI13","AI14", "AI15","AI16","AI17","AI18",
"AI19","AI20"};
unsigned char *box_func[] = {"SIN ","COS","EXP ","SQRT","LN ","LOG","ABS ","POW","ROUND ","HI","LO ","PCT"};
//初始化公式键盘中的LISTBOX
void FmuKeyInit(HWND hDlg)
{
int i;
for(i=0;i<20;i++){
SendMessage(GetDlgItem(hDlg,Fu_BOX1), LB_ADDSTRING,0,(LPARAM)box_source[i]) ;
}
for(i=0;i<12;i++){
SendMessage(GetDlgItem(hDlg,Fu_BOX2), LB_ADDSTRING,0,(LPARAM)box_func[i]) ;
}
}
//数学公式输入对话框
int FmuKeyDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
int id ,nc;
unsigned char str1[1];
unsigned char clic_str[2];
static int fm_focus; //当前控件焦点所在位置
static int listbox_select;
static int listbox_select1;
static unsigned char precul_str [15];
static unsigned char cul_str [15];
static unsigned char str_edit[50];
str1[1]= '\0';
clic_str [2] = '\0';
//precul_str[15]= '\0';
cul_str [15]= '\0';
id= LOWORD (wParam);
nc= HIWORD (wParam);
switch (message)
{
case MSG_INITDIALOG:
FmuKeyInit( hDlg);
bzero(str_edit,50);
fm_focus=Fu_BOX1;
SetFocusChild(GetDlgItem(hDlg ,fm_focus));
listbox_select=1;
listbox_select1=1;
SendMessage (GetDlgItem(hDlg,Fu_BOX1), LB_SETCURSEL, 1, (LPARAM)listbox_select);
SendMessage (GetDlgItem(hDlg,Fu_BOX2), LB_SETCURSEL, 1,0 );//(LPARAM)listbox_select1
return 1;
case MSG_SHOWWINDOW:
{
}
break;
case MSG_KEYDOWN:
if(!keydowned)
{
if((id==KEY_ENTER)&&(fm_focus>BNF_FISRT&&fm_focus<= Fu_BNTRE))
SendDlgItemMessage(hDlg, fm_focus, MSG_LBUTTONDOWN, 0,0);
keydowned=1;
}
break;
case MSG_KEYUP:
keydowned=0;
{
if(id==KEY_UP){
if(fm_focus>BNF_FISRT&&fm_focus<=Fu_BNTCancel){
fm_focus=fukey_id_up[fm_focus-Fu_BOX1];
SetFocusChild( GetDlgItem(hDlg,fm_focus));
}
if(fm_focus==Fu_BOX1){
if(listbox_select>0){
listbox_select--;
SendMessage (GetDlgItem(hDlg,Fu_BOX1), LB_SETCURSEL, listbox_select,0 );
}
}
if(fm_focus==Fu_BOX2){
if(listbox_select1>0){
listbox_select1--;
SendMessage (GetDlgItem(hDlg,Fu_BOX2), LB_SETCURSEL, listbox_select1,0 );
}
}
}
if(id==KEY_DOWN){
if(fm_focus>BNF_FISRT&&fm_focus<=Fu_BNTCancel){
fm_focus=fukey_id_down[fm_focus-Fu_BOX1];
SetFocusChild( GetDlgItem(hDlg,fm_focus));
}
if(fm_focus==Fu_BOX1){
if(listbox_select<sizeof(*box_source)){
listbox_select++;
}
SendMessage (GetDlgItem(hDlg,Fu_BOX1), LB_SETCURSEL,listbox_select, 0);
}
if(fm_focus==Fu_BOX2){
if(listbox_select1<12){
listbox_select1++;
SendMessage (GetDlgItem(hDlg,Fu_BOX2), LB_SETCURSEL,listbox_select1, 0);
}
//else listbox_select=11;
printf("listbox_select=%d\n",listbox_select1);
}
}
if(id==KEY_LEFT){
fm_focus=fukey_id_left[fm_focus-Fu_BOX1];
SetFocusChild( GetDlgItem(hDlg,fm_focus));
if(fm_focus==Fu_BOX1)listbox_select=0;
}
if(id==KEY_RIGHT){
fm_focus=fukey_id_right[fm_focus-Fu_BOX1];
SetFocusChild( GetDlgItem(hDlg,fm_focus));
if(fm_focus==Fu_BOX2)listbox_select=0;
}
if(id==SCANCODE_ENTER)
{
//选数字
if((fm_focus>BNF_FISRT)&&(fm_focus<= Fu_BNTRE))
{
SendDlgItemMessage(hDlg, fm_focus, MSG_LBUTTONUP, 0,0);
GetDlgItemText(hDlg, fm_focus,str1,1);
strcat(str_edit,str1);
//printf("str_edit=%s\n",str_edit);
//SetDlgItemText(hDlg,Fu_EDIT,"");
SetDlgItemText(hDlg,Fu_EDIT,str_edit);
}
//选listbox中的 文本
if(fm_focus==Fu_BOX1)
{
strcat(str_edit,box_source[listbox_select]);
SetDlgItemText(hDlg,Fu_EDIT,str_edit);
}
if(fm_focus==Fu_BOX2){
strcat(str_edit,box_func[listbox_select]);
SetDlgItemText(hDlg,Fu_EDIT,str_edit);
}
//把选好的数值输入到父窗口
if(fm_focus==NUM_BNOK){
SendMessage(GetHosting(hDlg),MSG_COMMAND,EN_CHANGE,(LPARAM)cul_str) ;
memset(cul_str,0,15);//清空cul_str
SendMessage (hDlg, MSG_CLOSE,0,0);
}
if ( fm_focus==NUM_BNCancel){
SendMessage (hDlg, MSG_CLOSE, 0, 0);
memset(cul_str,0,15);//清空cul_str
}
if ( fm_focus==NUM_BNBack){
SetDlgItemText(hDlg, DialogDigital_Edit_Input,precul_str);
strcpy(cul_str,precul_str);
}
}
}
break;
case MSG_COMMAND:
{
if(nc==BN_CLICKED)//被设置了焦点
{
fm_focus=GetDlgCtrlID(GetFocusChild(hDlg));
}
//id= LOWORD (wParam);
//选listbox1 中的文本
/*if(id==Fu_BNTlup){
if(listbox_select>0){
listbox_select--;
}
SendMessage (GetDlgItem(hDlg,Fu_BOX1), LB_SETCURSEL, listbox_select,0 );
}
if(id==Fu_BNTldown){
if(listbox_select<20){
listbox_select++;
}
SendMessage (GetDlgItem(hDlg,Fu_BOX1), LB_SETCURSEL,listbox_select, 0);
}
if(id==Fu_BNTlok){
strcat(str_edit,source[listbox_select]);
SetDlgItemText(hDlg,Fu_EDIT,str_edit);
}
//选listbox2 中的文本
if(id==Fu_BNTrup){
if(listbox_select>0){
listbox_select--;
}
SendMessage (GetDlgItem(hDlg,Fu_BOX2), LB_SETCURSEL, listbox_select,0 );
}
if(id==Fu_BNTrdown){
if(listbox_select<12){
listbox_select++;
}
SendMessage (GetDlgItem(hDlg,Fu_BOX2), LB_SETCURSEL,listbox_select, 0);
}*/
if(id==Fu_BNTrok){
strcat(str_edit,box_func[listbox_select]);
SetDlgItemText(hDlg,Fu_EDIT,str_edit);
}
//选数字
if(id>BNF_FISRT&&id<=Fu_BNTRE){
GetDlgItemText(hDlg, id,str1,1);
strcat(str_edit,str1);
//printf("str_edit=%s\n",str_edit);
//SetDlgItemText(hDlg,Fu_EDIT,"");
SetDlgItemText(hDlg,Fu_EDIT,str_edit);
}
//把写好的公式输入到父窗口
if(id==Fu_BNTOK){
SendMessage(GetHosting(hDlg),MSG_COMMAND,EN_CHANGE,(LPARAM)str_edit) ;
memset(str_edit,0,15);//清空cul_str
SendMessage (hDlg, MSG_CLOSE, 0, 0);
}
if ( id==Fu_BNTBack){
}
if ( id==Fu_BNTCancel){
SendMessage (hDlg, MSG_CLOSE, 0, 0);
memset(str_edit,0,15);//清空str_edit
}
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
/*启动插入数学运算式键盘*/
void FormationDlg (HWND hWnd)
{
hWndMATH1=hWnd;
DlgDigitalForm.controls = CtrlDigitaForm;
DialogBoxIndirectParam (&DlgDigitalForm, hWnd, FmuKeyDialogProc, 0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -