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

📄 keyboard.c

📁 采用MINIGUI开发的一套GUI界面
💻 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 + -