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

📄 settimer.txt

📁 用于PDA手机开发 minigui技术
💻 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 + -