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

📄 configdi.c

📁 采用MINIGUI开发的一套GUI界面
💻 C
字号:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <math.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#include "common.h"

#include "configdi.h"


static void AboutDi (HWND hParent)
{
    MessageBox (hParent, 
        "按键操作说明:\n\n"
        "W    :  ↑ 向上键,选择上一个设置项 "
        "S    :  ↓ 向下键,选择下一个设置项 \n"
        "A    :  ← 向左键,选择左一个设置项 "
        "D    :  → 向右键,选择右边的设置项 \n"
        "Enter:  修改本选择项 ,下拉,编辑\n\n"
        "F1    :  返回到组态页面  "
        "F2    :  返回到显示模式\n"
        "F3    :  选择上一个通道  "
        "F4    :  选择下一个通道 \n"
        "ESC    :  退出\n\n",
        "帮助          DI组态设置",
        MB_OK | MB_ICONEXCLAMATION);
};

 // int RClick_Time=0;
      //  int LClick_Time=0;
void DIDialogInit(HWND hDlg)
 	{ 
 	const unsigned char* DI_formchar [] = {"No","H",   "L", };
const   unsigned char *ai_job1[]={
"开始记录","停止记录",
"记录报警","记录事件",
"不动作"
};  
const   unsigned char *ai_job2[]={
"启动DO","启动AO","启动DO",
"启动定时器","启动计数器","启动累加器",
"不动作"
};  
const   unsigned char *speed[]={
	"1秒","2秒" ,"5秒","10秒","30秒","60秒","120秒"
};	
	unsigned char str[20];
	int i;
	int j;
	 

		for(i=0;i<3;i++){
			//SendDlgItemMessage(hDlg, BOX_MODE, 
			SendMessage(GetDlgItem(hDlg,DI_BOX_TYPE1),CB_ADDSTRING,0,(LPARAM)DI_formchar[i]) ;
		      SendMessage(GetDlgItem(hDlg,DI_BOX_TYPE2),CB_ADDSTRING,0,(LPARAM)DI_formchar[i]) ;
			}

  
         for(j=0;j<5;j++)
         {
	   sprintf(str,ai_job1[j]);
          SendMessage(GetDlgItem(hDlg,DI_BOX1_JOB1),CB_ADDSTRING,0, (LPARAM)str) ;
      	  }
           for(j=0;j<5;j++)
         {
	   sprintf(str,ai_job2[j]);
          SendMessage(GetDlgItem(hDlg,DI_BOX1_JOB2),CB_ADDSTRING,0, (LPARAM)str) ;
      	  }	  
 
         for(j=0;j<7;j++)
         {
	   sprintf(str,ai_job1[j]);
          SendMessage(GetDlgItem(hDlg,DI_BOX2_JOB1),CB_ADDSTRING,0, (LPARAM)str) ;
      	  }
  	   for(j=0;j<7;j++)
         {
	   sprintf(str,ai_job2[j]);
          SendMessage(GetDlgItem(hDlg,DI_BOX2_JOB2),CB_ADDSTRING,0, (LPARAM)str) ;
      	  }	
}
//
int  ReadDiInfo(HWND hDlg,int id2)

{
	int id;
  	unsigned char str[20];
	//设置初始值
	id= id2;
	SetDlgItemText(hDlg, DI_EDIT_NAME,channel_di[id].name);
   	SetDlgItemText(hDlg, DI_EDIT_DESC,channel_di[id].desc);
	SendDlgItemMessage(hDlg,DI_BOX_TYPE1,CB_SETCURSEL,channel_di[id].type1,0);
	SendDlgItemMessage(hDlg,DI_BOX_TYPE2,CB_SETCURSEL,channel_di[id].type2,0);
	SendDlgItemMessage(hDlg,DI_BOX1_JOB1,CB_SETCURSEL,channel_di[id].line1_job1,0);
	SendDlgItemMessage(hDlg,DI_BOX2_JOB1,CB_SETCURSEL,channel_di[id].line2_job1,0);
	SendDlgItemMessage(hDlg,DI_BOX1_JOB2,CB_SETCURSEL,channel_di[id].line1_job2,0);
	SendDlgItemMessage(hDlg,DI_BOX2_JOB2,CB_SETCURSEL,channel_di[id].line2_job2,0);
}
//保存当前通道的组态信息
int  WriteDiInfo(HWND hDlg,int id2)
{
int id;
int p;
int box_index;
unsigned char str[20];
	id=id2;
     GetDlgItemText(hDlg,DI_EDIT_NAME,str,4);
     sprintf(channel_di[id].name,str);
	 
     GetDlgItemText(hDlg,DI_EDIT_DESC,str,16);
     sprintf(channel_di[id].desc,str);
channel_di[id].type1=SendDlgItemMessage(hDlg,DI_BOX_TYPE1,CB_GETCURSEL,0,0);
channel_di[id].type2=SendDlgItemMessage(hDlg,DI_BOX_TYPE2,CB_GETCURSEL,0,0);

channel_di[id].line1_job1= SendDlgItemMessage(hDlg,DI_BOX1_JOB1,CB_GETCURSEL,0,0);
channel_di[id].line2_job1= SendDlgItemMessage(hDlg,DI_BOX2_JOB1,CB_GETCURSEL,0,0);

channel_di[id].line1_job2= SendDlgItemMessage(hDlg,DI_BOX1_JOB2,CB_GETCURSEL,0,0);
channel_di[id].line2_job2= SendDlgItemMessage(hDlg,DI_BOX2_JOB2,CB_GETCURSEL,0,0);

return 1;
}

 void SaveDiData(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)); 	
id= 1;
//存入文件

for(i=0;i<6;i++)
{
		sprintf(str_resource,"DI%d",(i+1));
		sprintf(str_goal,"%d",channel_di[id].type1);	
		SetValueToEtcFile("system.conf",str_resource,"Type1",str_goal);
		sprintf(str_goal,"%d",channel_di[id].type2);		
		SetValueToEtcFile("system.conf",str_resource,"Type2",str_goal);
		
		sprintf(str_goal,"%d",channel_di[id].name);	
		SetValueToEtcFile("system.conf",str_resource,"Name",str_goal);
		sprintf(str_goal,"%d",channel_di[id].desc);		
		SetValueToEtcFile("system.conf",str_resource,"Desc",str_goal);
}	



} 
int ShiftDiRight(HWND hDlg,int di_bn_focus)
{
int i;
int id;
	unsigned char str_num[10];
	id=di_bn_focus-DI_BN1;
	//保存本通道的信息
	WriteDiInfo(hDlg,id);
			//更换到下一通道的信息
		SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
			di_bn_focus++;	
			if(di_bn_focus>DI_BN6)di_bn_focus=DI_BN1;
			SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , BST_PUSHED ,0);

			bfresh_conf=1;
			sprintf(topinfo,"组态DI    DI%d   ",(di_bn_focus-DI_BN1+1));			
	id=di_bn_focus-DI_BN1;
    ReadDiInfo( hDlg,id);
	return di_bn_focus;
}	

int ShiftDiLeft(HWND hDlg,int di_bn_focus)
{
int i;
int id;
	unsigned char str_num[10];
	id=di_bn_focus-DI_BN1;
	//保存本通道的信息
	WriteDiInfo(hDlg,id);
			//更换到下一通道的信息
		SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
    		di_bn_focus --;
    		if(di_bn_focus <DI_BN1 ) di_bn_focus =DI_BN6;
			
    		SendDlgItemMessage(hDlg, di_bn_focus, BM_SETSTATE , BST_PUSHED ,0);
    		//sprintf(str_num,"DI%d",(di_bn_focus-DI_BN1+1));
    		//str_num[3]='\0';
			
    		//SetDlgItemText(hDlg, DI_EDIT_NAME,str_num );	

			bfresh_conf=1;
			sprintf(topinfo,"组态DI    DI%d   ",(di_bn_focus-DI_BN1+1));			
id=di_bn_focus-DI_BN1;
    ReadDiInfo( hDlg,id);
	return di_bn_focus;
}		
int  DIDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
   int id ; 
   int code ;
    static int ctrl_di_id;//按键ID号或者是文本焦点号码
    static int index;
    static int num ;
    static  BOOL flag_entered;

static   int  di_bn_focus; //必须为全局变量
   unsigned char str_num[10];
   unsigned char str[10];
   id = LOWORD (wParam);
   code = HIWORD(wParam);
   switch (message) {
   	case MSG_INITDIALOG:		
		      b_di_close=0;	        			
        		DIDialogInit(hDlg);

			//预先给定一个焦点		
        		di_bn_focus=DI_BN1;
			ctrl_di_id=DI_EDIT_NAME;	
     		id=di_bn_focus-DI_BN1;
    		ReadDiInfo( hDlg,id);	
	       SetDlgItemText(hDlg, DI_EDIT_NAME,"DI1" );
	 	SetDlgItemText(hDlg, DI_EDIT_DESC,"数字输入通道1"); 
	  	SendDlgItemMessage(hDlg, DI_BN1, BM_SETSTATE , BST_PUSHED ,0);
		SetFocusChild(GetDlgItem(hDlg,DI_EDIT_NAME));
		
	break;     
	case MSG_DESTROY :

		break;
	case MSG_SHOWWINDOW :
		if(b_di_close==1) 
			{
			EndDialog (hDlg, 0);	
			}
		break;
	case MSG_PAINT:
		break;
	 case MSG_KEYDOWN:
	 	if(! keydowned)
	 		{
	if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_DI_LEFT, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_DI_RIGHT, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_DI_UP, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_DI_DOWN, MSG_LBUTTONDOWN, 0,0);
	 if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_DI_ENTER, MSG_LBUTTONDOWN, 0,0);
	if(id==KEY_DLEFT)SendDlgItemMessage(hDlg, CONF_DI_DLEFT, MSG_LBUTTONDOWN, 0,0);
	 if(id==KEY_DRIGHT)SendDlgItemMessage(hDlg, CONF_DI_DRIGHT, MSG_LBUTTONDOWN, 0,0);
	if(id==SCANCODE_F5)SendDlgItemMessage(hDlg, CONF_DI_DAI, BM_SETSTATE , BST_PUSHED ,0);
	 if(id==SCANCODE_F6)
	 	SendDlgItemMessage(hDlg, CONF_DI_DDI, BM_SETSTATE , BST_PUSHED ,0);
	if(id==SCANCODE_F7)SendDlgItemMessage(hDlg, CONF_DI_DMATH, BM_SETSTATE , BST_PUSHED ,0);
	 
	 keydowned=1;
		}
	  break;	
	
	 case MSG_KEYUP:
		keydowned=0;
	      if(id==KEY_EXIT)  	EndDialog (hDlg, 0);	
		if(id==KEY_LEFT) 	
			{
			SendDlgItemMessage(hDlg, CONF_DI_LEFT, MSG_LBUTTONUP, 0,0);
		ctrl_di_id=di_id_left[ctrl_di_id-EDIT_FIRST];
		printf("ctrl_di_id=%d",ctrl_di_id);
	 	SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
			
			}
		if(id==KEY_RIGHT) 
			{
			SendDlgItemMessage(hDlg, CONF_DI_RIGHT, MSG_LBUTTONUP, 0,0);
			ctrl_di_id=di_id_right[ctrl_di_id-EDIT_FIRST];	
	 		SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
			}
		if(id==KEY_UP) 
			{
			SendDlgItemMessage(hDlg, CONF_DI_UP, MSG_LBUTTONUP, 0,0);
 			if(flag_entered)//按过ENTER后选择BOX里面内容
				{
				 SendDlgItemMessage(hDlg,ctrl_di_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
				index--;if(index<0)index=num-1;
				SendDlgItemMessage(hDlg,ctrl_di_id,CB_SETCURSEL,index,0);				
				}		  
                   else 
                         	{
      				ctrl_di_id=di_id_up[ctrl_di_id-EDIT_FIRST];
      				SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
      				}
			}
		if(id==KEY_DOWN) 
			{	
			SendDlgItemMessage(hDlg, CONF_DI_DOWN, MSG_LBUTTONUP, 0,0);
 			if(flag_entered)//按过ENTER后选择BOX里面内容
     				{
     			 SendDlgItemMessage(hDlg,ctrl_di_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
				index++;if(index==num)index=0;
				SendDlgItemMessage(hDlg,ctrl_di_id,CB_SETCURSEL,index,0);				
 				}	  
                    else 
                 	    {
          		   ctrl_di_id=di_id_down[ctrl_di_id-EDIT_FIRST];			
            	 	     SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));				
            	           }
	 		}
		if(id==KEY_ENTER) 
		{	
	 		SendDlgItemMessage(hDlg, CONF_DI_ENTER, MSG_LBUTTONUP, 0,0);
        	     if(flag_entered) 
         		{
       		flag_entered=0;
       		SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
        		}
       		else
                  {
                       	if(ctrl_di_id==DI_EDIT_DESC)TagNameConfig(hDlg );	

				else
     			   	{
                          	 SendDlgItemMessage(hDlg,ctrl_di_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
                          	flag_entered=1;
     				index=SendDlgItemMessage(hDlg,ctrl_di_id,CB_GETCURSEL,0,0);
     			        num=SendDlgItemMessage(hDlg,ctrl_di_id,CB_GETCOUNT,0,0);
                          	}
	 	 	}
			
		}
		if(id==KEY_DLEFT)   
			{
		 	SendDlgItemMessage(hDlg,CONF_DI_DLEFT , BM_SETSTATE, 0,0);
			di_bn_focus=ShiftDiLeft(hDlg,di_bn_focus);	
			}
		if(id==KEY_DRIGHT)
			{
		 	SendDlgItemMessage(hDlg,CONF_DI_DRIGHT, BM_SETSTATE, 0,0);
			di_bn_focus=ShiftDiRight(hDlg,di_bn_focus);	
		
		
			}
	if(id==SCANCODE_F5)
		{
		SendDlgItemMessage(hDlg, CONF_DI_DAI, BM_SETSTATE , 0 ,0);
	SendMessage(hDlg,MSG_COMMAND,CONF_DI_DAI,0);
		}
	 if(id==SCANCODE_F6)
	 	{SendDlgItemMessage(hDlg, CONF_DI_DDI, BM_SETSTATE , 0 ,0);
	 }
	if(id==SCANCODE_F7)
		{SendDlgItemMessage(hDlg, CONF_DI_DMATH, BM_SETSTATE , 0 ,0);
SendMessage(hDlg,MSG_COMMAND,CONF_DI_DMATH,0);}

		
	 break; 		 
 case MSG_COMMAND:{

		 if(code==EN_CLICKED)//被设置了焦点
		  ctrl_di_id=GetDlgCtrlID(GetFocusChild(hDlg)); 
		if (id == EN_CHANGE)
			{
			SetDlgItemText(hDlg, ctrl_di_id,(unsigned char *)lParam);
			}	
	 if(id==CONF_DI_DRIGHT)
			{
			SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
			di_bn_focus++;	
			if(di_bn_focus>DI_BN6)di_bn_focus=DI_BN1;
			SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , BST_PUSHED ,0);
			sprintf(str_num,"DI%d",(di_bn_focus-DI_BN1+1));
			str_num[3]='\0';
			SetDlgItemText(hDlg, DI_EDIT_NAME,str_num );
			}	
	if(id==CONF_DI_DLEFT)	
    		{	
    		SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
    		di_bn_focus --;
    		if(di_bn_focus <DI_BN1 ) di_bn_focus =DI_BN6;
    		SendDlgItemMessage(hDlg, di_bn_focus, BM_SETSTATE , BST_PUSHED ,0);
    		sprintf(str_num,"DI%d",(di_bn_focus-DI_BN1+1));
    		str_num[3]='\0';
    		SetDlgItemText(hDlg, DI_EDIT_NAME,str_num );	
	}

	 //按左边enter 键进入	 	
	
if(id== CONF_DI_DAI)
		{
		if (!bai_dlg)DlgConfAi(hDlg);
		else{ //AI 对话框存在
		bdi_dlg=0;
		EndDialog (hDlg, 0);
		}
		} 

	if(id== CONF_DI_DMATH)
           {
          if(! bmath_dlg)DlgConfMath( hDlg);
		else  {	
			b_math_close=1;//关MATH
			
			bdi_dlg=0;
			EndDialog (hDlg, 0);//
			}
		} 
	if(id== CONF_DI_DBACK) 
		{bdi_dlg=0;EndDialog (hDlg, 0);	
		b_math_close=1;		
		b_ai_close=1;			
		}
	
	if(id== DI_HELP)
    		{	
		AboutDi( hDlg);
		}
	
    	      }//end MSG_COMMAND
		break;
	case MSG_CLOSE:
		bdi_dlg=0;

		printf("di dlg is closed\n");
		EndDialog (hDlg, 0);	

		SaveDiData(hDlg);
		break;

		
	   	}
    return DefaultDialogProc (hDlg, message, wParam, lParam);
}
 
  //alarm_over(GetDlgItem (hDlg, IDC_ALERT_LIST) ,3);break;	
  //初始化di界面

void DlgConfDi (HWND hWnd)
{
	bdi_dlg=1;
	di_dlg = hWnd;
    	DlgDI.controls = ConfigDIControl;
    	DialogBoxIndirectParam (&DlgDI, hWnd, DIDialogProc, 0L);
}


/*没有通讯时候的初始化*/
void DiInit( void)
{
	unsigned char str_resource[10];
	unsigned char str_goal[10];
	unsigned char str[30];
	int value;
	int id;
	bzero(str,sizeof(str_resource)); 
	channel_di=(CHANNALDI* )malloc(6*sizeof(CHANNALDI));
  	for (id=0;id<6;id++) 	
  	{
  	sprintf(str_resource,"DI%d",(id+1));
		channel_di[id].dev_id=4;//TEST 测试,假设是从第4个设备读入
		//从文件中读入通道信息   
		GetValueFromEtcFile("system.conf", str_resource,"Name",str,20);  	
		bzero(channel_di[id].name,sizeof(channel_di[id].name)); 
		 sprintf(channel_di[id].name,"%s",str);
		GetValueFromEtcFile("system.conf", str_resource,"Desc",str,20);  
		bzero(channel_di[id].desc,sizeof(channel_di[id].desc)); 
		sprintf(channel_di[id].desc,"%s",str);  
	 GetIntValueFromEtcFile("system.conf", str_resource,"Type1",&value);
	 channel_di[id].type1=value;
	 GetIntValueFromEtcFile("system.conf", str_resource,"Type2",&value);
	 channel_di[id].type2=value;
	 GetIntValueFromEtcFile("system.conf", str_resource,"Job11",&value);
	 channel_di[id].line1_job1=value;
	 GetIntValueFromEtcFile("system.conf", str_resource,"Job12",&value);
	 channel_di[id].line2_job1=value;
	 GetIntValueFromEtcFile("system.conf", str_resource,"Job21",&value);
	 channel_di[id].line1_job2=value;
	 GetIntValueFromEtcFile("system.conf", str_resource,"Job22",&value);
	 channel_di[id].line2_job2=value;
		
	}

  

}




⌨️ 快捷键说明

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