AfxCore.cpp
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:13k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. // AfxCore.cpp : implementation of the AfxCore Functions
  2. //
  3. #include "stdafx.h"
  4. #include "AfxCore.h"
  5. #include "ProxySetDlg.h"
  6. #include "SMailerSMailer.h"
  7. #include "Secret.h"
  8. #ifdef AFX_INIT_SEG
  9. #pragma code_seg(AFX_INIT_SEG)
  10. #endif
  11. #ifdef _DEBUG
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15. CNetDatabase & AfxGetNetDB()
  16. {
  17. static CNetDatabase g_netdatabase;
  18. return g_netdatabase;
  19. }
  20. STKNET_API BOOL AfxSendMail(LPCTSTR lpszSenderName, LPCTSTR lpszSenderAddress,
  21.  LPCTSTR lpszReceiverName, LPCTSTR lpszReceiverAddress,
  22.  LPCTSTR lpszSubject, LPCTSTR lpszContent, CString & strErrorMsg )
  23. {
  24. CString sContent = lpszContent;
  25. CString sContentHTML = "<HTML><BODY><PRE>" + sContent + "</PRE></BODY></HTML>";
  26. SMailer::TextPlainContent * content1 = new SMailer::TextPlainContent( LPCTSTR(sContent) );
  27. SMailer::TextHtmlContent  * content2 = new SMailer::TextHtmlContent( LPCTSTR(sContentHTML) );
  28. SMailer::MailInfo info;
  29. info.setSenderName( lpszSenderName );
  30. info.setSenderAddress( lpszSenderAddress );
  31. info.addReceiver( lpszReceiverName, lpszReceiverAddress );
  32. info.setPriority(SMailer::Priority::normal);
  33. info.setSubject( lpszSubject );
  34. info.addMimeContent( content1 );
  35. info.addMimeContent( content2 );
  36. SMailer::MailSender sender( (LPCTSTR)AfxGetProfile().GetEvaluateSMTPServer(),
  37. (LPCTSTR)AfxGetProfile().GetEvaluateSMTPUser(),
  38. (LPCTSTR)AfxGetProfile().GetEvaluateSMTPPasswd() );
  39. sender.setMail(&SMailer::MailWrapper(&info));
  40. BOOL success = sender.sendMail();
  41. if( !success )
  42. strErrorMsg += sender.getErrMessage();
  43. if( content1 ) { delete content1; content1 = NULL; }
  44. if( content2 ) { delete content2; content2 = NULL; }
  45. return success;
  46. }
  47. BOOL AfxGetEvaluateCode( CString & strEvaCode )
  48. {
  49. CSPTime tm = CSPTime::GetCurrentTime();
  50. tm += CSPTimeSpan(AfxGetSView().GetMaxEvaDays()+30);
  51. CSPString strRegCode0;
  52. if( AfxGetSView().DumpEva( tm.GetTime(), strRegCode0 ) )
  53. {
  54. strEvaCode = strRegCode0;
  55. return TRUE;
  56. }
  57. return FALSE;
  58. }
  59. STKNET_API BOOL AfxApplyForEvaluation(LPCTSTR lpszUserName, LPCTSTR lpszDistrict,
  60.    LPCTSTR lpszClass, LPCTSTR lpszEmail,
  61.    CString & strErrorMsg )
  62. {
  63. if( NULL == lpszUserName || NULL == lpszDistrict || NULL == lpszClass || NULL == lpszEmail )
  64. return FALSE;
  65. if( strlen(lpszUserName) <= 0 || strlen(lpszDistrict) <= 0 || strlen(lpszClass) <= 0 || strlen(lpszEmail) <= 0 )
  66. return FALSE;
  67. CString sSubject = AfxModuleLoadString( IDS_APPLYFOREVA_SUBJECT );
  68. CString sContent;
  69. #ifdef CLKLAN_ENGLISH_US
  70. sContent += "rnVersion:Ninebulls310-20060325";
  71. #else
  72. sContent += "rnVersion:CLKing310-20060325";
  73. #endif
  74. sContent += "rnUser:";
  75. sContent += lpszUserName;
  76. sContent += "rn";
  77. sContent += "District:";
  78. sContent += lpszDistrict;
  79. sContent += "rn";
  80. sContent += "Class:";
  81. sContent += lpszClass;
  82. sContent += "rn";
  83. sContent += "Email:";
  84. sContent += lpszEmail;
  85. sContent += "rn";
  86. CString sEvaCode;
  87. if( AfxGetEvaluateCode(sEvaCode) )
  88. {
  89. sContent += "EvaCode:";
  90. sContent += sEvaCode;
  91. sContent += "rn";
  92. if( AfxSendMail( lpszUserName, lpszEmail, "evaluate", (LPCTSTR)AfxGetProfile().GetEvaluateEmail(),
  93. (LPCTSTR)sSubject, (LPCTSTR)sContent, strErrorMsg ) )
  94. {
  95. CString sReplyContent = AfxModuleLoadString( IDS_APPLYFOREVA_REPLYCONTENT );
  96. sReplyContent += "rnrn    ";
  97. sReplyContent += sEvaCode;
  98. sReplyContent += "rnrn";
  99. sReplyContent += AfxModuleLoadString( IDS_APPLYFOREVA_REPLYDESCRIPT );
  100. return AfxSendMail( "", (LPCTSTR)AfxGetProfile().GetEvaluateEmail(), lpszUserName, lpszEmail,
  101. (LPCTSTR)("Re:"+sSubject), (LPCTSTR)sReplyContent, strErrorMsg );
  102. }
  103. }
  104. return FALSE;
  105. }
  106. BOOL AfxDoProxySetting( )
  107. {
  108. CProxySetDlg dlg;
  109. dlg.DoModal();
  110. return TRUE;
  111. }
  112. //////////////////////////////////////////////////////////////////////////////
  113. // 注册表读写函数
  114. BOOL AfxSetRegKey(LPCTSTR lpszKey, LPCTSTR lpszValue, LPCTSTR lpszValueName)
  115. {
  116. if (lpszValueName == NULL)
  117. {
  118. if (::RegSetValue(HKEY_CLASSES_ROOT, lpszKey, REG_SZ,
  119.   lpszValue, lstrlen(lpszValue) * sizeof(TCHAR)) != ERROR_SUCCESS)
  120. {
  121. TRACE1("Warning: registration database update failed for key '%s'.n",
  122. lpszKey);
  123. return FALSE;
  124. }
  125. return TRUE;
  126. }
  127. else
  128. {
  129. HKEY hKey;
  130. if(::RegCreateKey(HKEY_CLASSES_ROOT, lpszKey, &hKey) == ERROR_SUCCESS)
  131. {
  132. LONG lResult = ::RegSetValueEx(hKey, lpszValueName, 0, REG_SZ,
  133. (CONST BYTE*)lpszValue, (lstrlen(lpszValue) + 1) * sizeof(TCHAR));
  134. if(::RegCloseKey(hKey) == ERROR_SUCCESS && lResult == ERROR_SUCCESS)
  135. return TRUE;
  136. }
  137. TRACE1("Warning: registration database update failed for key '%s'.n", lpszKey);
  138. return FALSE;
  139. }
  140. }
  141. LONG AfxGetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata)
  142. {
  143. HKEY hkey;
  144. LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey);
  145. if (retval == ERROR_SUCCESS) {
  146. long datasize = MAX_PATH;
  147. TCHAR data[MAX_PATH];
  148. RegQueryValue(hkey, NULL, data, &datasize);
  149. lstrcpy(retdata,data);
  150. RegCloseKey(hkey);
  151. }
  152. return retval;
  153. }
  154. // recursively remove a registry key if and only if it has no subkeys
  155. BOOL AfxDeleteRegKey(LPCTSTR lpszKey)
  156. {
  157. // copy the string
  158. LPTSTR lpszKeyCopy = _tcsdup(lpszKey);
  159. LPTSTR lpszLast = lpszKeyCopy + lstrlen(lpszKeyCopy);
  160. // work until the end of the string
  161. while (lpszLast != NULL)
  162. {
  163. *lpszLast = '';
  164. lpszLast = _tcsdec(lpszKeyCopy, lpszLast);
  165. // try to open that key
  166. HKEY hKey;
  167. if (::RegOpenKey(HKEY_CLASSES_ROOT, lpszKeyCopy, &hKey) != ERROR_SUCCESS)
  168. break;
  169. // enumerate the keys underneath
  170. TCHAR szScrap[_MAX_PATH+1];
  171. DWORD dwLen = sizeof(szScrap);
  172. BOOL bItExists = FALSE;
  173. if (::RegEnumKey(hKey, 0, szScrap, dwLen) == ERROR_SUCCESS)
  174. bItExists = TRUE;
  175. ::RegCloseKey(hKey);
  176. // found one?  quit looping
  177. if (bItExists)
  178. break;
  179. // otherwise, delete and find the previous backwhack
  180. ::RegDeleteKey(HKEY_CLASSES_ROOT, lpszKeyCopy);
  181. lpszLast = _tcsrchr(lpszKeyCopy, '\');
  182. }
  183. // release the string and return
  184. free(lpszKeyCopy);
  185. return TRUE;
  186. }
  187. HKEY AfxGetSectionKey( HKEY hKey, LPCTSTR szRegKeyGroup, LPCTSTR szRegKeyCompany, LPCTSTR szRegKeyApp, LPCTSTR lpszSection )
  188. {
  189. HKEY hGroupKey = NULL;
  190. HKEY hCompanyKey = NULL;
  191. HKEY hAppKey = NULL;
  192. HKEY hSectionKey = NULL;
  193. if (RegOpenKeyEx( hKey, szRegKeyGroup, 0, KEY_WRITE|KEY_READ,
  194. &hGroupKey) == ERROR_SUCCESS)
  195. {
  196. DWORD dw;
  197. if (RegCreateKeyEx(hGroupKey, szRegKeyCompany, 0, REG_NONE,
  198. REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
  199. &hCompanyKey, &dw) == ERROR_SUCCESS )
  200. {
  201. RegCreateKeyEx(hCompanyKey, szRegKeyApp, 0, REG_NONE,
  202. REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
  203. &hAppKey, &dw);
  204. }
  205. }
  206. if (hGroupKey != NULL)
  207. RegCloseKey(hGroupKey);
  208. if (hCompanyKey != NULL)
  209. RegCloseKey(hCompanyKey);
  210. DWORD dw;
  211. if( NULL == hAppKey )
  212. return FALSE;
  213. RegCreateKeyEx(hAppKey, lpszSection, 0, REG_NONE,
  214. REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
  215. &hSectionKey, &dw);
  216. RegCloseKey(hAppKey);
  217. return hSectionKey;
  218. }
  219. BOOL AfxRegSetValue( LPCTSTR szRegKeyCompany, LPCTSTR szRegKeyApp, LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszValue )
  220. {
  221. ASSERT( lpszSection && lpszEntry && lpszValue );
  222. if( !lpszSection || !lpszEntry || !lpszValue )
  223. return FALSE;
  224. HKEY hSectionKey = AfxGetSectionKey( HKEY_LOCAL_MACHINE, _T("Software"), szRegKeyCompany, szRegKeyApp, lpszSection );
  225. if (hSectionKey == NULL)
  226. return FALSE;
  227. LONG lResult = RegSetValueEx(hSectionKey, lpszEntry, NULL, REG_SZ,
  228. (LPBYTE)lpszValue, (lstrlen(lpszValue)+1)*sizeof(TCHAR));
  229. RegCloseKey(hSectionKey);
  230. return lResult == ERROR_SUCCESS;
  231. }
  232. CString AfxRegQueryString(HKEY hKey, LPCTSTR szRegKeyGroup, LPCTSTR szRegKeyCompany, LPCTSTR szRegKeyApp, LPCTSTR lpszSection, LPCTSTR lpszEntry, LPCTSTR lpszDefault )
  233. // hKey = HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, or so
  234. {
  235. HKEY hSecKey = AfxGetSectionKey(hKey, szRegKeyGroup, szRegKeyCompany, szRegKeyApp, lpszSection);
  236. if (hSecKey == NULL)
  237. return lpszDefault;
  238. CString strValue;
  239. DWORD dwType, dwCount;
  240. LONG lResult = RegQueryValueEx(hSecKey, (LPTSTR)lpszEntry, NULL, &dwType,
  241. NULL, &dwCount);
  242. if (lResult == ERROR_SUCCESS)
  243. {
  244. ASSERT(dwType == REG_SZ);
  245. lResult = RegQueryValueEx(hSecKey, (LPTSTR)lpszEntry, NULL, &dwType,
  246. (LPBYTE)strValue.GetBuffer(dwCount/sizeof(TCHAR)), &dwCount);
  247. strValue.ReleaseBuffer();
  248. }
  249. RegCloseKey(hSecKey);
  250. if (lResult == ERROR_SUCCESS)
  251. {
  252. ASSERT(dwType == REG_SZ);
  253. return strValue;
  254. }
  255. return lpszDefault;
  256. }
  257. BOOL AfxRegQueryString(HKEY hKey, LPCTSTR szRegKeyGroup, LPCTSTR szRegKeyCompany, LPCTSTR szRegKeyApp,
  258.    CStringArray &astrName, CStringArray &astrData )
  259. // hKey = HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, or so
  260. {
  261. HKEY hSecKey = AfxGetSectionKey(hKey, szRegKeyGroup, szRegKeyCompany, szRegKeyApp, "");
  262. if (hSecKey == NULL)
  263. return FALSE;
  264. int nIndex = 0;
  265. while( TRUE )
  266. {
  267. CString strName, strData;
  268. CHAR szName[MAX_PATH];
  269. BYTE szData[MAX_PATH];
  270. DWORD dwType, dwNameLen=sizeof(szName), dwDataLen=sizeof(szData);
  271. if( ERROR_SUCCESS != RegEnumValue(hSecKey, nIndex, szName, &dwNameLen,
  272. NULL, &dwType, szData, &dwDataLen ) )
  273. break;
  274. if( dwType == REG_SZ )
  275. {
  276. astrName.Add( (LPCTSTR)szName );
  277. astrData.Add( (LPCTSTR)szData );
  278. }
  279. nIndex ++;
  280. }
  281. RegCloseKey(hSecKey);
  282. return astrName.GetSize() > 0;
  283. }
  284. HINSTANCE AfxGotoURL(LPCTSTR url, int showcmd)
  285. {
  286. TCHAR key[MAX_PATH + MAX_PATH];
  287. // First try ShellExecute()
  288. HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, showcmd);
  289. // If it failed, get the .htm regkey and lookup the program
  290. if ((UINT)result <= HINSTANCE_ERROR) {
  291. if (AfxGetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) {
  292. lstrcat(key, _T("\shell\open\command"));
  293. if (AfxGetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) {
  294. TCHAR *pos;
  295. pos = _tcsstr(key, _T(""%1""));
  296. if (pos == NULL) {                     // No quotes found
  297. pos = strstr(key, _T("%1"));       // Check for %1, without quotes 
  298. if (pos == NULL)                   // No parameter at all...
  299. pos = key+lstrlen(key)-1;
  300. else
  301. *pos = '';                   // Remove the parameter
  302. }
  303. else
  304. *pos = '';                       // Remove the parameter
  305. lstrcat(pos, _T(" "));
  306. lstrcat(pos, url);
  307. result = (HINSTANCE) WinExec(key,showcmd);
  308. }
  309. }
  310. }
  311. return result;
  312. }
  313. BOOL AfxRegisterActiveXCtrls( LPCTSTR lpszOcxFileName )
  314. {
  315. HINSTANCE hLib = LoadLibrary( lpszOcxFileName );
  316. if (hLib < (HINSTANCE)HINSTANCE_ERROR)
  317. return FALSE; 
  318.   
  319. FARPROC   lpfnRegister;
  320. (FARPROC&)lpfnRegister = ::GetProcAddress( hLib, _T("DllRegisterServer") );
  321.   
  322. if (lpfnRegister!= NULL)
  323. {
  324. (*lpfnRegister)();//Register control
  325. return TRUE;
  326. }
  327. return FALSE;
  328. }
  329. CString AfxGetVersionString( )
  330. {
  331. static CString strVersion;
  332. if( strVersion.IsEmpty() )
  333. {
  334. if( AfxGetSView().IsProf() )
  335. strVersion = AfxModuleLoadString( IDS_VERSION_PROFESSIONAL );
  336. else if( AfxGetSView().IsStd() )
  337. strVersion = AfxModuleLoadString( IDS_VERSION_STDANDARD );
  338. else
  339. strVersion = AfxModuleLoadString( IDS_VERSION_EVALUATE );
  340. strVersion = (LPCTSTR)AfxGetProfile().GetVersion( ) + strVersion;
  341. }
  342. return strVersion;
  343. }
  344. CString AfxGetFileTitle( LPCTSTR lpszPathName )
  345. {
  346. CString strPathName = lpszPathName;
  347. if( strPathName.IsEmpty() )
  348. return "";
  349. UINT nTitleLen = AfxGetFileTitle( strPathName, NULL, 0 );
  350. if( nTitleLen <= 0 || nTitleLen-1 > (UINT)strPathName.GetLength() )
  351. return "";
  352. CString strTitle = strPathName.Right( nTitleLen-1 );
  353. return strTitle;
  354. }
  355. CString AfxGetFileTitleNoExt( LPCTSTR lpszPathName )
  356. {
  357. CString strPathName = lpszPathName;
  358. if( strPathName.IsEmpty() )
  359. return "";
  360. UINT nTitleLen = AfxGetFileTitle( strPathName, NULL, 0 );
  361. if( nTitleLen <= 0 || nTitleLen-1 > (UINT)strPathName.GetLength() )
  362. return "";
  363. CString strTitle = strPathName.Right( nTitleLen-1 );
  364. int nIndex = strTitle.ReverseFind( '.' );
  365. if( -1 != nIndex )
  366. strTitle = strTitle.Left( nIndex );
  367. return strTitle;
  368. }
  369. CString AfxGetFileDirectoryExist( LPCTSTR lpszPathName, LPCTSTR lpszDefault )
  370. {
  371. CString strPathName = lpszPathName;
  372. CString strDefault = lpszDefault;
  373. if( strPathName.IsEmpty() )
  374. return strDefault;
  375. CString strResult = strPathName;
  376. while( !strResult.IsEmpty()
  377. && FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes( strResult ) )
  378. {
  379. int nIndex = strResult.ReverseFind( '\' );
  380. if( -1 == nIndex )
  381. nIndex = strResult.ReverseFind( '/' );
  382. if( -1 == nIndex )
  383. {
  384. strResult = strDefault;
  385. break;
  386. }
  387. strResult = strResult.Left( nIndex );
  388. }
  389. if( strResult.GetLength() <= 0 )
  390. return strDefault;
  391. int nLen = strResult.GetLength();
  392. if( nLen > 0 && strResult[nLen-1] != '\' && strResult[nLen-1] != '/' )
  393. strResult += STRING_DIRSEP;
  394. return strResult;
  395. }
  396. #ifdef AFX_CORE2_SEG
  397. #pragma code_seg(AFX_CORE2_SEG)
  398. #endif
  399. #ifdef AFX_TERM_SEG
  400. #pragma code_seg(AFX_TERM_SEG)
  401. #endif
  402. #ifdef AFX_INIT_SEG
  403. #pragma code_seg(AFX_INIT_SEG)
  404. #endif
  405. /////////////////////////////////////////////////////////////////////////////