📄 settimer.txt
字号:
/********************************************************************************************
* File Name: monthcal.c
* Copy Right: Neusoft
* Copy Right: Neusoft
* Author: 董宗然
* Function discription: monthcal window
********************************************************************************************/
#include <stdlib.h>
#include <time.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <minigui/mywindows.h>
#include <minigui/mgext.h>
#include <sys/time.h>
//窗口控件ID
#define IDC_MC 100
#define IDC_OK 200
#define IDC_SPR1 201
#define IDC_SPR2 202
#define IDC_HOURE 204
#define IDC_MINUTEE 205
#define IDC_SECONDE 206
//检查小时数据的合理性,要求只能是0-23的整数。
static int CheckHour(const char* pBuff)
{
int nV = 0;
if(!strcmp(pBuff,"0")||!strcmp(pBuff,"1")||!strcmp(pBuff,"2")||!strcmp(pBuff,"3")||!strcmp(pBuff,"4")||!strcmp(pBuff,"5")
||!strcmp(pBuff,"6")||!strcmp(pBuff,"7")||!strcmp(pBuff,"8")||!strcmp(pBuff,"9")||!strcmp(pBuff,"10")||!strcmp(pBuff,"11")
||!strcmp(pBuff,"12")||!strcmp(pBuff,"13")||!strcmp(pBuff,"14")||!strcmp(pBuff,"15")||!strcmp(pBuff,"16")||!strcmp(pBuff,"17")
||!strcmp(pBuff,"18")||!strcmp(pBuff,"19")||!strcmp(pBuff,"20")||!strcmp(pBuff,"21")||!strcmp(pBuff,"22")||!strcmp(pBuff,"23"))
nV = 1;
if(nV)
return 1;
else
return 0;
}
//用于检查分、秒输入的合理性,只能是0-59之间的整数。
static int CheckMinuteOrSecond(const char* pBuff)
{
int nV = 0;
if(!strcmp(pBuff,"0")||!strcmp(pBuff,"1")||!strcmp(pBuff,"2")||!strcmp(pBuff,"3")||!strcmp(pBuff,"4")||!strcmp(pBuff,"5")
||!strcmp(pBuff,"6")||!strcmp(pBuff,"7")||!strcmp(pBuff,"8")||!strcmp(pBuff,"9")||!strcmp(pBuff,"10")||!strcmp(pBuff,"11")
||!strcmp(pBuff,"12")||!strcmp(pBuff,"13")||!strcmp(pBuff,"14")||!strcmp(pBuff,"15")||!strcmp(pBuff,"16")||!strcmp(pBuff,"17")
||!strcmp(pBuff,"18")||!strcmp(pBuff,"19")||!strcmp(pBuff,"20")||!strcmp(pBuff,"21")||!strcmp(pBuff,"22")||!strcmp(pBuff,"23")
||!strcmp(pBuff,"24")||!strcmp(pBuff,"25")||!strcmp(pBuff,"26")||!strcmp(pBuff,"27")||!strcmp(pBuff,"28")||!strcmp(pBuff,"29")
||!strcmp(pBuff,"30")||!strcmp(pBuff,"31")||!strcmp(pBuff,"32")||!strcmp(pBuff,"33")||!strcmp(pBuff,"34")||!strcmp(pBuff,"35")
||!strcmp(pBuff,"36")||!strcmp(pBuff,"37")||!strcmp(pBuff,"38")||!strcmp(pBuff,"39")||!strcmp(pBuff,"40")||!strcmp(pBuff,"41")
||!strcmp(pBuff,"42")||!strcmp(pBuff,"43")||!strcmp(pBuff,"44")||!strcmp(pBuff,"45")||!strcmp(pBuff,"46")||!strcmp(pBuff,"47")
||!strcmp(pBuff,"48")||!strcmp(pBuff,"49")||!strcmp(pBuff,"50")||!strcmp(pBuff,"51")||!strcmp(pBuff,"52")||!strcmp(pBuff,"53")
||!strcmp(pBuff,"54")||!strcmp(pBuff,"55")||!strcmp(pBuff,"56")||!strcmp(pBuff,"57")||!strcmp(pBuff,"58")||!strcmp(pBuff,"59"))
nV = 1;
if(nV)
return 1;
else
return 0;
}
/*
* 窗口打开时,根据当前的系统时间设定正确的日历显示.
*/
static void ShowRightTime(HWND hDlg)
{
struct tm* ptime;
time_t now;
int day,month,year,hour,minute,second;
char buff[4];
time(&now);
ptime = localtime(&now);
day = ptime->tm_mday;
month = ptime->tm_mon+1;
year = ptime->tm_year+1900;
hour = ptime->tm_hour;
minute = ptime->tm_min;
second = ptime->tm_sec;
SendMessage(GetDlgItem(hDlg,IDC_MC),MCM_SETCURDAY,day,0);
SendMessage(GetDlgItem(hDlg,IDC_MC),MCM_SETCURMONTH,month,0);
SendMessage(GetDlgItem(hDlg,IDC_MC),MCM_SETCURYEAR,year,0);
sprintf(buff,"%d",hour);
SendMessage(GetDlgItem(hDlg,IDC_HOURE),MSG_SETTEXT,4,(LPARAM)buff);
sprintf(buff,"%d",minute);
SendMessage(GetDlgItem(hDlg,IDC_MINUTEE),MSG_SETTEXT,4,(LPARAM)buff);
sprintf(buff,"%d",second);
SendMessage(GetDlgItem(hDlg,IDC_SECONDE),MSG_SETTEXT,4,(LPARAM)buff);
}
/*
* 根据用户的选择重新设定系统日期,日历功能不用修改到天以内的精确时间,所以用原时间不变.
*/
void SetRightTime(HWND hDlg)
{
int nV1 = 0, nV2 = 0, nV3 = 0;
int day,month,year,hour,minute,second;
struct tm nowtime;
time_t t;
char buff[4];
day = SendMessage (GetDlgItem(hDlg,IDC_MC), MCM_GETCURDAY, 0, 0);
month = SendMessage (GetDlgItem(hDlg,IDC_MC), MCM_GETCURMONTH, 0, 0);
year = SendMessage (GetDlgItem(hDlg,IDC_MC), MCM_GETCURYEAR, 0, 0);
SendMessage(GetDlgItem(hDlg,IDC_HOURE),MSG_GETTEXT,4,(LPARAM)buff);
nV1 = CheckHour(buff);
if(nV1)
{
hour = atoi(buff);
}
else
{
MessageBox (hDlg, "输入的小时数据不合理,请重新输入!", "提示", MB_OK | MB_ICONINFORMATION);
}
SendMessage(GetDlgItem(hDlg,IDC_MINUTEE),MSG_GETTEXT,4,(LPARAM)buff);
nV2 = CheckMinuteOrSecond(buff);
if(nV2)
{
minute = atoi(buff);
}
else
{
MessageBox (hDlg, "输入的分数据不合理,请重新输入!", "提示", MB_OK | MB_ICONINFORMATION);
}
SendMessage(GetDlgItem(hDlg,IDC_SECONDE),MSG_GETTEXT,4,(LPARAM)buff);
nV3 = CheckMinuteOrSecond(buff);
if(nV3)
{
second = atoi(buff);
}
else
{
MessageBox (hDlg, "输入的秒数据不合理,请重新输入!", "提示", MB_OK | MB_ICONINFORMATION);
}
if(nV1 && nV2 && nV3)
{
nowtime.tm_sec = second; /* Seconds.[0-60] (1 leap second)*/
nowtime.tm_min = minute; /* Minutes.[0-59] */
nowtime.tm_hour = hour; /* Hours. [0-23] */
nowtime.tm_mday = day; /* Day.[1-31] */
nowtime.tm_mon = month-1 ; /* Month. [0-11] */
nowtime.tm_year = year-1900; /* Year- 1900.*/
nowtime.tm_isdst = -1; /* DST.[-1/0/1]*/
t = mktime(&nowtime);
stime(&t);
}
SendNotifyMessage (hDlg, MSG_CLOSE, 0, 0);
}
//窗口控件数组
CTRLDATA CtrlTime1[]=
{
{
"monthcalendar",
WS_CHILD | WS_VISIBLE | MCS_NOTIFY | MCS_CHN,
10, 10, 240, 140,
IDC_MC,
"",
0
},
{
"button",
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
260, 40, 50, 25,
IDC_OK,
"确定",
0
},
{
CTRL_SLEDIT,
WS_VISIBLE | WS_TABSTOP | WS_BORDER,
10, 160, 40, 25,
IDC_HOURE,
NULL,
0
},
{
CTRL_STATIC,
WS_VISIBLE | SS_CENTER,
50, 160, 20, 25,
IDC_SPR1,
":",
0
},
{
CTRL_SLEDIT,
WS_VISIBLE | WS_TABSTOP | WS_BORDER,
70, 160, 40, 25,
IDC_MINUTEE,
NULL,
0
},
{
CTRL_STATIC,
WS_VISIBLE | SS_CENTER,
110, 160, 20, 25,
IDC_SPR2,
":",
0
},
{
CTRL_SLEDIT,
WS_VISIBLE | WS_TABSTOP | WS_BORDER,
130, 160, 40, 25,
IDC_SECONDE,
NULL,
0
}
};
//窗口属性结构体
DLGTEMPLATE DlgTime1 =
{
WS_VISIBLE | WS_CAPTION | WS_BORDER,
WS_EX_NONE,
0, 0, 320, 215,
"系统时间设定",
0, 0,
7, CtrlTime1,
0
};
/********************************************************************************************
* Function Name: TimeWinProc()
* Function Discription: Processing function of the monthcal window
********************************************************************************************/
static int SetTimeProc(HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case MSG_INITDIALOG:
ShowRightTime(hDlg);
break;
case MSG_COMMAND:
{
if ((int)wParam == IDC_OK)
{
SetRightTime(hDlg);
}
}
break;
case MSG_CLOSE:
EndDialog (hDlg, 0);
return 0;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
/********************************************************************************************
* Function Name: MonthCal()
* Function Discription: create the monthcal window
********************************************************************************************/
int SetTime (HWND hWnd)
{
if (!InitMiniGUIExt()) {
return 2;
}
DlgTime1.controls = CtrlTime1;
//创建日历对话框
DialogBoxIndirectParam (&DlgTime1, hWnd, SetTimeProc, 0L);
MiniGUIExtCleanUp ();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -