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 + -
显示快捷键?