这个作品是为参加某编程大赛写的,结果没过,可能是没打包成release模式吧。模拟时钟还好说,难的是时区的获得。
我觉得难点有两个,一是访问注册表获得时区列表,二是当地时区的时间转换。里面的时区函数特别麻烦,参数很多,还有作为输出值的参数(可理解为返回值)理解这点很重要。
一是访问注册表获得时区列表,源码如下:`
//open time zones
HKEY hKey, hsubKey;
CString keyName = _T("Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones");
RegOpenKey(HKEY_LOCAL_MACHINE, keyName, &hKey);
TCHAR lpName[MAX_KEY_LENGTH];
DWORD cSubKeys,cbMaxSubKey,cbName;
CString subKeyName;
int listIndex=-1;
// get subkeys info
if(RegQueryInfoKey(hKey,NULL,NULL,NULL,&cSubKeys,&cbMaxSubKey,NULL,NULL,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)
{
for (DWORD i=0; i<cSubKeys; i++)
{
cbName = MAX_KEY_LENGTH;
RegEnumKeyEx(hKey, i,lpName,&cbName,NULL,NULL,NULL,NULL);
subKeyName=keyName+"\\"+lpName;
RegOpenKey(HKEY_LOCAL_MACHINE, subKeyName, &hsubKey);
DWORD dwSize;
//get value's size;
RegQueryValueEx(hsubKey, TEXT("Display"), <