configdisp.c

来自「采用MINIGUI开发的一套GUI界面」· C语言 代码 · 共 474 行

C
474
字号


#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 "configdisp.h"


static DLGTEMPLATE DlgSetDisplay = 
{
     WS_VISIBLE,//WS_BORDER | WS_CAPTION|
    WS_EX_NONE,
    0, TOP,WIDTH, HEIGHT-TOP,
    "画面页面",
    0, 0,
   CONTROL_MAX, NULL,
    0 
};    //100表示下拉框下拉最大为 100
unsigned char *str_disp_init[]={
	"曲线","棒图","数字","关闭"
	"水平","垂直", 
	"黑色","白色" ,"红色","绿色","蓝色","紫色"
};
unsigned char *color[]={
	"蓝","绿" ,"青绿","白","红","紫红","黄"
};
unsigned char *status_init[]={
	"关闭","启动","启动1~6","启动1~6"
};




static WNDPROC disp_edit_proc;




static int RestrictedEditBox(HWND hwnd, int message, WPARAM wParam, LPARAM lParam)
{
    if (message == MSG_CHAR) {
        DWORD my_style = GetWindowAdditionalData (hwnd);

        /* Determine whether the character should be masked. */
        if ((my_style &  ES_DIGIT_ONLY) && (wParam < '0' || wParam > '9'|| wParam=='.'))
            return 0;
        else if (my_style &  ES_ALPHA_ONLY)
            if (!((wParam >= 'A' && wParam <= 'Z') || (wParam >= 'a' && wParam <= 'z')))
                /* It is not the desired character, just return. */
                return 0;
    }

    /* Calling old procedure to handle the messages using default handler. */
  	 return (*disp_edit_proc) (hwnd, message, wParam, lParam);
}

void DrawMyBitmap(HDC hdc, PBITMAP bmp, int x, int y, int w, int h)
{
    if (bmp)
        FillBoxWithBitmap(hdc, x, y, w, h, bmp);
    else
        TextOut (hdc, x, y, "a");
}


int  DisplayDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
	unsigned char  str[10];
	    static int ctl_disp_id;//按键ID号或者是文本焦点号码
    static int index;
    static int num ;
    static  BOOL flag_entered;
static int focus_disp_bn;

	int id,nc;
     HWND ctrl_hwnd;
	HDC hdc;
	HDC hmemdc;
	ctrl_hwnd=lParam;
	 id= LOWORD (wParam);//控件编号
	 nc=HIWORD(wParam);  //控件通知码		
	 
    switch (message) 
    { 
    case MSG_CREATE:

		break;
    case MSG_INITDIALOG:	
		//初始化数据
		//keydowned=1;
		ai_chan_sum=6;
		focus_disp_bn=DISP_BN2;
		 
	     //GetDlgItem(hDlg,CONF_DISP_UP) 
		 SendMessage(GetDlgItem(hDlg,DISP_BN2), BM_SETSTATE , BST_PUSHED ,0);
		//根据页面数初始化数据
		  ConfDispInit(hDlg);
		 SetFocusChild( GetDlgItem(hDlg,BOX_MODE));
  		ctl_disp_id=BOX_MODE;//GetDlgCtrlID(GetFocusChild(hDlg)); 
		//printf("ctl_disp_id=%d inited \n",ctl_disp_id);
	//	SendMessage (hDlg, MSG_BUTTONCOMMAND, 0, 0L);
	/*
        disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_L1), RestrictedEditBox);
	  disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_L2), RestrictedEditBox);
        disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_L3), RestrictedEditBox);
	  disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_L4), RestrictedEditBox);
        disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_L5), RestrictedEditBox);
	  disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_L6), RestrictedEditBox);
        disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_DH1), RestrictedEditBox);
	  disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_DH2), RestrictedEditBox);
        disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_DH3), RestrictedEditBox);
	  disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_DH4), RestrictedEditBox);
        disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_DH5), RestrictedEditBox);
	  disp_edit_proc = SetWindowCallbackProc (GetDlgItem(hDlg,EDIT_DH6), RestrictedEditBox);
*/

	return 1;
	
	  case MSG_SHOWWINDOW:
			{  

		      }  		      
		  break;     
	
   case MSG_PAINT:

	    break;	
 	case MSG_KEYDOWN:
		printf("1..");
	if(!keydowned)
		{
	if(id==KEY_LEFT)	
		SendDlgItemMessage(hDlg, CONF_DISP_LEFT, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_DISP_RIGHT, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_DISP_UP, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_DISP_DOWN, MSG_LBUTTONDOWN, 0,0);
	 if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_DISP_ENTER, MSG_LBUTTONDOWN, 0,0);
	if(id==SCANCODE_F3)SendDlgItemMessage(hDlg, CONF_DISP_DLEFT, BM_SETSTATE , BST_PUSHED ,0);
	 if(id==SCANCODE_F4)
	 	SendDlgItemMessage(hDlg, CONF_DISP_DRIGHT, BM_SETSTATE , BST_PUSHED ,0);

		keydowned=1;
		}
	  break;	
	
	 case MSG_KEYUP:
	 	printf("22..");
		keydowned=0;
		if(id==SCANCODE_F1)  		EndDialog (hDlg, 0);
		if(id==KEY_EXIT)  		SendMessage (hDlg, MSG_CLOSE, 0, 0L);
		if(id==KEY_LEFT) 	
			{
			SendDlgItemMessage(hDlg, CONF_DISP_LEFT, MSG_LBUTTONUP, 0,0);
              	ctl_disp_id=disp_id_left[ctl_disp_id-BOX_MODE];
                   SetFocusChild( GetDlgItem(hDlg,ctl_disp_id));
      		     }
		if(id==KEY_RIGHT) 
			{
			SendDlgItemMessage(hDlg, CONF_DISP_RIGHT, MSG_LBUTTONUP, 0,0);
     			ctl_disp_id=disp_id_right[ctl_disp_id-BOX_MODE];
            		 SetFocusChild( GetDlgItem(hDlg,ctl_disp_id));
			}
		
		if(id==KEY_UP) 
			{
			SendDlgItemMessage(hDlg, CONF_DISP_UP, MSG_LBUTTONUP, 0,0);
 			if(flag_entered)//按过ENTER后选择BOX里面内容
				{
				 SendDlgItemMessage(hDlg,ctl_disp_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
				index--;if(index<0)index=num-1;
				SendDlgItemMessage(hDlg,ctl_disp_id,CB_SETCURSEL,index,0);				
				}		  
                   else 
                         	{
      				ctl_disp_id=disp_id_up[ctl_disp_id-BOX_MODE];
      				SetFocusChild( GetDlgItem(hDlg,ctl_disp_id));
      				}
			}
		if(id==KEY_DOWN) 
			{	
			SendDlgItemMessage(hDlg, CONF_DISP_DOWN, MSG_LBUTTONUP, 0,0);
 			if(flag_entered)//按过ENTER后选择BOX里面内容
     				{
     			 SendDlgItemMessage(hDlg,ctl_disp_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
				index++;if(index==num)index=0;
				SendDlgItemMessage(hDlg,ctl_disp_id,CB_SETCURSEL,index,0);				
 				}	  
                    else 
                 	    {
          		   ctl_disp_id=disp_id_down[ctl_disp_id-BOX_MODE];			
            	 	     SetFocusChild( GetDlgItem(hDlg,ctl_disp_id));				
            	           }
	 		}
		if(id==KEY_ENTER) 
			{	
	 		SendDlgItemMessage(hDlg, CONF_DISP_ENTER, MSG_LBUTTONUP, 0,0);
			//判断是否为需要输入数字的编辑框
        			 if(flag_entered) 
         			{
       			flag_entered=0;
       			SetFocusChild( GetDlgItem(hDlg,ctl_disp_id));
        			}
       			 else
                     	{
                     	if((ctl_disp_id<=EDIT_DH6)&&(ctl_disp_id>=EDIT_L1))
						 DigitalConfig (hDlg ); //弹出数字键盘
				else
					{
                     	 SendDlgItemMessage(hDlg,ctl_disp_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
                     	flag_entered=1;
				index=SendDlgItemMessage(hDlg,ctl_disp_id,CB_GETCURSEL,0,0);
			        num=SendDlgItemMessage(hDlg,ctl_disp_id,CB_GETCOUNT,0,0);
                     		}
				}
	 	 	}
		if(id==SCANCODE_F2) 
			{	
			WriteDispInfo(hDlg);
	 	        SaveDispData(hDlg);
	  		EndDialog (hDlg, 0);	
			}
		 if(id==SCANCODE_F3) 
			{	
	SendDlgItemMessage(hDlg, CONF_DISP_DRIGHT, BM_SETSTATE , 0 ,0);

	SendMessage(hDlg,MSG_COMMAND,CONF_DISP_DLEFT,0);

		 	}
		  if(id==SCANCODE_F4) 
			{	
	SendDlgItemMessage(hDlg, CONF_DISP_DRIGHT, BM_SETSTATE , 0 ,0);

	SendMessage(hDlg,MSG_COMMAND,CONF_DISP_DRIGHT,0);

		 	}
		break;   
	case MSG_COMMAND:
	     {
		 	printf("3..");
	   	if(nc==EN_CLICKED)//被设置了焦点
			{
		  	ctl_disp_id=GetDlgCtrlID(GetFocusChild(hDlg)); 
			}   
		if (id == EN_CHANGE)
			{
			SetDlgItemText(hDlg, ctl_disp_id,(unsigned char *)lParam);
			}			
	  if(id==CONF_DISP_DRIGHT)
	  	{
      		SendMessage(GetDlgItem(hDlg,focus_disp_bn), BM_SETSTATE , 0 ,0);
 		focus_disp_bn++;
	  	if(focus_disp_bn>DISP_BN6)focus_disp_bn=DISP_BN1;
      		SendMessage(GetDlgItem(hDlg,focus_disp_bn), BM_SETSTATE , BST_PUSHED ,0);
	  	}
 	 if(id==CONF_DISP_DLEFT)
	  	{
	  	//设置被选择的下一个通道的按钮背景
		focus_disp_bn--;
	  	if(focus_disp_bn<DISP_BN1)focus_disp_bn=DISP_BN6;
      		SendMessage(GetDlgItem(hDlg,focus_disp_bn), BM_SETSTATE , BST_PUSHED ,0);
	  	}
	  if ( id==CONF_DISP_DBACK) 	
	  	{
          SaveDispData(hDlg);
	  EndDialog (hDlg, 0);
	  	}
	  

	 
	}
		
      	
	
	break;
	case MSG_DESTROY:
		DestroyAllControls(hDlg);
		break;
	case MSG_CLOSE:

	

    		EndDialog (hDlg, 0);
		
		break;

		
    	}
   	 return DefaultDialogProc (hDlg, message, wParam, lParam);
    

}
void  DlgConfDisp (HWND hWnd)
{
    DlgSetDisplay.controls = ctrl_conf_disp;
    
    DialogBoxIndirectParam (&DlgSetDisplay, hWnd, DisplayDialogProc, 0L);
}
 


void ConfDispInit(HWND hDlg)
{
  int i,j;
  int box_id;
  int value;
  unsigned char str_resource[10];
  unsigned char str[10];
  //先假设AI总数为16
  ai_chan_sum=16;
      for(i=0;i<4;i++)
      {
	 sprintf(str,str_disp_init[i]);
        SendMessage(GetDlgItem(hDlg,BOX_MODE),CB_ADDSTRING,0, (LPARAM)str) ;
      	}
	 for(i=4;i<6;i++)
      {
	 sprintf(str,str_disp_init[i]);
        SendMessage(GetDlgItem(hDlg,BOX_DIRECT),CB_ADDSTRING,0, (LPARAM)str) ;
      	}  
      for(i=6;i<=11;i++)
      {
	 sprintf(str,str_disp_init[i]);
        SendMessage(GetDlgItem(hDlg,BOX_BACKG),CB_ADDSTRING,0, (LPARAM)str) ;
      	}
	  //根据通道总数提供可选项
      for(j=BOX_CHAN1;j<=BOX_CHAN6;j++)	  
      {     
            for(i=1;i<ai_chan_sum;i++)
            {
      	 	sprintf(str,"AI%d",i);
              SendMessage(GetDlgItem(hDlg,j),CB_ADDSTRING,0, (LPARAM)str) ;
            	}
      }
  for(j=BOX_COLOR1;j<=BOX_COLOR6;j++)	  
      { 	 
            for(i=0;i<6;i++)
            {
      	 	sprintf(str,color[i]);
              SendMessage(GetDlgItem(hDlg,j),CB_ADDSTRING,0, (LPARAM)str) ;
            	}
      }  
	 for(j=BOX_H1;j<=BOX_H6;j++)	  
      {
      		 
            for(i=1;i<4;i++)
            {
      	 	 sprintf(str,"%d",i);
              SendMessage(GetDlgItem(hDlg,j),CB_ADDSTRING,0, (LPARAM)str) ;
            	}
      }  
    for(j=BOX_STATUS_DI;j<=BOX_STATUS_DI+3;j++)	
            {
       	  sprintf(str,status_init[0]);
              SendMessage(GetDlgItem(hDlg,j),CB_ADDSTRING,0, (LPARAM)str) ;

            	}
//给编辑框赋值
         for(j=EDIT_L1;j<=EDIT_DH6;j++)	
            {
      	 	
		SetDlgItemInt(hDlg,j,0,2);       
         	}
//设置初始值
bzero(str,sizeof(str_resource)); 
       for(j=0;j<6;j++)
       {
              SendDlgItemMessage(hDlg,BOX_CHAN1+j,CB_SETCURSEL,j,0);				
       	SendDlgItemMessage(hDlg,BOX_COLOR1+j,CB_SETCURSEL,j,0);	
     
	
//	 sprintf(str_resource,"AI%d",(j+1));
 //   	GetIntValueFromEtcFile("system.conf", str_resource,"ScaleHigh",&value);
//	channel_disp[j].h_limit=value;
   //   SetDlgItemInt(hDlg,EDIT_L1+j, channel_disp[j].l_limit,0) ;/*   Day.[1-31]   */   
   //   SetDlgItemInt(hDlg,EDIT_DH1+j,channel_disp[j].h_limit,0) ;/*   Day.[1-31]   */   
	  }
	 
	   
    //  	GetValueFromEtcFile("system.conf", "AI1","ScaleHigh",str,50);
//	printf("  ----  %s  ----\n",str);  

}


int  WriteDispInfo(HWND hDlg)
{
int id;
int color;

unsigned char str[20];
    for(id=0;id<6;id++)
    {
    	color=SendDlgItemMessage(hDlg,BOX_COLOR1+id,CB_GETCURSEL,0,0);
	channel_disp[id].color=SysPixelIndex[color+9];
    }

}


 void SaveDispData(HWND hDlg)
{
HDC hdc;
int id;
int p;
int low,high;
int box_index;
int color;
int digit;
unsigned char *ai_name;
unsigned char *ai_func;
unsigned char str[20];
unsigned char *str_buf;

unsigned char str_resource[10];
unsigned char str_goal[10];
int i;
bzero(str,sizeof(str_resource)); 	
id= 1;
 printf("\nid=%d\n",id);
//     GetDlgItemText(hDlg,BOX_MODE,str,4);
box_index=SendDlgItemMessage(hDlg,BOX_MODE,CB_GETCURSEL,0,0);
disp_mode=box_index;
box_index=SendDlgItemMessage(hDlg,BOX_DIRECT,CB_GETCURSEL,0,0);
disp_direction=box_index;
printf("disp disp_direction=%d",disp_direction);	 
box_index=SendDlgItemMessage(hDlg,BOX_BACKG,CB_GETCURSEL,0,0);
backcolor=SysPixelIndex[box_index+9];	

	 //GetDlgItemText(hDlg,BOX_CHAN1,str,4);

for(i=0;i<6;i++)
{
       	id=SendDlgItemMessage(hDlg,BOX_CHAN1+i,CB_GETCURSEL,0,0)-1;
       	color=SendDlgItemMessage(hDlg,BOX_COLOR1+i,CB_GETCURSEL,0,0);
       	
		//channel_disp[id].color=SysPixelIndex[color+9];
	 	channel_conf[id].l_limit=GetDlgItemInt(hDlg,EDIT_L1+i,&p,0);
	 	channel_conf[id].h_limit=GetDlgItemInt(hDlg,EDIT_DH1+i,&p,0);
		sprintf(str_resource,"AI%d",(id+1));
		sprintf(str_goal,"%d",channel_conf[id].l_limit);
		
		SetValueToEtcFile("system.conf",str_resource,"ScaleLow",str_goal);
		sprintf(str_goal,"%d",channel_conf[id].h_limit);		
		SetValueToEtcFile("system.conf",str_resource,"ScaleHigh",str_goal);
}	



} 







⌨️ 快捷键说明

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