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

📄 updatetimezone.cpp

📁 该时间管理是模仿酷派628手机上的时间管理书写其功能
💻 CPP
字号:
/**
*************************************************************** 
* 文件名: UpdateTimeZone 
* 版  权: Copyright (c) 2006-2020 中兴软件技术(南昌)有限公司 
* 创建人: 袁军 
* 日  期: 2007/07/05 
* 版  本: V1.0
* 描  述: 该类是修改系统时区类的.CPP文件
* 修改记录:
*     修改人      修改日期           修改描述
* 
***************************************************************
*/


#include "stdafx.h"
#include "TimeManager.h"
#include "UpdateTimeZone.h"
#include "CommonInterface.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUpdateTimeZone dialog

const int ZoneTimeSign = 4;
CUpdateTimeZone::CUpdateTimeZone(CString sysZoneName, CWnd* pParent /*=NULL*/)
	: CDialog(CUpdateTimeZone::IDD, pParent)
{
	//{{AFX_DATA_INIT(CUpdateTimeZone)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_strSysZoneName = sysZoneName; 
}


/**
************************************************************* 
* 函 数 名: GetTimeZoneName()
* 描    述: 从CString Table中获取系统时区名,并将它加载到时区列表中
* 数 据 库: 无
* 数据库表: 无
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 创 建 人: 袁军
* 日    期: 2007/07/05
* 修改记录: 
*     修改人      修改日期      修改描述
*************************************************************
*/ 

void CUpdateTimeZone::GetTimeZoneName()
{
	CString strTemp;
	UINT uStrId = IDS_STR_WORLD_ZONE1;
	for (int i = 0; i < 90 && uStrId <= IDS_STR_WORLD_ZONE89; i++, ++uStrId)
	{
		//从CStringTable中加载世界时区名
		strTemp.LoadString(uStrId);
		//将加载的世界时区名插入世界时区中
		m_ListTimeZone.InsertString(i, strTemp);
	}
}



/**
************************************************************* 
* 函 数 名: SetSysTimeZone(CString strTimeZoneName)
* 描    述: 设置系统时区,将系统时区名设置为strTimeZoneName
* 数 据 库: 无
* 数据库表: 无
* 输入参数: strTimeZoneName
* 输出参数: 无
* 返 回 值: 无
* 创 建 人: 袁军
* 日    期: 2007/06/13
* 修改记录: 
*     修改人      修改日期      修改描述
*************************************************************
*/ 

void CUpdateTimeZone::SetSysTimeZone(CString strTimeZoneName)
{
	int iSysHourDiff(0),iSysMintueDiff(0);
	double dSysZoneDiff(0.0);
	///////////////////////////////////////////////////////////////
	/*该计算时间的算法需要对时区名的格式有验格要求:格式如((GMT+05:45) 加德满都)
	前面必须是(GMT+5)的标志,否则就作为标准时间处理 */
	//////////////////////////////////////////////////////////////
	
	//获取新的时区与标准时区的时差 
	//计算小时
	int j = strTimeZoneName.FindOneOf(_T(")"));
	CString ZoneTime = strTimeZoneName.Mid(ZoneTimeSign,j-ZoneTimeSign); 
	if (0 == ZoneTime.GetLength())
	{
		ZoneTime = _T("0");
		//将时差CString类型转化为Int型
		iSysHourDiff = _wtoi(ZoneTime);	
	}
	else
	{
		//将时差CString类型转化为Int型
		iSysHourDiff = _wtoi(ZoneTime);	
		//计算分钟
		CString strMinute = ZoneTime.Mid(4);
		iSysMintueDiff = _wtoi(strMinute);
		
		if (45 == iSysMintueDiff)
		{
			if (iSysHourDiff > 0)
			{
				dSysZoneDiff = iSysHourDiff + 0.75;
			}
			else
			{
				dSysZoneDiff = iSysHourDiff - 0.75;
			}
		}
		else if (30 == iSysMintueDiff)
		{
			if (iSysHourDiff > 0)
			{
				dSysZoneDiff = iSysHourDiff + 0.5;
			}
			else
			{
				dSysZoneDiff = iSysHourDiff - 0.5;
			}
		}
		else
		{
			dSysZoneDiff = iSysHourDiff;
		}
	}
	TIME_ZONE_INFORMATION tziOld, tziNew;
	GetTimeZoneInformation(&tziOld);
	GetTimeZoneInformation(&tziNew);
	DWORD dwRet = 0;
	
	//获取新的时区时差与旧时区的时差的差
	tziNew.DaylightDate.wHour = iSysHourDiff - tziOld.DaylightDate.wHour;
	if (tziNew.DaylightDate.wHour < 0)
	{
		tziNew.DaylightDate.wHour +=24;
	}
	
	tziNew.Bias = (60*dSysZoneDiff);
	StringCchCopy(tziNew.DaylightName, 32, strTimeZoneName);
	
	if( !SetTimeZoneInformation(&tziNew )) 
	{
		CString strMsgInfo;
		strMsgInfo.LoadString(IDS_STR_SET_SYSZONE_NOSECC);
		MessageBox(strMsgInfo);
	}
}

void CUpdateTimeZone::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUpdateTimeZone)
	DDX_Control(pDX, IDC_LIST_TIME_ZONE, m_ListTimeZone);
	DDX_Control(pDX, IDC_BTN_OK, m_btnOk);
	DDX_Control(pDX, IDC_BTN_NO, m_btnNo);
	DDX_Control(pDX, IDC_BTN_INIT, m_btnInit);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUpdateTimeZone, CDialog)
	//{{AFX_MSG_MAP(CUpdateTimeZone)
	ON_BN_CLICKED(IDC_BTN_OK, OnBtnOk)
	ON_BN_CLICKED(IDC_BTN_NO, OnBtnNo)
	ON_BN_CLICKED(IDC_BTN_INIT, OnBtnInit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUpdateTimeZone message handlers



/**
************************************************************* 
* 函 数 名: OnInitDialog() 
* 描    述: 窗体初始化函数
* 数 据 库: 无
* 数据库表: 无
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 创 建 人: 袁军
* 日    期: 2007/06/13
* 修改记录: 
*     修改人      修改日期      修改描述
*************************************************************
*/ 

BOOL CUpdateTimeZone::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//窗体最大化
	//ShowWindow(SW_SHOWMAXIMIZED);
	//m_ListTimeZone.SetColumnWidth(6000);
	m_ListTimeZone.SendMessage(LB_SETHORIZONTALEXTENT, 420, 0);
    //调用加载时区名函数加载时区名
	GetTimeZoneName();	

	if (m_strSysZoneName.GetLength() > 18)
	{
		m_strSysZoneName = m_strSysZoneName.Mid(6,18);
	}
	else
	{
		m_strSysZoneName = m_strSysZoneName.Mid(6,m_strSysZoneName.GetLength());
	}
	
	int iItem(-1);
	for(int i=0; i<m_ListTimeZone.GetCount(); i++)
	{
		CString strTmpZoneName;
		m_ListTimeZone.GetText(i,strTmpZoneName);
		if (strTmpZoneName.Find(m_strSysZoneName) > 0)
		{
			iItem = i;
			break;
		}
	}

	m_ListTimeZone.SetCurSel(iItem);
	
	::SetWindowPos(m_hWnd,HWND_TOP,0,STATUS_HEIGHT,SCREEN_WIDTH,SCREEN_HEIGHT - STATUS_HEIGHT,SWP_SHOWWINDOW);
	ModifyStyleEx(0, WS_EX_NODRAG);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


/**
************************************************************* 
* 函 数 名: OnBtnOk()
* 描    述: 用户点击修改时区的确定按钮时触发该事件
* 数 据 库: 无
* 数据库表: 无
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 创 建 人: 袁军
* 日    期: 2007/06/13
* 修改记录: 
*     修改人      修改日期      修改描述
*************************************************************
*/ 

void CUpdateTimeZone::OnBtnOk() 
{
	//如果用没有选择任何时区,则直接退出时区界面
	if (-1 == m_ListTimeZone.GetCurSel())
	{
		OnCancel();
		return;
	}

	//获取用户选择的时区名
	CString strTimeZoneName;
	m_ListTimeZone.GetText(m_ListTimeZone.GetCurSel(),strTimeZoneName);
	
	//获取系统当前时区信息 
	TIME_ZONE_INFORMATION tziNow;
	GetTimeZoneInformation(&tziNow);
	
	//如果当前时区不等于用户设置的时区
	if (tziNow.DaylightName != strTimeZoneName)
	{		
		//调用设置系统时区函数设置时区名
		SetSysTimeZone(strTimeZoneName);
	}

	//向主框架发送修改时间的消息
	QM_Message *Send_QM_Message = (QM_Message *)malloc(sizeof(QM_Message));	
	if (NULL != Send_QM_Message)
	{
		Send_QM_Message->DestinationPID = QUICKMOBILE_PID;
		Send_QM_Message->SourcePID = TIMEMANAGER_PID;
		Send_QM_Message->TransferToPID = 0;
		Send_QM_Message->MessageID = WM_QM_ADJUST_TIME;
		Send_QM_Message->ContentLen = 0;
		Send_QM_Message->OriginPID = TIMEMANAGER_PID;
		CommonInterface CommInterface;
		CommInterface.QM_SendMessage(Send_QM_Message);
		free(Send_QM_Message);
	}
	OnCancel();
}



/**
************************************************************* 
* 函 数 名: OnBtnNo()
* 描    述: 用户点击修改时区界面的取消按钮时触发该事件
* 数 据 库: 无
* 数据库表: 无
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 创 建 人: 袁军
* 日    期: 2007/06/13
* 修改记录: 
*     修改人      修改日期      修改描述
*************************************************************
*/ 

void CUpdateTimeZone::OnBtnNo() 
{
	//直接退出
	OnCancel();	
}


/**
************************************************************* 
* 函 数 名: OnBtnInit()
* 描    述: 用户点击初始化按钮时触发该事件
* 数 据 库: 无
* 数据库表: 无
* 输入参数: 无
* 输出参数: 无
* 返 回 值: 无
* 创 建 人: 袁军
* 日    期: 2007/06/13
* 修改记录: 
*     修改人      修改日期      修改描述
*************************************************************
*/ 

void CUpdateTimeZone::OnBtnInit() 
{
	//获取初始化时区名,((GMT+8)香港新加坡)
	CString strTimeZoneName;
	strTimeZoneName.LoadString(IDS_STR_WORLD_ZONE75);

	//获取系统当前时区信息 
	TIME_ZONE_INFORMATION tziNow;
	GetTimeZoneInformation(&tziNow);

	//如果当前时区不等于用户设置的时区
	if (tziNow.DaylightName != strTimeZoneName)
	{		
		//调用设置系统时区函数设置时区名
		SetSysTimeZone(strTimeZoneName);
	}

	//向主框架发送修改时间的消息
	QM_Message *Send_QM_Message = (QM_Message *)malloc(sizeof(QM_Message));
	if (NULL != Send_QM_Message)
	{
		Send_QM_Message->DestinationPID = QUICKMOBILE_PID;
		Send_QM_Message->SourcePID = TIMEMANAGER_PID;
		Send_QM_Message->TransferToPID = 0;
		Send_QM_Message->MessageID = WM_QM_ADJUST_TIME;
		Send_QM_Message->ContentLen = 0;
		Send_QM_Message->OriginPID = TIMEMANAGER_PID;
		CommonInterface CommInterface;
		CommInterface.QM_SendMessage(Send_QM_Message);
		free(Send_QM_Message);
	}
	//退出窗体
	OnCancel();
}

⌨️ 快捷键说明

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