📄 configtime.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <math.h>
#include <sys/time.h>
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.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/stat.h>
#include <fcntl.h>
#include "common.h"
#include "configtime.h"
#include "fonts.h"
void TimeDialogInit(HWND hDlg)
{
int i;
unsigned char str[5];
unsigned char *format[]={"年/月/日","月/日/年"};
SendMessage(GetDlgItem(hDlg,BOX_TIME_FORMAT),CB_ADDSTRING,0, (LPARAM)format[0]) ;
SendMessage(GetDlgItem(hDlg,BOX_TIME_FORMAT),CB_ADDSTRING,0, (LPARAM)format[1]) ;
//初始化组合框
for (i=0;i<=(year-2000);i++){
sprintf(str,"%04d",2000+i);
SendDlgItemMessage(hDlg,BOX_TIME_YEAR,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=12;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,BOX_TIME_MONT,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=31;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,BOX_TIME_DAYS,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=24;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,BOX_TIME_HOUR,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=59;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,BOX_TIME_MINU,CB_ADDSTRING,0,(LPARAM)str);
}
for (i=0;i<=59;i++){
sprintf(str,"%02d",i);
SendDlgItemMessage(hDlg,BOX_TIME_SECO,CB_ADDSTRING,0,(LPARAM)str);
}
}
void InitConfTime(HWND hDlg)
{
//得到当前时间
SendMessage(GetDlgItem(hDlg,BOX_TIME_YEAR),CB_SETCURSEL,(WPARAM)(year-2000),0);
SendMessage(GetDlgItem(hDlg,BOX_TIME_MONT),CB_SETCURSEL,(WPARAM)(mont),0);
SendMessage(GetDlgItem(hDlg,BOX_TIME_DAYS),CB_SETCURSEL,(WPARAM)(days),0);
SendMessage(GetDlgItem(hDlg,BOX_TIME_HOUR),CB_SETCURSEL,(WPARAM)(hour),0);
SendMessage(GetDlgItem(hDlg,BOX_TIME_MINU),CB_SETCURSEL,(WPARAM)(minu),0);
SendMessage(GetDlgItem(hDlg,BOX_TIME_SECO),CB_SETCURSEL,(WPARAM)(seco),0);
}
void SetCurrentTime(HWND hDlg)
{
struct timeval tv;
struct timezone tz;
int seco,min,hour,mday,mon,year;
int p[6];// 控件值 返回值,1表示成功,0表示失败
time_t t;
struct tm nowtime ;
//nowtime = localtime(&t);
seco=GetDlgItemInt(hDlg,BOX_TIME_SECO, &p[0],0);
min=GetDlgItemInt(hDlg,BOX_TIME_MINU, &p[1],0);
hour=GetDlgItemInt(hDlg,BOX_TIME_HOUR, &p[2],0);
mday=GetDlgItemInt(hDlg,BOX_TIME_DAYS, &p[3],0);
mon=GetDlgItemInt(hDlg,BOX_TIME_MONT, &p[4],0);
year=GetDlgItemInt(hDlg,BOX_TIME_YEAR, &p[5],0);
printf("xierongjian= y=%d month=%d day=%d Hour=%d minute=%d secon=%d \n", year,mon,mday,hour,min,seco) ;
nowtime.tm_sec=seco;/* Seconds.[0-60] (1 leap second)*/
nowtime.tm_min=min;/* Minutes.[0-59] */
nowtime.tm_hour=hour;/* Hours. [0-23] */
nowtime.tm_mday=mday;/* Day.[1-31] */
nowtime.tm_mon=mon-1;/* Month. [0-11] */
nowtime.tm_year=year-1900 ;/* Year+ 1900.*/
nowtime.tm_isdst=-1 ;// -1:不关心 1:夏令时间 ,不夏令时候0
t=mktime(&nowtime);
stime(&t);
}
void FreshCurrentTime(HWND hDlg)
{
int old_seco,old_min,old_hour,old_mday,old_mon,old_year;
int p[6];// 控件值 返回值,1表示成功,0表示失败
old_seco=GetDlgItemInt(hDlg,BOX_TIME_SECO, &p[0],2);
old_min=GetDlgItemInt(hDlg,BOX_TIME_MINU, &p[1],2);
old_hour=GetDlgItemInt(hDlg,BOX_TIME_HOUR, &p[2],2);
old_mday=GetDlgItemInt(hDlg,BOX_TIME_DAYS, &p[3],2);
old_mon=GetDlgItemInt(hDlg,BOX_TIME_MONT, &p[4],2);
old_year=GetDlgItemInt(hDlg,BOX_TIME_YEAR, &p[5],2);
if((p[0]+p[1]+p[2]+p[3]+p[4]+p[5])==6)
{
if(seco!=old_seco) SetDlgItemInt(hDlg,BOX_TIME_SECO, seco,0) ;/* Seconds.[0-60] (1 leap second)*/
if( minu = old_min) SetDlgItemInt(hDlg,BOX_TIME_MINU, minu,0) ;/* Minutes.[0-59] */
if( old_hour != hour) SetDlgItemInt(hDlg,BOX_TIME_HOUR, hour,0) ;/* Hours. [0-23] */
if( old_mday != days) SetDlgItemInt(hDlg,BOX_TIME_DAYS, days,0) ;/* Day.[1-31] */
if(old_mon != mont) SetDlgItemInt(hDlg,BOX_TIME_MONT, mont,0) ;/* Month. [0-11] */
if(old_year != year) SetDlgItemInt(hDlg,BOX_TIME_YEAR,year,0) ;/* Year- 1900.*/
}
}
int TimeDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
int i;//按纽循环用
static int ctrl_time_id;
static int index;//下拉框选中项
static int num ;//下拉框总选项数目
static BOOL flag_entered;
int id ;
int nc ;
unsigned char str_num[10];
id= LOWORD (wParam);//控件编号
nc=HIWORD(wParam); //控件通知码
switch (message)
{
case MSG_CREATE:
//SetTimer(hDlg,CONF_TIMER_ID,100);
break;
case MSG_INITDIALOG:
TimeDialogInit(hDlg);
InitConfTime(hDlg);
SetFocusChild(GetDlgItem(hDlg,BOX_TIME_FORMAT));
ctrl_time_id=BOX_TIME_FORMAT;
return 1;
case MSG_SHOWWINDOW:
{
}
break;
case MSG_PAINT:
hdc=BeginPaint(hDlg);
SetBrushColor(hdc,PIXEL_black);
SetPenColor (hdc,COLOR_darkgray);
// Rectangle(hdc,180,80,380,160);
//SetBrushColor(hdc,PIXEL_darkgreen);
//FillBox(hdc,180,80,80,40);
SelectFont(hdc,songgb16font);
SetTextColor(hdc,PIXEL_black);
SetBkColor(hdc,PIXEL_lightgray);
TextOut(hdc, 200,100, "日期格式: 年/月/日");
TextOut(hdc, 200,130, "样例: 07/01/01");
TextOut(hdc, 200,240, "时间格式: 时: 分: 秒");
TextOut(hdc, 200,270, "样例: 08:01:59");
EndPaint(hDlg,hdc);
break;
case MSG_KEYDOWN:
if(!keydowned)
{
if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_TIME_LEFT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_TIME_RIGHT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_TIME_UP, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_TIME_DOWN, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_TIME_ENTER, MSG_LBUTTONDOWN, 0,0);
keydowned=1;
}
break;
case MSG_KEYUP:
keydowned=0;
if(id==KEY_EXIT) EndDialog (hDlg, 0);
if(id==KEY_LEFT)
{
SendDlgItemMessage(hDlg, CONF_TIME_LEFT, MSG_LBUTTONUP, 0,0);
ctrl_time_id=time_id_left[ctrl_time_id-BOX_TIME_FORMAT];
SetFocusChild( GetDlgItem(hDlg,ctrl_time_id));
}
if(id==KEY_RIGHT)
{
SendDlgItemMessage(hDlg, CONF_TIME_RIGHT, MSG_LBUTTONUP, 0,0);
ctrl_time_id=time_id_right[ctrl_time_id-BOX_TIME_FORMAT];
SetFocusChild( GetDlgItem(hDlg,ctrl_time_id));
}
if(id==KEY_UP)
{
SendDlgItemMessage(hDlg, CONF_TIME_UP, MSG_LBUTTONUP, 0,0);
if(flag_entered)//按过ENTER后选择BOX里面内容
{
SendDlgItemMessage(hDlg,ctrl_time_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
index--;if(index<0)index=num-1;
SendDlgItemMessage(hDlg,ctrl_time_id,CB_SETCURSEL,index,0);
}
else
{
ctrl_time_id=time_id_up[ctrl_time_id-BOX_TIME_FORMAT];
SetFocusChild( GetDlgItem(hDlg,ctrl_time_id));
}
}
if(id==KEY_DOWN)
{
SendDlgItemMessage(hDlg, CONF_TIME_DOWN, MSG_LBUTTONUP, 0,0);
if(flag_entered)//按过ENTER后选择BOX里面内容
{
SendDlgItemMessage(hDlg,ctrl_time_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
index++;if(index==num)index=0;
SendDlgItemMessage(hDlg,ctrl_time_id,CB_SETCURSEL,index,0);
}
else
{
ctrl_time_id=time_id_down[ctrl_time_id-BOX_TIME_FORMAT];
SetFocusChild( GetDlgItem(hDlg,ctrl_time_id));
}
}
if(id==KEY_ENTER)
{
SendDlgItemMessage(hDlg, CONF_TIME_ENTER, MSG_LBUTTONUP, 0,0);
if(flag_entered)
{
//设定时间
SetCurrentTime(hDlg);
flag_entered=0;
SetFocusChild( GetDlgItem(hDlg,ctrl_time_id));
}
else
{
SendDlgItemMessage(hDlg,ctrl_time_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
flag_entered=1;
index=SendDlgItemMessage(hDlg,ctrl_time_id,CB_GETCURSEL,0,0);
num=SendDlgItemMessage(hDlg,ctrl_time_id,CB_GETCOUNT,0,0);
}
}
break;
case MSG_COMMAND:
{
if(id==CONF_TIME_APPLY)
{
SetCurrentTime(hDlg);
}
if(id==CONF_TIME_CANCEL) FreshCurrentTime(hDlg);
if(id==CONF_TIME_BACK) EndDialog (hDlg, 0);
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
//创建math 对话框
void DlgConfTime (HWND hWnd)
{
DlgSetTime.controls = ctrl_conf_time;
DialogBoxIndirectParam (&DlgSetTime, hWnd, TimeDialogProc, 0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -