📄 updatetimezone.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 + -