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

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CTechParameters;
  7. class CColorRefContainer;
  8. class CColorClass;
  9. class CColorClassContainer;
  10. class CStProfile;
  11. */
  12. #include "stdafx.h"
  13. #include "../Include/Profile.h"
  14. #include "SelfDB.h"
  15. #ifdef _DEBUG
  16. #undef THIS_FILE
  17. static char THIS_FILE[]=__FILE__;
  18. #define new DEBUG_NEW
  19. #endif
  20. //////////////////////////////////////////////////////////////////////
  21. // CTechParameters
  22. CTechParameters::CTechParameters()
  23. {
  24. }
  25. void CTechParameters::Clear()
  26. {
  27. ma.Clear();
  28. bbi.Clear();
  29. boll.Clear();
  30. pv.Clear();
  31. sar.Clear();
  32. dj.Clear();
  33. cw.Clear();
  34. macd.Clear();
  35. mike.Clear();
  36. psy.Clear();
  37. volume.Clear();
  38. nvi.Clear();
  39. pvi.Clear();
  40. vr.Clear();
  41. vroc.Clear();
  42. obv.Clear();
  43. mobv.Clear();
  44. mfi.Clear();
  45. vmacd.Clear();
  46. wvad.Clear();
  47. emv.Clear();
  48. vrsi.Clear();
  49. nvrsi.Clear();
  50. ad.Clear();
  51. ci.Clear();
  52. kdj.Clear();
  53. r.Clear();
  54. rsi.Clear();
  55. bias.Clear();
  56. mtm.Clear();
  57. dmi.Clear();
  58. roc.Clear();
  59. cci.Clear();
  60. cv.Clear();
  61. arbr.Clear();
  62. cr.Clear();
  63. osc.Clear();
  64. uos.Clear();
  65. maosc.Clear();
  66. bias36.Clear();
  67. dpo.Clear();
  68. kst.Clear();
  69. rei.Clear();
  70. dmki.Clear();
  71. pcnt.Clear();
  72. hlc.Clear();
  73. cdp.Clear();
  74. asi.Clear();
  75. atr.Clear();
  76. cyo.Clear();
  77. dcyo.Clear();
  78. hsl.Clear();
  79. dper.Clear();
  80. }
  81. void CTechParameters::SetKData(CKData * pKData)
  82. {
  83. ma.SetKData(pKData);
  84. bbi.SetKData(pKData);
  85. boll.SetKData(pKData);
  86. pv.SetKData(pKData);
  87. sar.SetKData(pKData);
  88. dj.SetKData(pKData);
  89. cw.SetKData(pKData);
  90. macd.SetKData(pKData);
  91. mike.SetKData(pKData);
  92. psy.SetKData(pKData);
  93. volume.SetKData(pKData);
  94. nvi.SetKData(pKData);
  95. pvi.SetKData(pKData);
  96. vr.SetKData(pKData);
  97. vroc.SetKData(pKData);
  98. obv.SetKData(pKData);
  99. mobv.SetKData(pKData);
  100. mfi.SetKData(pKData);
  101. vmacd.SetKData(pKData);
  102. wvad.SetKData(pKData);
  103. emv.SetKData(pKData);
  104. vrsi.SetKData(pKData);
  105. nvrsi.SetKData(pKData);
  106. ad.SetKData(pKData);
  107. ci.SetKData(pKData);
  108. kdj.SetKData(pKData);
  109. r.SetKData(pKData);
  110. rsi.SetKData(pKData);
  111. bias.SetKData(pKData);
  112. mtm.SetKData(pKData);
  113. dmi.SetKData(pKData);
  114. roc.SetKData(pKData);
  115. cci.SetKData(pKData);
  116. cv.SetKData(pKData);
  117. arbr.SetKData(pKData);
  118. cr.SetKData(pKData);
  119. osc.SetKData(pKData);
  120. uos.SetKData(pKData);
  121. maosc.SetKData(pKData);
  122. bias36.SetKData(pKData);
  123. dpo.SetKData(pKData);
  124. kst.SetKData(pKData);
  125. rei.SetKData(pKData);
  126. dmki.SetKData(pKData);
  127. pcnt.SetKData(pKData);
  128. hlc.SetKData(pKData);
  129. cdp.SetKData(pKData);
  130. asi.SetKData(pKData);
  131. atr.SetKData(pKData);
  132. cyo.SetKData(pKData);
  133. dcyo.SetKData(pKData);
  134. hsl.SetKData(pKData);
  135. dper.SetKData(pKData);
  136. }
  137. void CTechParameters::SetDefaultParametersAll()
  138. {
  139. ma.SetDefaultParameters();
  140. bbi.SetDefaultParameters();
  141. boll.SetDefaultParameters();
  142. pv.SetDefaultParameters();
  143. sar.SetDefaultParameters();
  144. dj.SetDefaultParameters();
  145. cw.SetDefaultParameters();
  146. macd.SetDefaultParameters();
  147. mike.SetDefaultParameters();
  148. psy.SetDefaultParameters();
  149. volume.SetDefaultParameters();
  150. nvi.SetDefaultParameters();
  151. pvi.SetDefaultParameters();
  152. vr.SetDefaultParameters();
  153. vroc.SetDefaultParameters();
  154. obv.SetDefaultParameters();
  155. mobv.SetDefaultParameters();
  156. mfi.SetDefaultParameters();
  157. vmacd.SetDefaultParameters();
  158. wvad.SetDefaultParameters();
  159. emv.SetDefaultParameters();
  160. vrsi.SetDefaultParameters();
  161. nvrsi.SetDefaultParameters();
  162. ad.SetDefaultParameters();
  163. ci.SetDefaultParameters();
  164. kdj.SetDefaultParameters();
  165. r.SetDefaultParameters();
  166. rsi.SetDefaultParameters();
  167. bias.SetDefaultParameters();
  168. mtm.SetDefaultParameters();
  169. dmi.SetDefaultParameters();
  170. roc.SetDefaultParameters();
  171. cci.SetDefaultParameters();
  172. cv.SetDefaultParameters();
  173. arbr.SetDefaultParameters();
  174. cr.SetDefaultParameters();
  175. osc.SetDefaultParameters();
  176. uos.SetDefaultParameters();
  177. maosc.SetDefaultParameters();
  178. bias36.SetDefaultParameters();
  179. dpo.SetDefaultParameters();
  180. kst.SetDefaultParameters();
  181. rei.SetDefaultParameters();
  182. dmki.SetDefaultParameters();
  183. pcnt.SetDefaultParameters();
  184. hlc.SetDefaultParameters();
  185. cdp.SetDefaultParameters();
  186. asi.SetDefaultParameters();
  187. atr.SetDefaultParameters();
  188. cyo.SetDefaultParameters();
  189. dcyo.SetDefaultParameters();
  190. hsl.SetDefaultParameters();
  191. dper.SetDefaultParameters();
  192. AfxGetProfile().StoreProfile();
  193. }
  194. BOOL CTechParameters::FindParameters(UINT nTech, CTechnique * pTech)
  195. {
  196. switch(nTech)
  197. {
  198. case STT_MA: ((CMA *)pTech)->AttachParameters(ma); break;
  199. case STT_BBI: ((CBBI *)pTech)->AttachParameters(bbi); break;
  200. case STT_BOLL: ((CBOLL *)pTech)->AttachParameters(boll); break;
  201. case STT_PV: ((CPV *)pTech)->AttachParameters(pv); break;
  202. case STT_SAR: ((CSAR *)pTech)->AttachParameters(sar); break;
  203. case STT_DJ: ((CDJ *)pTech)->AttachParameters(dj); break;
  204. case STT_CW: ((CCW *)pTech)->AttachParameters(cw); break;
  205. case STT_MACD: ((CMACD *)pTech)->AttachParameters(macd); break;
  206. case STT_MIKE: ((CMIKE *)pTech)->AttachParameters(mike); break;
  207. case STT_PSY: ((CPSY *)pTech)->AttachParameters(psy); break;
  208. case STT_VOLUME: ((CVOLUME *)pTech)->AttachParameters(volume); break;
  209. case STT_NVI: ((CNVI *)pTech)->AttachParameters(nvi); break;
  210. case STT_PVI: ((CPVI *)pTech)->AttachParameters(pvi); break;
  211. case STT_VR: ((CVR *)pTech)->AttachParameters(vr); break;
  212. case STT_VROC: ((CVROC *)pTech)->AttachParameters(vroc); break;
  213. case STT_OBV: ((COBV *)pTech)->AttachParameters(obv); break;
  214. case STT_MOBV: ((CMOBV *)pTech)->AttachParameters(mobv); break;
  215. case STT_MFI: ((CMFI *)pTech)->AttachParameters(mfi); break;
  216. case STT_VMACD: ((CVMACD *)pTech)->AttachParameters(vmacd); break;
  217. case STT_WVAD: ((CWVAD *)pTech)->AttachParameters(wvad); break;
  218. case STT_EMV: ((CEMV *)pTech)->AttachParameters(emv); break;
  219. case STT_VRSI: ((CVRSI *)pTech)->AttachParameters(vrsi); break;
  220. case STT_NVRSI: ((CNVRSI *)pTech)->AttachParameters(nvrsi); break;
  221. case STT_AD: ((CAD *)pTech)->AttachParameters(ad); break;
  222. case STT_CI: ((CCI *)pTech)->AttachParameters(ci); break;
  223. case STT_KDJ: ((CKDJ *)pTech)->AttachParameters(kdj); break;
  224. case STT_R: ((CR *)pTech)->AttachParameters(r); break;
  225. case STT_RSI: ((CRSI *)pTech)->AttachParameters(rsi); break;
  226. case STT_BIAS: ((CBIAS *)pTech)->AttachParameters(bias); break;
  227. case STT_MTM: ((CMTM *)pTech)->AttachParameters(mtm); break;
  228. case STT_DMI: ((CDMI *)pTech)->AttachParameters(dmi); break;
  229. case STT_ROC: ((CROC *)pTech)->AttachParameters(roc); break;
  230. case STT_CCI: ((CCCI *)pTech)->AttachParameters(cci); break;
  231. case STT_CV: ((CCV *)pTech)->AttachParameters(cv); break;
  232. case STT_ARBR: ((CARBR *)pTech)->AttachParameters(arbr); break;
  233. case STT_CR: ((CCR *)pTech)->AttachParameters(cr); break;
  234. case STT_OSC: ((COSC *)pTech)->AttachParameters(osc); break;
  235. case STT_UOS: ((CUOS *)pTech)->AttachParameters(uos); break;
  236. case STT_MAOSC: ((CMAOSC *)pTech)->AttachParameters(maosc); break;
  237. case STT_36BIAS: ((C36BIAS *)pTech)->AttachParameters(bias36); break;
  238. case STT_DPO: ((CDPO *)pTech)->AttachParameters(dpo); break;
  239. case STT_KST: ((CKST *)pTech)->AttachParameters(kst); break;
  240. case STT_REI: ((CREI *)pTech)->AttachParameters(rei); break;
  241. case STT_DMKI: ((CDMKI *)pTech)->AttachParameters(dmki); break;
  242. case STT_PCNT: ((CPCNT *)pTech)->AttachParameters(pcnt); break;
  243. case STT_HLC: ((CHLC *)pTech)->AttachParameters(hlc); break;
  244. case STT_CDP: ((CCDP *)pTech)->AttachParameters(cdp); break;
  245. case STT_ASI: ((CASI *)pTech)->AttachParameters(asi); break;
  246. case STT_ATR: ((CATR *)pTech)->AttachParameters(atr); break;
  247. case STT_CYO: ((CCYO *)pTech)->AttachParameters(cyo); break;
  248. case STT_DCYO: ((CDCYO *)pTech)->AttachParameters(dcyo); break;
  249. case STT_HSL: ((CHSL *)pTech)->AttachParameters(hsl); break;
  250. case STT_DPER: ((CDPER *)pTech)->AttachParameters(dper); break;
  251. default:
  252. SP_ASSERT(FALSE);
  253. return FALSE;
  254. }
  255. return TRUE;
  256. }
  257. void CTechParameters::Serialize(CSPArchive &ar)
  258. {
  259. if(ar.IsStoring())
  260. {
  261. // CMA
  262. ar << ma.m_nType;
  263. ma.m_adwMADays.Serialize(ar);
  264. ar << ma.m_itsGoldenFork;
  265. ar << ma.m_itsDeadFork;
  266. ar << ma.m_itsLong;
  267. ar << ma.m_itsShort;
  268. // CBBI
  269. ar << bbi.m_nMA1Days;
  270. ar << bbi.m_nMA2Days;
  271. ar << bbi.m_nMA3Days;
  272. ar << bbi.m_nMA4Days;
  273. ar << bbi.m_itsGoldenFork;
  274. ar << bbi.m_itsDeadFork;
  275. // CBOLL
  276. ar << boll.m_dMultiUp;
  277. ar << boll.m_dMultiDown;
  278. ar << boll.m_nMADays;
  279. ar << boll.m_itsSupport;
  280. ar << boll.m_itsResistance;
  281. // CPV
  282. // CSAR
  283. ar << sar.m_nInitDays;
  284. ar << sar.m_bFirstUp;
  285. ar << sar.m_dAFStep;
  286. ar << sar.m_dAFMax;
  287. ar << sar.m_itsBuy;
  288. ar << sar.m_itsSell;
  289. // CDJ
  290. ar << dj.m_strCodeSha;
  291. ar << dj.m_strCodeSzn;
  292. // CCW
  293. ar << cw.m_dChangeHand;
  294. // CMACD
  295. ar << macd.m_nEMA1Days;
  296. ar << macd.m_nEMA2Days;
  297. ar << macd.m_nDIFDays;
  298. ar << macd.m_itsDeviateOnBottom;
  299. ar << macd.m_itsDeviateOnTop;
  300. ar << macd.m_itsGoldenFork;
  301. ar << macd.m_itsDeadFork;
  302. // CMIKE
  303. ar << mike.m_nDays;
  304. // CPSY
  305. ar << psy.m_nDays;
  306. ar << psy.m_itsSold;
  307. ar << psy.m_itsBought;
  308. // CVOLUME
  309. volume.m_adwMADays.Serialize(ar);
  310. ar << volume.m_itsDeviateOnBottom;
  311. ar << volume.m_itsDeviateOnTop;
  312. ar << volume.m_itsLong;
  313. ar << volume.m_itsShort;
  314. // CNVI
  315. ar << nvi.m_nMADays;
  316. ar << nvi.m_itsGoldenFork;
  317. ar << nvi.m_itsDeadFork;
  318. // CPVI
  319. ar << pvi.m_nMADays;
  320. ar << pvi.m_itsGoldenFork;
  321. ar << pvi.m_itsDeadFork;
  322. // CVR
  323. ar << vr.m_nDays;
  324. ar << vr.m_itsLong;
  325. ar << vr.m_itsShort;
  326. // CVROC
  327. ar << vroc.m_nDays;
  328. ar << vroc.m_nMADays;
  329. ar << vroc.m_itsDeviateOnBottom;
  330. ar << vroc.m_itsDeviateOnTop;
  331. // COBV
  332. ar << obv.m_itsDeviateOnBottom;
  333. ar << obv.m_itsDeviateOnTop;
  334. // CMOBV
  335. ar << mobv.m_nDays1;
  336. ar << mobv.m_nDays2;
  337. ar << mobv.m_itsGoldenFork;
  338. ar << mobv.m_itsDeadFork;
  339. // CMFI
  340. ar << mfi.m_nDays;
  341. ar << mfi.m_itsLong;
  342. ar << mfi.m_itsShort;
  343. // CVMACD
  344. ar << vmacd.m_nEMA1Days;
  345. ar << vmacd.m_nEMA2Days;
  346. ar << vmacd.m_nDIFDays;
  347. ar << vmacd.m_itsDeviateOnBottom;
  348. ar << vmacd.m_itsDeviateOnTop;
  349. ar << vmacd.m_itsGoldenFork;
  350. ar << vmacd.m_itsDeadFork;
  351. // CWVAD
  352. ar << wvad.m_nDays;
  353. ar << wvad.m_itsLong;
  354. ar << wvad.m_itsShort;
  355. // CEMV
  356. ar << emv.m_nDays;
  357. ar << emv.m_nMADays;
  358. ar << emv.m_itsGoldenFork;
  359. ar << emv.m_itsDeadFork;
  360. // CVRSI
  361. ar << vrsi.m_nDays;
  362. ar << vrsi.m_itsDeviateOnBottom;
  363. ar << vrsi.m_itsDeviateOnTop;
  364. ar << vrsi.m_itsSold;
  365. ar << vrsi.m_itsBought;
  366. // CNVRSI
  367. ar << nvrsi.m_nDays;
  368. ar << nvrsi.m_itsDeviateOnBottom;
  369. ar << nvrsi.m_itsDeviateOnTop;
  370. ar << nvrsi.m_itsSold;
  371. ar << nvrsi.m_itsBought;
  372. // CAD
  373. ar << ad.m_nDays;
  374. // CCI
  375. // CKDJ
  376. ar << kdj.m_nRSVDays;
  377. ar << kdj.m_nKDays;
  378. ar << kdj.m_nDDays;
  379. ar << kdj.m_nJ;
  380. ar << kdj.m_itsGoldenFork;
  381. ar << kdj.m_itsDeadFork;
  382. // CR
  383. ar << r.m_nDays;
  384. // CRSI
  385. rsi.m_adwDays.Serialize(ar);
  386. ar << rsi.m_itsSold;
  387. ar << rsi.m_itsGoldenFork;
  388. ar << rsi.m_itsDeadFork;
  389. // CBIAS
  390. ar << bias.m_nDays;
  391. ar << bias.m_itsSold;
  392. ar << bias.m_itsBought;
  393. // CMTM
  394. ar << mtm.m_nDays;
  395. ar << mtm.m_nMADays;
  396. ar << mtm.m_itsGoldenFork;
  397. ar << mtm.m_itsDeadFork;
  398. // CDMI
  399. ar << dmi.m_nDays;
  400. // CROC
  401. ar << roc.m_nDays;
  402. ar << roc.m_nMADays;
  403. ar << roc.m_itsGoldenFork;
  404. ar << roc.m_itsDeadFork;
  405. // CCCI
  406. ar << cci.m_nDays;
  407. ar << cci.m_dQuotiety;
  408. ar << cci.m_nMADays;
  409. ar << cci.m_itsGoldenFork;
  410. ar << cci.m_itsDeadFork;
  411. // CCV
  412. ar << cv.m_nMAHLDays;
  413. ar << cv.m_nCVDays;
  414. ar << cv.m_itsSold;
  415. ar << cv.m_itsBought;
  416. // CARBR
  417. ar << arbr.m_nDays;
  418. ar << arbr.m_itsGoldenFork;
  419. ar << arbr.m_itsDeadFork;
  420. ar << arbr.m_itsSold;
  421. ar << arbr.m_itsBought;
  422. // CCR
  423. ar << cr.m_nDays;
  424. ar << cr.m_nMADaysA;
  425. ar << cr.m_nMADaysB;
  426. ar << cr.m_nMADaysC;
  427. ar << cr.m_nMADaysD;
  428. ar << cr.m_itsSold;
  429. ar << cr.m_itsBought;
  430. // COSC
  431. ar << osc.m_nDays;
  432. ar << osc.m_nMADays;
  433. ar << osc.m_itsGoldenFork;
  434. ar << osc.m_itsDeadFork;
  435. // CUOS
  436. ar << uos.m_nDays1;
  437. ar << uos.m_nDays2;
  438. ar << uos.m_nDays3;
  439. ar << uos.m_nMADays;
  440. ar << uos.m_itsGoldenFork;
  441. ar << uos.m_itsDeadFork;
  442. // CMAOSC
  443. ar << maosc.m_nDays1;
  444. ar << maosc.m_nDays2;
  445. ar << maosc.m_nMADays;
  446. ar << maosc.m_itsGoldenFork;
  447. ar << maosc.m_itsDeadFork;
  448. // C36BIAS
  449. ar << bias36.m_itsSold;
  450. ar << bias36.m_itsBought;
  451. // CDPO
  452. ar << dpo.m_nDays;
  453. ar << dpo.m_nMADays;
  454. ar << dpo.m_itsGoldenFork;
  455. ar << dpo.m_itsDeadFork;
  456. // CKST
  457. kst.m_adwROCDays.Serialize(ar);
  458. ar << kst.m_nMADays;
  459. ar << kst.m_itsGoldenFork;
  460. ar << kst.m_itsDeadFork;
  461. // CREI
  462. ar << rei.m_nDays;
  463. ar << rei.m_itsLong;
  464. ar << rei.m_itsShort;
  465. // CDMKI
  466. ar << dmki.m_nDays;
  467. ar << dmki.m_itsSold;
  468. ar << dmki.m_itsBought;
  469. // CPCNT
  470. ar << pcnt.m_nMADays;
  471. ar << pcnt.m_itsGoldenFork;
  472. ar << pcnt.m_itsDeadFork;
  473. // CHLC
  474. ar << hlc.m_nDays;
  475. ar << hlc.m_nMADays;
  476. ar << hlc.m_itsGoldenFork;
  477. ar << hlc.m_itsDeadFork;
  478. // CCDP
  479. // CASI
  480. ar << asi.m_nDays;
  481. ar << asi.m_itsDeviateOnBottom;
  482. ar << asi.m_itsDeviateOnTop;
  483. // CATR
  484. ar << atr.m_nDays;
  485. ar << atr.m_itsSold;
  486. ar << atr.m_itsBought;
  487. // CCYO
  488. cyo.m_adwMTMDays.Serialize(ar);
  489. ar << cyo.m_nMADays;
  490. ar << cyo.m_itsGoldenFork;
  491. ar << cyo.m_itsDeadFork;
  492. // CDCYO
  493. dcyo.m_adwMTMDays.Serialize(ar);
  494. ar << dcyo.m_nMADays;
  495. ar << dcyo.m_itsGoldenFork;
  496. ar << dcyo.m_itsDeadFork;
  497. // CHSL
  498. ar << hsl.m_nDays;
  499. ar << hsl.m_nMADays;
  500. ar << hsl.m_itsGoldenFork;
  501. ar << hsl.m_itsDeadFork;
  502. // CDPER
  503. ar << dper.m_nDays;
  504. ar << dper.m_nMADays;
  505. ar << dper.m_nDetrendDays;
  506. ar << dper.m_itsGoldenFork;
  507. ar << dper.m_itsDeadFork;
  508. DWORD dwTemp = (DWORD)(-1);
  509. for(int i=0; i<200; i++)
  510. ar << dwTemp;
  511. }
  512. else
  513. {
  514. // CMA
  515. ar >> ma.m_nType;
  516. ma.m_adwMADays.Serialize(ar);
  517. ar >> ma.m_itsGoldenFork;
  518. ar >> ma.m_itsDeadFork;
  519. ar >> ma.m_itsLong;
  520. ar >> ma.m_itsShort;
  521. // CBBI
  522. ar >> bbi.m_nMA1Days;
  523. ar >> bbi.m_nMA2Days;
  524. ar >> bbi.m_nMA3Days;
  525. ar >> bbi.m_nMA4Days;
  526. ar >> bbi.m_itsGoldenFork;
  527. ar >> bbi.m_itsDeadFork;
  528. // CBOLL
  529. ar >> boll.m_dMultiUp;
  530. ar >> boll.m_dMultiDown;
  531. ar >> boll.m_nMADays;
  532. ar >> boll.m_itsSupport;
  533. ar >> boll.m_itsResistance;
  534. // CPV
  535. // CSAR
  536. ar >> sar.m_nInitDays;
  537. ar >> sar.m_bFirstUp;
  538. ar >> sar.m_dAFStep;
  539. ar >> sar.m_dAFMax;
  540. ar >> sar.m_itsBuy;
  541. ar >> sar.m_itsSell;
  542. // CDJ
  543. ar >> dj.m_strCodeSha;
  544. ar >> dj.m_strCodeSzn;
  545. // CCW
  546. ar >> cw.m_dChangeHand;
  547. // CMACD
  548. ar >> macd.m_nEMA1Days;
  549. ar >> macd.m_nEMA2Days;
  550. ar >> macd.m_nDIFDays;
  551. ar >> macd.m_itsDeviateOnBottom;
  552. ar >> macd.m_itsDeviateOnTop;
  553. ar >> macd.m_itsGoldenFork;
  554. ar >> macd.m_itsDeadFork;
  555. // CMIKE
  556. ar >> mike.m_nDays;
  557. // CPSY
  558. ar >> psy.m_nDays;
  559. ar >> psy.m_itsSold;
  560. ar >> psy.m_itsBought;
  561. // CVOLUME
  562. volume.m_adwMADays.Serialize(ar);
  563. ar >> volume.m_itsDeviateOnBottom;
  564. ar >> volume.m_itsDeviateOnTop;
  565. ar >> volume.m_itsLong;
  566. ar >> volume.m_itsShort;
  567. // CNVI
  568. ar >> nvi.m_nMADays;
  569. ar >> nvi.m_itsGoldenFork;
  570. ar >> nvi.m_itsDeadFork;
  571. // CPVI
  572. ar >> pvi.m_nMADays;
  573. ar >> pvi.m_itsGoldenFork;
  574. ar >> pvi.m_itsDeadFork;
  575. // CVR
  576. ar >> vr.m_nDays;
  577. ar >> vr.m_itsLong;
  578. ar >> vr.m_itsShort;
  579. // CVROC
  580. ar >> vroc.m_nDays;
  581. ar >> vroc.m_nMADays;
  582. ar >> vroc.m_itsDeviateOnBottom;
  583. ar >> vroc.m_itsDeviateOnTop;
  584. // COBV
  585. ar >> obv.m_itsDeviateOnBottom;
  586. ar >> obv.m_itsDeviateOnTop;
  587. // CMOBV
  588. ar >> mobv.m_nDays1;
  589. ar >> mobv.m_nDays2;
  590. ar >> mobv.m_itsGoldenFork;
  591. ar >> mobv.m_itsDeadFork;
  592. // CMFI
  593. ar >> mfi.m_nDays;
  594. ar >> mfi.m_itsLong;
  595. ar >> mfi.m_itsShort;
  596. // CVMACD
  597. ar >> vmacd.m_nEMA1Days;
  598. ar >> vmacd.m_nEMA2Days;
  599. ar >> vmacd.m_nDIFDays;
  600. ar >> vmacd.m_itsDeviateOnBottom;
  601. ar >> vmacd.m_itsDeviateOnTop;
  602. ar >> vmacd.m_itsGoldenFork;
  603. ar >> vmacd.m_itsDeadFork;
  604. // CWVAD
  605. ar >> wvad.m_nDays;
  606. ar >> wvad.m_itsLong;
  607. ar >> wvad.m_itsShort;
  608. // CEMV
  609. ar >> emv.m_nDays;
  610. ar >> emv.m_nMADays;
  611. ar >> emv.m_itsGoldenFork;
  612. ar >> emv.m_itsDeadFork;
  613. // CVRSI
  614. ar >> vrsi.m_nDays;
  615. ar >> vrsi.m_itsDeviateOnBottom;
  616. ar >> vrsi.m_itsDeviateOnTop;
  617. ar >> vrsi.m_itsSold;
  618. ar >> vrsi.m_itsBought;
  619. // CNVRSI
  620. ar >> nvrsi.m_nDays;
  621. ar >> nvrsi.m_itsDeviateOnBottom;
  622. ar >> nvrsi.m_itsDeviateOnTop;
  623. ar >> nvrsi.m_itsSold;
  624. ar >> nvrsi.m_itsBought;
  625. // CAD
  626. ar >> ad.m_nDays;
  627. // CCI
  628. // CKDJ
  629. ar >> kdj.m_nRSVDays;
  630. ar >> kdj.m_nKDays;
  631. ar >> kdj.m_nDDays;
  632. ar >> kdj.m_nJ;
  633. ar >> kdj.m_itsGoldenFork;
  634. ar >> kdj.m_itsDeadFork;
  635. // CR
  636. ar >> r.m_nDays;
  637. // CRSI
  638. rsi.m_adwDays.Serialize(ar);
  639. ar >> rsi.m_itsSold;
  640. ar >> rsi.m_itsGoldenFork;
  641. ar >> rsi.m_itsDeadFork;
  642. // CBIAS
  643. ar >> bias.m_nDays;
  644. ar >> bias.m_itsSold;
  645. ar >> bias.m_itsBought;
  646. // CMTM
  647. ar >> mtm.m_nDays;
  648. ar >> mtm.m_nMADays;
  649. ar >> mtm.m_itsGoldenFork;
  650. ar >> mtm.m_itsDeadFork;
  651. // CDMI
  652. ar >> dmi.m_nDays;
  653. // CROC
  654. ar >> roc.m_nDays;
  655. ar >> roc.m_nMADays;
  656. ar >> roc.m_itsGoldenFork;
  657. ar >> roc.m_itsDeadFork;
  658. // CCCI
  659. ar >> cci.m_nDays;
  660. ar >> cci.m_dQuotiety;
  661. ar >> cci.m_nMADays;
  662. ar >> cci.m_itsGoldenFork;
  663. ar >> cci.m_itsDeadFork;
  664. // CCV
  665. ar >> cv.m_nMAHLDays;
  666. ar >> cv.m_nCVDays;
  667. ar >> cv.m_itsSold;
  668. ar >> cv.m_itsBought;
  669. // CARBR
  670. ar >> arbr.m_nDays;
  671. ar >> arbr.m_itsGoldenFork;
  672. ar >> arbr.m_itsDeadFork;
  673. ar >> arbr.m_itsSold;
  674. ar >> arbr.m_itsBought;
  675. // CCR
  676. ar >> cr.m_nDays;
  677. ar >> cr.m_nMADaysA;
  678. ar >> cr.m_nMADaysB;
  679. ar >> cr.m_nMADaysC;
  680. ar >> cr.m_nMADaysD;
  681. ar >> cr.m_itsSold;
  682. ar >> cr.m_itsBought;
  683. // COSC
  684. ar >> osc.m_nDays;
  685. ar >> osc.m_nMADays;
  686. ar >> osc.m_itsGoldenFork;
  687. ar >> osc.m_itsDeadFork;
  688. // CUOS
  689. ar >> uos.m_nDays1;
  690. ar >> uos.m_nDays2;
  691. ar >> uos.m_nDays3;
  692. ar >> uos.m_nMADays;
  693. ar >> uos.m_itsGoldenFork;
  694. ar >> uos.m_itsDeadFork;
  695. // CMAOSC
  696. ar >> maosc.m_nDays1;
  697. ar >> maosc.m_nDays2;
  698. ar >> maosc.m_nMADays;
  699. ar >> maosc.m_itsGoldenFork;
  700. ar >> maosc.m_itsDeadFork;
  701. // C36BIAS
  702. ar >> bias36.m_itsSold;
  703. ar >> bias36.m_itsBought;
  704. // CDPO
  705. ar >> dpo.m_nDays;
  706. ar >> dpo.m_nMADays;
  707. ar >> dpo.m_itsGoldenFork;
  708. ar >> dpo.m_itsDeadFork;
  709. // CKST
  710. kst.m_adwROCDays.Serialize(ar);
  711. ar >> kst.m_nMADays;
  712. ar >> kst.m_itsGoldenFork;
  713. ar >> kst.m_itsDeadFork;
  714. // CREI
  715. ar >> rei.m_nDays;
  716. ar >> rei.m_itsLong;
  717. ar >> rei.m_itsShort;
  718. // CDMKI
  719. ar >> dmki.m_nDays;
  720. ar >> dmki.m_itsSold;
  721. ar >> dmki.m_itsBought;
  722. // CPCNT
  723. ar >> pcnt.m_nMADays;
  724. ar >> pcnt.m_itsGoldenFork;
  725. ar >> pcnt.m_itsDeadFork;
  726. // CHLC
  727. ar >> hlc.m_nDays;
  728. ar >> hlc.m_nMADays;
  729. ar >> hlc.m_itsGoldenFork;
  730. ar >> hlc.m_itsDeadFork;
  731. // CCDP
  732. // CASI
  733. ar >> asi.m_nDays;
  734. ar >> asi.m_itsDeviateOnBottom;
  735. ar >> asi.m_itsDeviateOnTop;
  736. // CATR
  737. ar >> atr.m_nDays;
  738. ar >> atr.m_itsSold;
  739. ar >> atr.m_itsBought;
  740. // CCYO
  741. cyo.m_adwMTMDays.Serialize(ar);
  742. ar >> cyo.m_nMADays;
  743. ar >> cyo.m_itsGoldenFork;
  744. ar >> cyo.m_itsDeadFork;
  745. // CDCYO
  746. dcyo.m_adwMTMDays.Serialize(ar);
  747. ar >> dcyo.m_nMADays;
  748. ar >> dcyo.m_itsGoldenFork;
  749. ar >> dcyo.m_itsDeadFork;
  750. // CHSL
  751. ar >> hsl.m_nDays;
  752. ar >> hsl.m_nMADays;
  753. ar >> hsl.m_itsGoldenFork;
  754. ar >> hsl.m_itsDeadFork;
  755. // CDPER
  756. ar >> dper.m_nDays;
  757. ar >> dper.m_nMADays;
  758. ar >> dper.m_nDetrendDays;
  759. ar >> dper.m_itsGoldenFork;
  760. ar >> dper.m_itsDeadFork;
  761. DWORD dwTemp;
  762. for(int i=0; i<200; i++)
  763. ar >> dwTemp;
  764. }
  765. }
  766. //////////////////////////////////////////////////////////////////////
  767. // class CColorClass
  768. CColorClass::CColorClass()
  769. {
  770. }
  771. CColorClass::CColorClass(const CColorClass &src)
  772. {
  773. *this = src;
  774. }
  775. CColorClass::~CColorClass()
  776. {
  777. }
  778. CColorClass &CColorClass::operator = (const CColorClass &src)
  779. {
  780. m_strName = src.m_strName;
  781. m_aColorRef.Copy(src.m_aColorRef);
  782. return *this;
  783. }
  784. void CColorClass::Serialize(CSPArchive & ar)
  785. {
  786. if(ar.IsStoring())
  787. {
  788. ar << m_strName;
  789. m_aColorRef.Serialize(ar);
  790. }
  791. else
  792. {
  793. ar >> m_strName;
  794. m_aColorRef.Serialize(ar);
  795. }
  796. }
  797. void CColorClass::SetName(LPCTSTR lpszName)
  798. {
  799. m_strName = lpszName;
  800. }
  801. CSPString CColorClass::GetName()
  802. {
  803. return m_strName;
  804. }
  805. void CColorClass::SetColor(int nColorIndex, COLORREF clrRGB)
  806. {
  807. SP_ASSERT(nColorIndex >= 0 && nColorIndex < m_aColorRef.GetSize());
  808. if(nColorIndex >= 0 && nColorIndex < m_aColorRef.GetSize())
  809. m_aColorRef.SetAt(nColorIndex, clrRGB);
  810. }
  811. COLORREF CColorClass::GetColor(int nColorIndex)
  812. {
  813. if(nColorIndex >= 0 && nColorIndex < m_aColorRef.GetSize())
  814. return m_aColorRef.ElementAt(nColorIndex);
  815. SP_ASSERT(FALSE);
  816. return NDCLR_DEFAULT;
  817. }
  818. void CColorClass::SetColorDefault()
  819. {
  820. // set color
  821. m_aColorRef.SetSize(clrMax + 1);
  822. m_aColorRef[clrReserved1] = NDCLR_DEFAULT;
  823. m_aColorRef[clrReserved2] = NDCLR_DEFAULT;
  824. m_aColorRef[clrReserved3] = NDCLR_DEFAULT;
  825. m_aColorRef[clrReserved4] = NDCLR_DEFAULT;
  826. m_aColorRef[clrReserved5] = NDCLR_DEFAULT;
  827. m_aColorRef[clrReserved6] = NDCLR_DEFAULT;
  828. m_aColorRef[clrReserved7] = NDCLR_DEFAULT;
  829. m_aColorRef[clrReserved8] = NDCLR_DEFAULT;
  830. m_aColorRef[clrReserved9] = NDCLR_DEFAULT;
  831. m_aColorRef[clrReserved10] = NDCLR_DEFAULT;
  832. m_aColorRef[clrReserved11] = NDCLR_DEFAULT;
  833. m_aColorRef[clrReserved12] = NDCLR_DEFAULT;
  834. m_aColorRef[clrDefault] = NDCLR_DEFAULT;
  835. m_aColorRef[clrWorkspBK] = NDCLR_WATERBLUE;
  836. m_aColorRef[clrWorkspText] = NDCLR_WHITE;
  837. m_aColorRef[clrSimuBK] = NDCLR_WATER;
  838. m_aColorRef[clrSimuText] = NDCLR_BLACK;
  839. m_aColorRef[clrSListBK] = NDCLR_BLACK;
  840. m_aColorRef[clrSListSelected] = NDCLR_MINIBLUE;
  841. m_aColorRef[clrBaseBK] = NDCLR_BLACK;
  842. m_aColorRef[clrBaseText] = NDCLR_YELLOW;
  843. m_aColorRef[clrGraphBK] = NDCLR_BLACK;
  844. m_aColorRef[clrBorder] = NDCLR_FLATRED;
  845. #ifdef CLKLAN_ENGLISH_US
  846. m_aColorRef[clrRise] = NDCLR_GREEN;
  847. m_aColorRef[clrFall] = NDCLR_RED;
  848. m_aColorRef[clrFallEntity] = NDCLR_FLATRED;
  849. #else
  850. m_aColorRef[clrRise] = NDCLR_RED;
  851. m_aColorRef[clrFall] = NDCLR_GREEN;
  852. m_aColorRef[clrFallEntity] = NDCLR_FLATBLUE;
  853. #endif
  854. m_aColorRef[clrPlane] = NDCLR_WHITE;
  855. m_aColorRef[clrNewKLine] = NDCLR_MINIYELLOW;
  856. m_aColorRef[clrCW] = NDCLR_GREENBLUE;
  857. m_aColorRef[clrDJ] = NDCLR_DARKGREY;
  858. m_aColorRef[clrTitle] = NDCLR_YELLOW;
  859. m_aColorRef[clrText] = NDCLR_FLATBLUE;
  860. m_aColorRef[clrLine1] = NDCLR_WHITE;
  861. m_aColorRef[clrLine2] = NDCLR_YELLOW;
  862. m_aColorRef[clrLine3] = NDCLR_WATERRED;
  863. m_aColorRef[clrLine4] = NDCLR_BLUE;
  864. m_aColorRef[clrLine5] = NDCLR_GREEN;
  865. m_aColorRef[clrLine6] = NDCLR_MINIYELLOW;
  866. }
  867. void CColorClass::SetColorStandard()
  868. {
  869. m_strName = colorclass_standard;
  870. SetColorDefault();
  871. }
  872. void CColorClass::SetColorByzantinesque()
  873. {
  874. m_strName = colorclass_byzantinesque;
  875. // set color
  876. SetColorDefault();
  877. m_aColorRef[clrDefault] = NDCLR_DEFAULT;
  878. m_aColorRef[clrWorkspBK] = RGB(248,250,241);
  879. m_aColorRef[clrWorkspText] = RGB(0,0,0);
  880. m_aColorRef[clrSimuBK] = RGB(248,250,241);
  881. m_aColorRef[clrSimuText] = RGB(0,0,0);
  882. m_aColorRef[clrSListBK] = RGB(248,250,241);
  883. m_aColorRef[clrSListSelected]= RGB(0,128,192);
  884. m_aColorRef[clrBaseBK] = RGB(248,250,241);
  885. m_aColorRef[clrBaseText] = RGB(0,0,0);
  886. m_aColorRef[clrGraphBK] = RGB(248,250,241);
  887. m_aColorRef[clrBorder] = RGB(0,128,192);
  888. #ifdef CLKLAN_ENGLISH_US
  889. m_aColorRef[clrRise] = RGB(78,133,90);
  890. m_aColorRef[clrFall] = RGB(170,0,98);
  891. m_aColorRef[clrFallEntity] = RGB(170,0,98);
  892. #else
  893. m_aColorRef[clrRise] = RGB(170,0,98);
  894. m_aColorRef[clrFall] = RGB(78,133,90);
  895. m_aColorRef[clrFallEntity] = RGB(78,133,90);
  896. #endif
  897. m_aColorRef[clrPlane] = RGB(0,0,0);
  898. m_aColorRef[clrNewKLine] = RGB(247,223,156);
  899. m_aColorRef[clrCW] = RGB(198,190,181);
  900. m_aColorRef[clrDJ] = RGB(198,195,198);
  901. m_aColorRef[clrTitle] = RGB(15,48,136);
  902. m_aColorRef[clrText] = RGB(0,0,0);
  903. m_aColorRef[clrLine1] = RGB(188,1,188);
  904. m_aColorRef[clrLine2] = RGB(66,152,176);
  905. m_aColorRef[clrLine3] = RGB(0,128,0);
  906. m_aColorRef[clrLine4] = RGB(0,255,0);
  907. m_aColorRef[clrLine5] = RGB(128,0,0);
  908. m_aColorRef[clrLine6] = RGB(0,0,128);
  909. }
  910. void CColorClass::SetColorGothic()
  911. {
  912. m_strName = colorclass_gothic;
  913. // set color
  914. SetColorDefault();
  915. m_aColorRef[clrDefault] = NDCLR_DEFAULT;
  916. m_aColorRef[clrWorkspBK] = RGB(250,250,250);
  917. m_aColorRef[clrWorkspText] = RGB(0,0,0);
  918. m_aColorRef[clrSimuBK] = RGB(250,250,250);
  919. m_aColorRef[clrSimuText] = RGB(0,0,0);
  920. m_aColorRef[clrSListBK] = RGB(250,250,250);
  921. m_aColorRef[clrSListSelected]= RGB(0,128,192);
  922. m_aColorRef[clrBaseBK] = RGB(250,250,250);
  923. m_aColorRef[clrBaseText] = RGB(0,0,0);
  924. m_aColorRef[clrGraphBK] = RGB(250,250,250);
  925. m_aColorRef[clrBorder] = RGB(0,128,192);
  926. #ifdef CLKLAN_ENGLISH_US
  927. m_aColorRef[clrRise] = RGB(72,138,94);
  928. m_aColorRef[clrFall] = RGB(234,2,106);
  929. m_aColorRef[clrFallEntity] = RGB(234,2,106);
  930. #else
  931. m_aColorRef[clrRise] = RGB(234,2,106);
  932. m_aColorRef[clrFall] = RGB(72,138,94);
  933. m_aColorRef[clrFallEntity] = RGB(72,138,94);
  934. #endif
  935. m_aColorRef[clrPlane] = RGB(0,0,0);
  936. m_aColorRef[clrNewKLine] = RGB(247,223,156);
  937. m_aColorRef[clrCW] = RGB(198,190,181);
  938. m_aColorRef[clrDJ] = RGB(198,195,198);
  939. m_aColorRef[clrTitle] = RGB(0,0,0);
  940. m_aColorRef[clrText] = RGB(0,0,0);
  941. m_aColorRef[clrLine1] = RGB(255,128,0);
  942. m_aColorRef[clrLine2] = RGB(62,152,159);
  943. m_aColorRef[clrLine3] = RGB(0,128,0);
  944. m_aColorRef[clrLine4] = RGB(0,255,0);
  945. m_aColorRef[clrLine5] = RGB(128,0,0);
  946. m_aColorRef[clrLine6] = RGB(0,0,128);
  947. }
  948. void CColorClass::SetColorBaroque()
  949. {
  950. m_strName = colorclass_baroque;
  951. // set color
  952. SetColorDefault();
  953. m_aColorRef[clrDefault] = NDCLR_DEFAULT;
  954. m_aColorRef[clrWorkspBK] = RGB(0,83,123);
  955. m_aColorRef[clrWorkspText] = RGB(71,193,252);
  956. m_aColorRef[clrSimuBK] = RGB(0,83,123);
  957. m_aColorRef[clrSimuText] = RGB(71,193,252);
  958. m_aColorRef[clrSListBK] = RGB(0,83,123);
  959. m_aColorRef[clrSListSelected]= RGB(160,193,199);
  960. m_aColorRef[clrBaseBK] = RGB(0,83,123);
  961. m_aColorRef[clrBaseText] = RGB(71,193,252);
  962. m_aColorRef[clrGraphBK] = RGB(0,83,123);
  963. m_aColorRef[clrBorder] = RGB(160,193,199);
  964. #ifdef CLKLAN_ENGLISH_US
  965. m_aColorRef[clrRise] = RGB(0,255,255);
  966. m_aColorRef[clrFall] = RGB(255,157,191);
  967. m_aColorRef[clrFallEntity] = RGB(255,157,191);
  968. #else
  969. m_aColorRef[clrRise] = RGB(255,157,191);
  970. m_aColorRef[clrFall] = RGB(0,255,255);
  971. m_aColorRef[clrFallEntity] = RGB(0,255,255);
  972. #endif
  973. m_aColorRef[clrPlane] = RGB(71,193,252);
  974. m_aColorRef[clrNewKLine] = RGB(247,223,156);
  975. m_aColorRef[clrCW] = RGB(198,190,181);
  976. m_aColorRef[clrDJ] = RGB(198,195,198);
  977. m_aColorRef[clrTitle] = RGB(255,255,0);
  978. m_aColorRef[clrText] = RGB(71,193,252);
  979. m_aColorRef[clrLine1] = RGB(255,215,74);
  980. m_aColorRef[clrLine2] = RGB(255,255,255);
  981. m_aColorRef[clrLine3] = RGB(0,128,0);
  982. m_aColorRef[clrLine4] = RGB(0,255,0);
  983. m_aColorRef[clrLine5] = RGB(0,0,160);
  984. m_aColorRef[clrLine6] = RGB(0,0,128);
  985. }
  986. BOOL CColorClass::IsSysColorClass(LPCTSTR lpszColorClassName)
  987. {
  988. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  989. {
  990. SP_ASSERT(FALSE);
  991. return FALSE;
  992. }
  993. CSPString strName;
  994. strName = colorclass_standard;
  995. if(0 == strName.Compare(lpszColorClassName))
  996. return TRUE;
  997. strName = colorclass_byzantinesque;
  998. if(0 == strName.Compare(lpszColorClassName))
  999. return TRUE;
  1000. strName = colorclass_gothic;
  1001. if(0 == strName.Compare(lpszColorClassName))
  1002. return TRUE;
  1003. strName = colorclass_baroque;
  1004. if(0 == strName.Compare(lpszColorClassName))
  1005. return TRUE;
  1006. return FALSE;
  1007. }
  1008. BOOL CColorClass::IsColorStandard(LPCTSTR lpszColorClassName)
  1009. {
  1010. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1011. {
  1012. SP_ASSERT(FALSE);
  1013. return FALSE;
  1014. }
  1015. CSPString strName;
  1016. strName = colorclass_standard;
  1017. if(0 == strName.Compare(lpszColorClassName))
  1018. return TRUE;
  1019. return FALSE;
  1020. }
  1021. BOOL CColorClass::IsColorByzantinesque(LPCTSTR lpszColorClassName)
  1022. {
  1023. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1024. {
  1025. SP_ASSERT(FALSE);
  1026. return FALSE;
  1027. }
  1028. CSPString strName;
  1029. strName = colorclass_byzantinesque;
  1030. if(0 == strName.Compare(lpszColorClassName))
  1031. return TRUE;
  1032. return FALSE;
  1033. }
  1034. BOOL CColorClass::IsColorGothic(LPCTSTR lpszColorClassName)
  1035. {
  1036. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1037. {
  1038. SP_ASSERT(FALSE);
  1039. return FALSE;
  1040. }
  1041. CSPString strName;
  1042. strName = colorclass_gothic;
  1043. if(0 == strName.Compare(lpszColorClassName))
  1044. return TRUE;
  1045. return FALSE;
  1046. }
  1047. BOOL CColorClass::IsColorBaroque(LPCTSTR lpszColorClassName)
  1048. {
  1049. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1050. {
  1051. SP_ASSERT(FALSE);
  1052. return FALSE;
  1053. }
  1054. CSPString strName;
  1055. strName = colorclass_baroque;
  1056. if(0 == strName.Compare(lpszColorClassName))
  1057. return TRUE;
  1058. return FALSE;
  1059. }
  1060. //////////////////////////////////////////////////////////////////////
  1061. // class CColorClassContainer
  1062. CColorClassContainer::CColorClassContainer()
  1063. {
  1064. CColorClass cls;
  1065. cls.SetColorDefault();
  1066. Add(cls);
  1067. m_nSelectedColorClass = 0;
  1068. }
  1069. CColorClassContainer::CColorClassContainer(CColorClassContainer & src)
  1070. {
  1071. *this = src;
  1072. }
  1073. CColorClassContainer::~CColorClassContainer()
  1074. {
  1075. RemoveAll();
  1076. }
  1077. CColorClassContainer & CColorClassContainer::operator = (CColorClassContainer & src)
  1078. {
  1079. m_nSelectedColorClass = src.m_nSelectedColorClass;
  1080. SetSize(src.GetSize());
  1081. for(int i=0; i<src.GetSize(); i++)
  1082. {
  1083. CColorClass cls = src.ElementAt(i);
  1084. SetAt(i, cls);
  1085. }
  1086. return *this;
  1087. }
  1088. void CColorClassContainer::Serialize(CSPArchive & ar)
  1089. {
  1090. if(ar.IsStoring())
  1091. {
  1092. ar << m_nSelectedColorClass;
  1093. ar << GetSize();
  1094. for(int i=0; i<GetSize(); i++)
  1095. ElementAt(i).Serialize(ar);
  1096. }
  1097. else
  1098. {
  1099. ar >> m_nSelectedColorClass;
  1100. int size;
  1101. ar >> size;
  1102. SetSize(size);
  1103. for(int i=0; i<size; i++)
  1104. {
  1105. CColorClass element;
  1106. element.Serialize(ar);
  1107. SetAt(i, element);
  1108. }
  1109. }
  1110. }
  1111. int CColorClassContainer::AddColorClass(CColorClass & newColorClass)
  1112. {
  1113. if(0 == newColorClass.GetName().GetLength())
  1114. {
  1115. SP_ASSERT(FALSE);
  1116. return -1;
  1117. }
  1118. for(int i=0; i<GetSize(); i++)
  1119. {
  1120. CColorClass & cls = ElementAt(i);
  1121. if(0 == newColorClass.GetName().CompareNoCase(cls.GetName()))
  1122. return -1;
  1123. }
  1124. return Add(newColorClass);
  1125. }
  1126. BOOL CColorClassContainer::RemoveColorClass(LPCTSTR lpszColorClassName)
  1127. {
  1128. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1129. {
  1130. SP_ASSERT(FALSE);
  1131. return FALSE;
  1132. }
  1133. for(int i=0; i<GetSize(); i++)
  1134. {
  1135. CColorClass & cls = ElementAt(i);
  1136. if(0 == cls.GetName().CompareNoCase(lpszColorClassName))
  1137. {
  1138. RemoveAt(i);
  1139. return TRUE;
  1140. }
  1141. }
  1142. return FALSE;
  1143. }
  1144. BOOL CColorClassContainer::SetColorClass(CColorClass & clrcls)
  1145. {
  1146. if(clrcls.GetName().GetLength() <= 0)
  1147. {
  1148. SP_ASSERT(FALSE);
  1149. return FALSE;
  1150. }
  1151. for(int i=0; i<GetSize(); i++)
  1152. {
  1153. CColorClass & cls = ElementAt(i);
  1154. if(0 == cls.GetName().CompareNoCase(clrcls.GetName()))
  1155. {
  1156. cls = clrcls;
  1157. return TRUE;
  1158. }
  1159. }
  1160. return (-1 != AddColorClass(clrcls));
  1161. }
  1162. BOOL CColorClassContainer::GetColorClass(LPCTSTR lpszColorClassName, CColorClass & clrcls)
  1163. {
  1164. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1165. {
  1166. SP_ASSERT(FALSE);
  1167. return FALSE;
  1168. }
  1169. for(int i=0; i<GetSize(); i++)
  1170. {
  1171. CColorClass & cls = ElementAt(i);
  1172. if(0 == cls.GetName().CompareNoCase(lpszColorClassName))
  1173. {
  1174. clrcls = cls;
  1175. return TRUE;
  1176. }
  1177. }
  1178. SP_ASSERT(FALSE);
  1179. return FALSE;
  1180. }
  1181. COLORREF CColorClassContainer::GetColor(int nColorIndex)
  1182. {
  1183. SP_ASSERT(m_nSelectedColorClass >= 0 && m_nSelectedColorClass < GetSize());
  1184. if(m_nSelectedColorClass >= 0 && m_nSelectedColorClass < GetSize())
  1185. return ElementAt(m_nSelectedColorClass).GetColor(nColorIndex);
  1186. if(GetSize() > 0)
  1187. return ElementAt(0).GetColor(nColorIndex);
  1188. SP_ASSERT(FALSE);
  1189. SetContainerDefault();
  1190. if(m_nSelectedColorClass >= 0 && m_nSelectedColorClass < GetSize())
  1191. return ElementAt(m_nSelectedColorClass).GetColor(nColorIndex);
  1192. SP_ASSERT(FALSE);
  1193. return NDCLR_DEFAULT;
  1194. }
  1195. void CColorClassContainer::SetContainerDefault()
  1196. {
  1197. RemoveAll();
  1198. m_nSelectedColorClass = 1;
  1199. CColorClass cls;
  1200. cls.SetColorStandard();
  1201. Add(cls);
  1202. cls.SetColorByzantinesque();
  1203. Add(cls);
  1204. cls.SetColorGothic();
  1205. Add(cls);
  1206. cls.SetColorBaroque();
  1207. Add(cls);
  1208. }
  1209. BOOL CColorClassContainer::SelectColorClass(LPCTSTR lpszColorClassName)
  1210. {
  1211. if(NULL == lpszColorClassName || strlen(lpszColorClassName) <= 0)
  1212. {
  1213. SP_ASSERT(FALSE);
  1214. return FALSE;
  1215. }
  1216. for(int i=0; i<GetSize(); i++)
  1217. {
  1218. CColorClass & cls = ElementAt(i);
  1219. if(0 == cls.GetName().CompareNoCase(lpszColorClassName))
  1220. {
  1221. m_nSelectedColorClass = i;
  1222. return TRUE;
  1223. }
  1224. }
  1225. SP_ASSERT(FALSE);
  1226. return FALSE;
  1227. }
  1228. int CColorClassContainer::GetSelected()
  1229. {
  1230. return m_nSelectedColorClass;
  1231. }
  1232. //////////////////////////////////////////////////////////////////////
  1233. // CStProfile
  1234. //////////////////////////////////////////////////////////////////////
  1235. // Construction/Destruction
  1236. //////////////////////////////////////////////////////////////////////
  1237. CStProfile::CStProfile()
  1238. {
  1239. m_nAccessType = 0; // INTERNET_OPEN_TYPE_PRECONFIG
  1240. m_nProxyType = 3; // CProxySocket::TypeHTTP
  1241. m_nProxyPort = 80; // INTERNET_DEFAULT_HTTP_PORT
  1242. m_bCurStockFromSList = FALSE;
  1243. m_nAutoResumeDRLimit = 11;
  1244. m_nDiffDays = -1;
  1245. m_nDiffPercentDays = -1;
  1246. m_nScopeDays = -1;
  1247. m_nRatioChangeHandDays = -1;
  1248. m_nRatioVolumeDays = -1;
  1249. m_nRSDays = -1;
  1250. m_nYieldAverageDays = -1;
  1251. m_nInfoCurrentServer = 0;
  1252. m_nGraphKFormat = CKData::formatOriginal;
  1253. m_nGraphMaindataType = CKData::mdtypeClose;
  1254. m_dwAutoResumeDRBegin = STKLIB_AUTORESUMEDR_DATEBEGIN;
  1255. m_nAutoResumeDRLimit = STKLIB_AUTORESUMEDR_LIMIT;
  1256. m_bAutoSaveKDataMin = TRUE;
  1257. m_bNotifyIcon = FALSE;
  1258. m_nCacheDays = STKLIB_DAYS_CACHE;
  1259. m_nLocalDataVersion = 20050630;
  1260. // SListView Font And BaseView Font
  1261. memset(&m_lfSListView, 0, sizeof(m_lfSListView));
  1262. memset(&m_lfBaseView, 0, sizeof(m_lfBaseView));
  1263. }
  1264. CStProfile::~CStProfile()
  1265. {
  1266. }
  1267. void CStProfile::StoreProfile()
  1268. {
  1269. Store(GetWorkDirectory() + "profile.set");
  1270. }
  1271. void CStProfile::LoadProfile()
  1272. {
  1273. // Color
  1274. m_ColorClassContainer.SetContainerDefault();
  1275. Load(GetWorkDirectory() + "profile.set");
  1276. }
  1277. #define SF_MAX_PROFILE_LENGTH 0x00080000 
  1278. char szProfileMagic[] = "MGCDPF";
  1279. DWORD dwProfileVersion = 0x20050630;
  1280. BOOL CStProfile::Load(LPCTSTR lpszFileName)
  1281. {
  1282. if(NULL == lpszFileName || strlen(lpszFileName) <= 0)
  1283. return FALSE;
  1284. CSPFile file;
  1285. if(file.Open(lpszFileName, CSPFile::modeRead))
  1286. {
  1287. DWORD dwLen = file.GetLength();
  1288. if(0 == dwLen || dwLen > SF_MAX_PROFILE_LENGTH)
  1289. {
  1290. file.Close();
  1291. return FALSE;
  1292. }
  1293. CSPArchive ar(&file, CSPArchive::load);
  1294. FileSerialize(ar);
  1295. ar.Close();
  1296. file.Close();
  1297. return TRUE;
  1298. }
  1299. return FALSE;
  1300. }
  1301. BOOL CStProfile::Store(LPCTSTR lpszFileName)
  1302. {
  1303. if(NULL == lpszFileName || strlen(lpszFileName) <= 0)
  1304. return FALSE;
  1305. CSPFile file;
  1306. if(file.Open(lpszFileName, CSPFile::modeCreate | CSPFile::modeWrite))
  1307. {
  1308. CSPArchive ar(&file, CSPArchive::store);
  1309. FileSerialize(ar);
  1310. ar.Close();
  1311. file.Close();
  1312. return TRUE;
  1313. }
  1314. return FALSE;
  1315. }
  1316. void CStProfile::FileSerialize(CSPArchive &ar)
  1317. {
  1318. if(ar.IsStoring())
  1319. {
  1320. ar.WriteString(szProfileMagic);
  1321. ar << dwProfileVersion;
  1322. ar << m_strDefaultServer;
  1323. m_astrDownloadServers.Serialize(ar);
  1324. ar << m_nAccessType;
  1325. ar << m_strProxyAddress;
  1326. ar << m_nProxyPort;
  1327. // Window Placement
  1328. ar << m_strWindowPlacement;
  1329. // Data path
  1330. ar << m_strQianlongPath;
  1331. // Color
  1332. m_ColorClassContainer.Serialize(ar);
  1333. // Last Opened Strategies
  1334. m_astrLastOpenedStrategy.Serialize(ar);
  1335. ar << m_strLastActiveStrategy;
  1336. // Net Info
  1337. ar << m_bNetInfoShow;
  1338. ar << m_strNetInfo;
  1339. ar << m_strNetInfourl;
  1340. ar << m_strLatestver;
  1341. // AutoResumeDRLimit
  1342. ar << m_nAutoResumeDRLimit;
  1343. // SList columns
  1344. m_anSListColumnsShow.Serialize(ar);
  1345. m_anSListColumnsOrder.Serialize(ar);
  1346. m_aSListColumnsUser.FileSerialize(ar);
  1347. ar << m_nDiffDays;
  1348. ar << m_nDiffPercentDays;
  1349. ar << m_nScopeDays;
  1350. ar << m_nRatioChangeHandDays;
  1351. ar << m_nRatioVolumeDays;
  1352. ar << m_nRSDays;
  1353. ar << m_nYieldAverageDays;
  1354. // Info View
  1355. ar << m_nInfoCurrentServer;
  1356. // Graph Techs
  1357. m_anGraphTechsShow.Serialize(ar);
  1358. m_anGraphTechsKLine.Serialize(ar);
  1359. m_anGraphTechsAll.Serialize(ar);
  1360. ar << m_nGraphKFormat;
  1361. ar << m_nGraphMaindataType;
  1362. ar << m_dwAutoResumeDRBegin;
  1363. ar.Write(&m_lfSListView, sizeof(m_lfSListView));
  1364. ar.Write(&m_lfBaseView, sizeof(m_lfBaseView));
  1365. m_techparameters.Serialize(ar);
  1366. m_aHTMLURLToExplorer.Serialize(ar);
  1367. m_astrProvider.Serialize(ar);
  1368. m_astrDriver.Serialize(ar);
  1369. ar << m_strTrader;
  1370. ar << m_bAutoSaveKDataMin;
  1371. ar << m_nProxyType;
  1372. ar << m_strProxyUser;
  1373. ar << m_strProxyPasswd;
  1374. ar << m_bNotifyIcon;
  1375. ar << m_nCacheDays;
  1376. m_aAlarmCond.Serialize(ar);
  1377. ar << m_nLocalDataVersion;
  1378. }
  1379. else
  1380. {
  1381. TCHAR buffer[64];
  1382. memset(buffer, 0, sizeof(buffer));
  1383. ar.ReadString(buffer, strlen(szProfileMagic));
  1384. if(0 != strncmp(szProfileMagic, buffer, strlen(szProfileMagic)))
  1385. return;
  1386. ar >> m_dwFileVersion;
  1387. if(m_dwFileVersion > dwProfileVersion)
  1388. return;
  1389. ar >> m_strDefaultServer;
  1390. m_astrDownloadServers.Serialize(ar);
  1391. ar >> m_nAccessType;
  1392. ar >> m_strProxyAddress;
  1393. ar >> m_nProxyPort;
  1394. // Window Placement
  1395. ar >> m_strWindowPlacement;
  1396. // Data path
  1397. ar >> m_strQianlongPath;
  1398. // Color
  1399. m_ColorClassContainer.Serialize(ar);
  1400. // Last Opened Strategies
  1401. m_astrLastOpenedStrategy.Serialize(ar);
  1402. ar >> m_strLastActiveStrategy;
  1403. // Net Info
  1404. ar >> m_bNetInfoShow;
  1405. ar >> m_strNetInfo;
  1406. ar >> m_strNetInfourl;
  1407. ar >> m_strLatestver;
  1408. // AutoResumeDRLimit
  1409. ar >> m_nAutoResumeDRLimit;
  1410. // SList Columns
  1411. m_anSListColumnsShow.Serialize(ar);
  1412. m_anSListColumnsOrder.Serialize(ar);
  1413. m_aSListColumnsUser.FileSerialize(ar);
  1414. ar >> m_nDiffDays;
  1415. ar >> m_nDiffPercentDays;
  1416. ar >> m_nScopeDays;
  1417. ar >> m_nRatioChangeHandDays;
  1418. ar >> m_nRatioVolumeDays;
  1419. ar >> m_nRSDays;
  1420. ar >> m_nYieldAverageDays;
  1421. // Info View
  1422. ar >> m_nInfoCurrentServer;
  1423. // Graph Techs
  1424. m_anGraphTechsShow.Serialize(ar);
  1425. m_anGraphTechsKLine.Serialize(ar);
  1426. m_anGraphTechsAll.Serialize(ar);
  1427. ar >> m_nGraphKFormat;
  1428. ar >> m_nGraphMaindataType;
  1429. ar >> m_dwAutoResumeDRBegin;
  1430. // SListView Font And BaseView Font
  1431. ar.Read(&m_lfSListView, sizeof(m_lfSListView));
  1432. ar.Read(&m_lfBaseView, sizeof(m_lfBaseView));
  1433. m_techparameters.Serialize(ar);
  1434. if(m_dwFileVersion >= 0x20030828)
  1435. m_aHTMLURLToExplorer.Serialize(ar);
  1436. if(m_dwFileVersion >= 0x20030910)
  1437. {
  1438. m_astrProvider.Serialize(ar);
  1439. m_astrDriver.Serialize(ar);
  1440. }
  1441. if(m_dwFileVersion >= 0x20040710)
  1442. {
  1443. ar >> m_strTrader;
  1444. ar >> m_bAutoSaveKDataMin;
  1445. }
  1446. if(m_dwFileVersion >= 0x20040717)
  1447. {
  1448. ar >> m_nProxyType;
  1449. ar >> m_strProxyUser;
  1450. ar >> m_strProxyPasswd;
  1451. }
  1452. if(m_dwFileVersion >= 0x20040803)
  1453. {
  1454. ar >> m_bNotifyIcon;
  1455. ar >> m_nCacheDays;
  1456. m_nCacheDays = STKLIB_DAYS_CACHE;
  1457. }
  1458. if(m_dwFileVersion >= 0x20040903)
  1459. {
  1460. m_aAlarmCond.Serialize(ar);
  1461. }
  1462. if(m_dwFileVersion >= 0x20050630)
  1463. {
  1464. ar >> m_nLocalDataVersion;
  1465. }
  1466. }
  1467. }
  1468. CSPString CStProfile::GetMainServerDomain()
  1469. {
  1470. CSPString strResult;
  1471. #ifdef CLKVER_OEM
  1472. strResult = OEM_SERVER_DOMAIN;
  1473. if (0 == strResult.Find("www."))
  1474. strResult = strResult.Mid(4);
  1475. #else
  1476. char szMainServerDomainFmt[] = "%sin%su%sls%sco%s";
  1477. //  n inebul ls. com
  1478. //  ^   ^^ ^   ^   ^
  1479. strResult.Format(szMainServerDomainFmt, "n", "eb", "l", ".", "m"); 
  1480. #endif
  1481. return strResult;
  1482. }
  1483. CSPString CStProfile::GetHTTPServerDomain()
  1484. {
  1485. CSPString strResult;
  1486. //#ifdef CLKVER_OEM
  1487. // strResult = OEM_SERVER_DOMAIN;
  1488. //#else
  1489. // strResult.Format("www.%s", (LPCTSTR)GetMainServerDomain());
  1490. //#endif
  1491. strResult.Format("218.67.244.158");
  1492. return strResult;
  1493. }
  1494. WORD CStProfile::GetHTTPServerPort()
  1495. {
  1496. return 80;
  1497. }
  1498. CSPString CStProfile::GetMainServer()
  1499. {
  1500. CSPString strInfo;
  1501. strInfo = sz_mainserverinfo;
  1502. CSPString strResult;
  1503. strResult.Format("%s:%d:%s", (LPCTSTR)GetHTTPServerDomain(), GetHTTPServerPort(), (LPCTSTR)strInfo);
  1504. return strResult;
  1505. }
  1506. CSPString CStProfile::GetProductURL()
  1507. {
  1508. CSPString strResult;
  1509. strResult.Format("http://%s/product/clking/", (LPCTSTR)GetHTTPServerDomain());
  1510. return strResult;
  1511. }
  1512. CSPString CStProfile::GetDownloadURL()
  1513. {
  1514. CSPString strResult;
  1515. strResult.Format("http://%s/download/clking/", (LPCTSTR)GetHTTPServerDomain());
  1516. return strResult;
  1517. }
  1518. CSPString CStProfile::GetAgentRootURL()
  1519. {
  1520. CSPString strResult;
  1521. strResult.Format("http://%s:%d/agent/", (LPCTSTR)GetHTTPServerDomain(), GetHTTPServerPort());
  1522. return strResult;
  1523. }
  1524. CSPString CStProfile::GetSupportMailto()
  1525. {
  1526. CSPString strResult;
  1527. #ifdef CLKVER_OEM
  1528. strResult = "mailto:";
  1529. strResult += OEM_SUPPORT_MAILTO;
  1530. strResult += "?subject=";
  1531. #else
  1532. strResult.Format("www.%s", (LPCTSTR)GetMainServerDomain());
  1533. char szSupportMailtoFmt[] = "ma%sto%ssu%sor%s@%s?subject="; // ?subject=support&body=hello
  1534. strResult.Format(szSupportMailtoFmt, "il", ":", "pp", "t", (LPCTSTR)GetMainServerDomain());
  1535. #endif
  1536. strResult += sz_mailsubjectsupport;
  1537. return strResult;
  1538. }
  1539. CSPString CStProfile::GetUpgradeURL()
  1540. {
  1541. CSPString strResult;
  1542. #ifdef CLKLAN_ENGLISH_US
  1543. strResult.Format("http://%s:%d/enu/download/ninebulls/upgrade3.exe", (LPCTSTR)GetHTTPServerDomain(), GetHTTPServerPort());
  1544. #elif defined CLKVER_OEM
  1545. strResult.Format("http://%s:%d/download/stockana/upgrade3.exe", (LPCTSTR)GetHTTPServerDomain(), GetHTTPServerPort());
  1546. #else
  1547. strResult.Format("http://%s/download/clking/clking.exe", (LPCTSTR)GetHTTPServerDomain());
  1548. #endif
  1549. return strResult;
  1550. }
  1551. CSPString CStProfile::GetEvaluateEmail()
  1552. {
  1553. CSPString strResult;
  1554. strResult.Format("evaluate@%s", (LPCTSTR)GetMainServerDomain());
  1555. return strResult;
  1556. }
  1557. CSPString CStProfile::GetEvaluateSMTPServer()
  1558. {
  1559. CSPString strResult;
  1560. strResult.Format("mail.%s", (LPCTSTR)GetMainServerDomain());
  1561. return strResult;
  1562. }
  1563. CSPString CStProfile::GetEvaluateSMTPUser()
  1564. {
  1565. CSPString strResult;
  1566. strResult.Format("evasend@%s", (LPCTSTR)GetMainServerDomain());
  1567. return strResult;
  1568. }
  1569. CSPString CStProfile::GetEvaluateSMTPPasswd()
  1570. {
  1571. return "evasend";
  1572. }
  1573. CSPString CStProfile::GetDefaultServer()
  1574. {
  1575. if(m_strDefaultServer.IsEmpty())
  1576. return GetMainServer();
  1577. return m_strDefaultServer;
  1578. }
  1579. void CStProfile::SetDefaultServer(LPCTSTR lpszDefaultServer)
  1580. {
  1581. m_strDefaultServer = lpszDefaultServer;
  1582. }
  1583. CSPStringArray & CStProfile::GetDownloadServers()
  1584. {
  1585. return m_astrDownloadServers;
  1586. }
  1587. void CStProfile::SetDownloadServers(CSPStringArray & astrAllServers)
  1588. {
  1589. m_astrDownloadServers.RemoveAll();
  1590. m_astrDownloadServers.Copy(astrAllServers);
  1591. }
  1592. /*
  1593.  * not use now, use CQSProfile's proxy settings
  1594.  *
  1595. char szQuoteServerProfileName[] = "QuoteServer.ini";
  1596. char szProfile_Proxy[] = "Proxy";
  1597. char szProfile_AccessType[] = "AccessType";
  1598. char szProfile_ProxyType[] = "ProxyType";
  1599. char szProfile_ProxyAddress[] = "ProxyAddress";
  1600. char szProfile_ProxyPort[] = "ProxyPort";
  1601. char szProfile_ProxyUser[] = "ProxyUser";
  1602. char szProfile_ProxyPasswd[] = "ProxyPasswd";
  1603. int CStProfile::GetAccessType()
  1604. {
  1605. //if(INTERNET_OPEN_TYPE_DIRECT != m_nAccessType
  1606. // && INTERNET_OPEN_TYPE_PRECONFIG != m_nAccessType
  1607. // && INTERNET_OPEN_TYPE_PROXY != m_nAccessType)
  1608. // return INTERNET_OPEN_TYPE_DIRECT;
  1609. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1610. m_nAccessType = ::GetPrivateProfileInt(szProfile_Proxy, szProfile_AccessType, 0, sFileName);
  1611. return m_nAccessType;
  1612. }
  1613. void CStProfile::SetAccessType(int nAccessType)
  1614. {
  1615. m_nAccessType = nAccessType;
  1616. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1617. CSPString sTemp;
  1618. sTemp.Format("%d", m_nAccessType);
  1619. ::WritePrivateProfileString(szProfile_Proxy, szProfile_AccessType, sTemp, sFileName);
  1620. }
  1621. int CStProfile::GetProxyType()
  1622. {
  1623. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1624. m_nProxyType = ::GetPrivateProfileInt(szProfile_Proxy, szProfile_ProxyType, 3, sFileName);
  1625. return m_nProxyType;
  1626. }
  1627. void CStProfile::SetProxyType(int nProxyType)
  1628. {
  1629. m_nProxyType = nProxyType;
  1630. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1631. CSPString sTemp;
  1632. sTemp.Format("%d", m_nProxyType);
  1633. ::WritePrivateProfileString(szProfile_Proxy, szProfile_ProxyType, sTemp, sFileName);
  1634. }
  1635. CSPString CStProfile::GetProxyAddress()
  1636. {
  1637. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1638. char szAddress[1024];
  1639. memset(szAddress, 0, sizeof(szAddress));
  1640. ::GetPrivateProfileString(szProfile_Proxy, szProfile_ProxyAddress, "", szAddress, sizeof(szAddress)-2, sFileName);
  1641. m_strProxyAddress = szAddress;
  1642. return m_strProxyAddress;
  1643. }
  1644. void CStProfile::SetProxyAddress(LPCTSTR lpszProxyAddress)
  1645. {
  1646. m_strProxyAddress = lpszProxyAddress;
  1647. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1648. ::WritePrivateProfileString(szProfile_Proxy, szProfile_ProxyAddress, m_strProxyAddress, sFileName);
  1649. }
  1650. WORD CStProfile::GetProxyPort()
  1651. {
  1652. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1653. m_nProxyPort = ::GetPrivateProfileInt(szProfile_Proxy, szProfile_ProxyPort, 80, sFileName);
  1654. return m_nProxyPort;
  1655. }
  1656. void CStProfile::SetProxyPort(WORD nPort)
  1657. {
  1658. m_nProxyPort = nPort;
  1659. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1660. CSPString sTemp;
  1661. sTemp.Format("%d", m_nProxyPort);
  1662. ::WritePrivateProfileString(szProfile_Proxy, szProfile_ProxyPort, sTemp, sFileName);
  1663. }
  1664. CSPString CStProfile::GetProxyUser()
  1665. {
  1666. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1667. char szUser[1024];
  1668. memset(szUser, 0, sizeof(szUser));
  1669. ::GetPrivateProfileString(szProfile_Proxy, szProfile_ProxyUser, "", szUser, sizeof(szUser)-2, sFileName);
  1670. m_strProxyUser = szUser;
  1671. return m_strProxyUser;
  1672. }
  1673. void CStProfile::SetProxyUser(LPCTSTR lpszProxyUser)
  1674. {
  1675. m_strProxyUser = lpszProxyUser;
  1676. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1677. ::WritePrivateProfileString(szProfile_Proxy, szProfile_ProxyUser, m_strProxyUser, sFileName);
  1678. }
  1679. CSPString CStProfile::GetProxyPasswd()
  1680. {
  1681. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1682. char szPasswd[1024];
  1683. memset(szPasswd, 0, sizeof(szPasswd));
  1684. ::GetPrivateProfileString(szProfile_Proxy, szProfile_ProxyPasswd, "", szPasswd, sizeof(szPasswd)-2, sFileName);
  1685. m_strProxyPasswd = szPasswd;
  1686. return m_strProxyPasswd;
  1687. }
  1688. void CStProfile::SetProxyPasswd(LPCTSTR lpszProxyPasswd)
  1689. {
  1690. m_strProxyPasswd = lpszProxyPasswd;
  1691. CSPString sFileName = GetWorkDirectory() + szQuoteServerProfileName;
  1692. ::WritePrivateProfileString(szProfile_Proxy, szProfile_ProxyPasswd, m_strProxyPasswd, sFileName);
  1693. }
  1694. */
  1695. static char szFormat[] = "%u,%u,%d,%d,%d,%d,%d,%d,%d,%d";
  1696. BOOL CStProfile::GetWindowPlacement(LPWINDOWPLACEMENT pwp)
  1697. {
  1698. if(m_strWindowPlacement.IsEmpty())
  1699. return FALSE;
  1700. WINDOWPLACEMENT wp;
  1701. int nRead = sscanf(m_strWindowPlacement, szFormat,
  1702. &wp.flags, &wp.showCmd,
  1703. &wp.ptMinPosition.x, &wp.ptMinPosition.y,
  1704. &wp.ptMaxPosition.x, &wp.ptMaxPosition.y,
  1705. &wp.rcNormalPosition.left, &wp.rcNormalPosition.top,
  1706. &wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);
  1707. if (nRead != 10)
  1708. return FALSE;
  1709. int cxScreen = GetSystemMetrics(SM_CXSCREEN);
  1710. int cyScreen = GetSystemMetrics(SM_CYSCREEN);
  1711. if(wp.rcNormalPosition.top < -5
  1712. || wp.rcNormalPosition.left < -cxScreen/2
  1713. || wp.rcNormalPosition.right < 5
  1714. || wp.rcNormalPosition.right - wp.rcNormalPosition.left < 1
  1715. || wp.rcNormalPosition.bottom - wp.rcNormalPosition.top < 1)
  1716. return FALSE;
  1717.  
  1718. wp.length = sizeof wp;
  1719. *pwp = wp;
  1720. return TRUE;
  1721. }
  1722. void CStProfile::SetWindowPlacement(LPWINDOWPLACEMENT pwp)
  1723. {
  1724. TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];
  1725. sprintf(szBuffer, szFormat,
  1726. pwp->flags, pwp->showCmd,
  1727. pwp->ptMinPosition.x, pwp->ptMinPosition.y,
  1728. pwp->ptMaxPosition.x, pwp->ptMaxPosition.y,
  1729. pwp->rcNormalPosition.left, pwp->rcNormalPosition.top,
  1730. pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom);
  1731. m_strWindowPlacement = szBuffer;
  1732. }
  1733. CSPString CStProfile::GetWorkDirectory()
  1734. {
  1735. if(m_strWorkDirectory.IsEmpty())
  1736. {
  1737. TCHAR szLongPathName[_MAX_PATH];
  1738. ::GetModuleFileName(AfxGetModuleHandle(), szLongPathName, _MAX_PATH);
  1739. m_strWorkDirectory = AfxGetFileDirectory(szLongPathName, "");
  1740. }
  1741. return m_strWorkDirectory;
  1742. }
  1743. CSPString CStProfile::GetVersion()
  1744. {
  1745. return "3.10";
  1746. }
  1747. CSPString CStProfile::GetSViewFile()
  1748. {
  1749. return GetWorkDirectory() + "profile.dat";
  1750. }
  1751. CSPString CStProfile::GetDomainFile()
  1752. {
  1753. #ifdef CLKLAN_ENGLISH_US
  1754. return GetWorkDirectory() + "data\domainEnu.dat";
  1755. #else
  1756. return GetWorkDirectory() + "data\domain.dat";
  1757. #endif
  1758. }
  1759. CSPString CStProfile::GetGroupFile()
  1760. {
  1761. #ifdef CLKLAN_ENGLISH_US
  1762. return GetWorkDirectory() + "groupEnu.dat";
  1763. #else
  1764. return GetWorkDirectory() + "group.dat";
  1765. #endif
  1766. }
  1767. CSPString CStProfile::GetProjectPath()
  1768. {
  1769. CSPString strPath = GetWorkDirectory() + "projects" + STRING_DIRSEP;
  1770. if(0 != access(strPath, 0) || FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes(strPath))
  1771. {
  1772. if(!CreateDirectory(strPath, NULL))
  1773. strPath.Empty();
  1774. }
  1775. return strPath;
  1776. }
  1777. CSPString CStProfile::GetExportPath()
  1778. {
  1779. CSPString strPath = GetWorkDirectory() + "export" + STRING_DIRSEP;
  1780. if(0 != access(strPath, 0) || FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes(strPath))
  1781. {
  1782. if(!CreateDirectory(strPath, NULL))
  1783. strPath.Empty();
  1784. }
  1785. return strPath;
  1786. }
  1787. CSPString CStProfile::GetYongxinPath()
  1788. {
  1789. CSPString strPath = GetWorkDirectory() + "yongxin" + STRING_DIRSEP;
  1790. if(0 != access(strPath, 0) || FILE_ATTRIBUTE_DIRECTORY != GetFileAttributes(strPath))
  1791. {
  1792. if(!CreateDirectory(strPath, NULL))
  1793. strPath.Empty();
  1794. }
  1795. return strPath;
  1796. }
  1797. CSPString CStProfile::GetSelfDBPath()
  1798. {
  1799. return GetWorkDirectory();
  1800. }
  1801. CSPString CStProfile::GetSelfDBNewsPath(DWORD dwMarket)
  1802. {
  1803. return CSelfDB::GetNewsPath(dwMarket);
  1804. }
  1805. CSPString CStProfile::GetSelfDBBasePath(DWORD dwMarket)
  1806. {
  1807. return CSelfDB::GetBasePath(dwMarket);
  1808. }
  1809. CSPString CStProfile::GetQianlongPath()
  1810. {
  1811. if(0 == access(m_strQianlongPath,0))
  1812. return m_strQianlongPath;
  1813. return "";
  1814. }
  1815. void CStProfile::SetQianlongPath(LPCTSTR lpszPath)
  1816. {
  1817. m_strQianlongPath = lpszPath;
  1818. SP_ASSERT(0 == access(m_strQianlongPath,0));
  1819. }
  1820. COLORREF CStProfile::GetColor(int nColorIndex)
  1821. {
  1822. return m_ColorClassContainer.GetColor(nColorIndex);
  1823. }
  1824. CColorClassContainer & CStProfile::GetColorClassContainer()
  1825. {
  1826. return m_ColorClassContainer;
  1827. }
  1828. CSPStringArray & CStProfile::GetLastOpenedStrategy()
  1829. {
  1830. return m_astrLastOpenedStrategy;
  1831. }
  1832. void CStProfile::SetLastOpenedStrategy(CSPStringArray & astr)
  1833. {
  1834. m_astrLastOpenedStrategy.Copy(astr);
  1835. }
  1836. CSPString CStProfile::GetLastActiveStrategy()
  1837. {
  1838. return m_strLastActiveStrategy;
  1839. }
  1840. void CStProfile::SetLastActiveStrategy(LPCTSTR lpszPath)
  1841. {
  1842. m_strLastActiveStrategy = lpszPath;
  1843. }
  1844. void CStProfile::SetNetInfoShowLater(BOOL bShowLater)
  1845. {
  1846. m_bNetInfoShow = bShowLater;
  1847. }
  1848. void CStProfile::SetNetInfo(LPCTSTR lpszInfo, LPCTSTR lpszInfourl)
  1849. {
  1850. if(0 == m_strNetInfo.Compare(lpszInfo)
  1851. && 0 == m_strNetInfourl.Compare(lpszInfourl))
  1852. return;
  1853. m_strNetInfo = lpszInfo;
  1854. m_strNetInfourl = lpszInfourl;
  1855. m_bNetInfoShow = TRUE;
  1856. }
  1857. void CStProfile::GetNetInfo(CSPString &strInfo, CSPString &strInfourl, int * pbShow)
  1858. {
  1859. strInfo = m_strNetInfo;
  1860. strInfourl = m_strNetInfourl;
  1861. if(pbShow)
  1862. *pbShow = m_bNetInfoShow;
  1863. }
  1864. void CStProfile::SetLatestver(LPCTSTR lpszLatestver)
  1865. {
  1866. m_strLatestver = lpszLatestver;
  1867. }
  1868. BOOL CStProfile::HasNewVersion()
  1869. {
  1870. #ifdef CLKVER_OEM
  1871. CSPString strServerDomain = AfxGetProfile().GetMainServerDomain();
  1872. if(0 == strServerDomain.CompareNoCase("www.balang.net")
  1873. || 0 == strServerDomain.CompareNoCase("balang.net")
  1874. || 0 == strServerDomain.CompareNoCase("www.zlinker.com")
  1875. || 0 == strServerDomain.CompareNoCase("zlinker.com")
  1876. || 0 == strServerDomain.CompareNoCase("www.ninebulls.com")
  1877. || 0 == strServerDomain.CompareNoCase("ninebulls.com"))
  1878. {
  1879. return FALSE;
  1880. }
  1881. #endif
  1882. if(!m_strLatestver.IsEmpty())
  1883. {
  1884. CSPString strMyVersion = GetVersion();
  1885. double dLatestVer = atof(m_strLatestver);
  1886. double dMyVer = atof(strMyVersion);
  1887. if(dLatestVer - dMyVer > 1e-4)
  1888. return TRUE;
  1889. }
  1890. return FALSE;
  1891. }
  1892. int CStProfile::GetAutoResumeDRLimit()
  1893. {
  1894. if(0 == m_nAutoResumeDRLimit || -1 == m_nAutoResumeDRLimit)
  1895. m_nAutoResumeDRLimit = 11;
  1896. return m_nAutoResumeDRLimit;
  1897. }
  1898. void CStProfile::SetAutoResumeDRLimit(int nAutoResumeDRLimit)
  1899. {
  1900. m_nAutoResumeDRLimit = nAutoResumeDRLimit;
  1901. }
  1902. void CStProfile::SetSListColumnsDefault()
  1903. {
  1904. // All Order
  1905. m_anSListColumnsOrder.RemoveAll();
  1906. #ifdef CLKLAN_ENGLISH_US
  1907. for(UINT i=SLH_MIN; i<=SLH_MAX; i++)
  1908. {
  1909. m_anSListColumnsOrder.Add(i);
  1910. }
  1911. #else
  1912. m_anSListColumnsOrder.Add(SLH_NAME);
  1913. m_anSListColumnsOrder.Add(SLH_CODE);
  1914. for(UINT i=SLH_MIN; i<=SLH_MAX; i++)
  1915. {
  1916. if(SLH_NAME != i && SLH_CODE != i)
  1917. m_anSListColumnsOrder.Add(i);
  1918. }
  1919. #endif
  1920. for(int k=0; k<m_aSListColumnsUser.GetSize(); k++)
  1921. {
  1922. m_anSListColumnsOrder.Add(m_aSListColumnsUser.ElementAt(k).m_nID);
  1923. }
  1924. // Show
  1925. m_anSListColumnsShow.RemoveAll();
  1926. m_anSListColumnsShow.Copy(m_anSListColumnsOrder);
  1927. }
  1928. CSPDWordArray & CStProfile::GetSListColumnsShow()
  1929. {
  1930. if(m_anSListColumnsShow.GetSize() == 0)
  1931. SetSListColumnsDefault();
  1932. // Remove some dulplicate
  1933. for(int i=m_anSListColumnsShow.GetSize()-1; i>=0; i--)
  1934. {
  1935. for(int k=0; k<i; k++)
  1936. {
  1937. if(m_anSListColumnsShow[i] == m_anSListColumnsShow[k])
  1938. {
  1939. m_anSListColumnsShow.RemoveAt(i);
  1940. SP_ASSERT(FALSE);
  1941. break;
  1942. }
  1943. }
  1944. }
  1945. return m_anSListColumnsShow;
  1946. }
  1947. CSPDWordArray & CStProfile::GetSListColumnsOrder()
  1948. {
  1949. int nRealCount = SLH_MAX-SLH_MIN+1 + m_aSListColumnsUser.GetSize();
  1950. if(m_anSListColumnsOrder.GetSize() != nRealCount)
  1951. SetSListColumnsDefault();
  1952. // Remove some dulplicate
  1953. for(int i=m_anSListColumnsOrder.GetSize()-1; i>=0; i--)
  1954. {
  1955. for(int k=0; k<i; k++)
  1956. {
  1957. if(m_anSListColumnsOrder[i] == m_anSListColumnsOrder[k])
  1958. {
  1959. m_anSListColumnsOrder.RemoveAt(i);
  1960. SP_ASSERT(FALSE);
  1961. break;
  1962. }
  1963. }
  1964. }
  1965. return m_anSListColumnsOrder;
  1966. }
  1967. CIndexContainer &CStProfile::GetSListColumnsUser()
  1968. {
  1969. return m_aSListColumnsUser;
  1970. }
  1971. void CStProfile::SetDiffDays(int nDays)
  1972. {
  1973. m_nDiffDays = nDays;
  1974. }
  1975. int CStProfile::GetDiffDays()
  1976. {
  1977. if(m_nDiffDays <= 0)
  1978. return 1;
  1979. return m_nDiffDays;
  1980. }
  1981. void CStProfile::SetDiffPercentDays(int nDays)
  1982. {
  1983. m_nDiffPercentDays = nDays;
  1984. }
  1985. int CStProfile::GetDiffPercentDays()
  1986. {
  1987. if(m_nDiffPercentDays <= 0)
  1988. return 1;
  1989. return m_nDiffPercentDays;
  1990. }
  1991. void CStProfile::SetScopeDays(int nDays)
  1992. {
  1993. m_nScopeDays = nDays;
  1994. }
  1995. int CStProfile::GetScopeDays()
  1996. {
  1997. if(m_nScopeDays <= 0)
  1998. return 1;
  1999. return m_nScopeDays;
  2000. }
  2001. void CStProfile::SetRatioChangeHandDays(int nDays)
  2002. {
  2003. m_nRatioChangeHandDays = nDays;
  2004. }
  2005. int CStProfile::GetRatioChangeHandDays()
  2006. {
  2007. if(m_nRatioChangeHandDays <= 0)
  2008. return 5;
  2009. return m_nRatioChangeHandDays;
  2010. }
  2011. void CStProfile::SetRatioVolumeDays(int nDays)
  2012. {
  2013. m_nRatioVolumeDays = nDays;
  2014. }
  2015. int CStProfile::GetRatioVolumeDays()
  2016. {
  2017. if(m_nRatioVolumeDays <= 0)
  2018. return 5;
  2019. return m_nRatioVolumeDays;
  2020. }
  2021. void CStProfile::SetRSDays(int nDays)
  2022. {
  2023. m_nRSDays = nDays;
  2024. }
  2025. int CStProfile::GetRSDays()
  2026. {
  2027. if(m_nRSDays <= 0)
  2028. return 5;
  2029. return m_nRSDays;
  2030. }
  2031. void CStProfile::SetYieldAverageDays(int nDays)
  2032. {
  2033. m_nYieldAverageDays = nDays;
  2034. }
  2035. int CStProfile::GetYieldAverageDays()
  2036. {
  2037. if(m_nYieldAverageDays <= 0)
  2038. return 3*STKLIB_DAYS_INONEYEAR;
  2039. return m_nYieldAverageDays;
  2040. }
  2041. int CStProfile::GetMaxDaysCalculate()
  2042. {
  2043. int nMaxDays = GetDiffDays();
  2044. nMaxDays = max(GetDiffPercentDays(), nMaxDays);
  2045. nMaxDays = max(GetScopeDays(), nMaxDays);
  2046. nMaxDays = max(GetRatioChangeHandDays(), nMaxDays);
  2047. nMaxDays = max(GetRatioVolumeDays(), nMaxDays);
  2048. nMaxDays = max(GetRSDays(), nMaxDays);
  2049. SP_ASSERT(nMaxDays <= STKLIB_DAYS_CALCULATE);
  2050. nMaxDays = min(STKLIB_DAYS_CALCULATE, nMaxDays);
  2051. return nMaxDays;
  2052. }
  2053. void CStProfile::SetCurrentStock(int nStockIndex, BOOL bFromSList)
  2054. {
  2055. m_bCurStockFromSList = bFromSList;
  2056. if(m_bCurStockFromSList)
  2057. AfxGetSListStockContainer().SetCurrentStock(nStockIndex);
  2058. else
  2059. AfxGetStockContainer().SetCurrentStock(nStockIndex);
  2060. }
  2061. void CStProfile::SetCurrentStock(const char * szCode, BOOL bFromSList)
  2062. {
  2063. m_bCurStockFromSList = bFromSList;
  2064. if(m_bCurStockFromSList)
  2065. AfxGetSListStockContainer().SetCurrentStock(szCode);
  2066. else
  2067. AfxGetStockContainer().SetCurrentStock(szCode);
  2068. }
  2069. BOOL CStProfile::GetCurrentStock(CStockInfo * pInfo)
  2070. {
  2071. if(m_bCurStockFromSList)
  2072. return AfxGetSListStockContainer().GetCurrentStock(pInfo);
  2073. else
  2074. return AfxGetStockContainer().GetCurrentStock(pInfo);
  2075. }
  2076. BOOL CStProfile::GetPrevStock(CStockInfo * pInfo)
  2077. {
  2078. if(m_bCurStockFromSList)
  2079. return AfxGetSListStockContainer().GetPrevStock(pInfo);
  2080. else
  2081. return AfxGetStockContainer().GetPrevStock(pInfo);
  2082. }
  2083. BOOL CStProfile::GetNextStock(CStockInfo * pInfo)
  2084. {
  2085. if(m_bCurStockFromSList)
  2086. return AfxGetSListStockContainer().GetNextStock(pInfo);
  2087. else
  2088. return AfxGetStockContainer().GetNextStock(pInfo);
  2089. }
  2090. int CStProfile::GetInfoCurrentServer()
  2091. {
  2092. return m_nInfoCurrentServer;
  2093. }
  2094. void CStProfile::SetInfoCurrentServer(int nServer)
  2095. {
  2096. m_nInfoCurrentServer = nServer;
  2097. }
  2098. void CStProfile::GetGraphTechsDefault(CSPDWordArray & anShow)
  2099. {
  2100. // All Order
  2101. m_anGraphTechsAll.RemoveAll();
  2102. for(UINT i=STT_MIN; i<=STT_MAX; i++)
  2103. {
  2104. m_anGraphTechsAll.Add(i);
  2105. }
  2106. // 外挂指标
  2107. UINT nTechUserCount = CTechUser::GetTechUserCount();
  2108. for(i=0; i<nTechUserCount; i++)
  2109. {
  2110. m_anGraphTechsAll.Add(STT_USER_MIN+i);
  2111. }
  2112. // Show
  2113. anShow.RemoveAll();
  2114. anShow.Add(STT_VOLUME);
  2115. anShow.Add(STT_MACD);
  2116. if(nTechUserCount > 0)
  2117. {
  2118. anShow.RemoveAll();
  2119. anShow.Add(STT_VOLUME);
  2120. anShow.Add(STT_USER_MIN);
  2121. }
  2122. }
  2123. CSPDWordArray & CStProfile::GetGraphTechsShow()
  2124. {
  2125. static count = 0;
  2126. count ++;
  2127. if(m_anGraphTechsShow.GetSize() == 0 && count == 1)
  2128. GetGraphTechsDefault(m_anGraphTechsShow);
  2129. // Remove some dulplicate
  2130. for(int i=m_anGraphTechsShow.GetSize()-1; i>=0; i--)
  2131. {
  2132. if(m_anGraphTechsShow[i] >= STT_KLINE_MIN && m_anGraphTechsShow[i] <= STT_KLINE_MAX)
  2133. {
  2134. m_anGraphTechsShow.RemoveAt(i);
  2135. continue;
  2136. }
  2137. for(int k=0; k<i; k++)
  2138. {
  2139. if(m_anGraphTechsShow[i] == m_anGraphTechsShow[k])
  2140. {
  2141. m_anGraphTechsShow.RemoveAt(i);
  2142. SP_ASSERT(FALSE);
  2143. break;
  2144. }
  2145. }
  2146. }
  2147. return m_anGraphTechsShow;
  2148. }
  2149. CSPDWordArray & CStProfile::GetGraphTechsKLine()
  2150. {
  2151. static int count = 0;
  2152. count ++;
  2153. if(m_anGraphTechsKLine.GetSize() == 0 && count == 1)
  2154. m_anGraphTechsKLine.Add(STT_MA);
  2155. // Remove some dulplicate
  2156. for(int i=m_anGraphTechsKLine.GetSize()-1; i>=0; i--)
  2157. {
  2158. if(m_anGraphTechsKLine[i] < STT_KLINE_MIN || m_anGraphTechsKLine[i] > STT_KLINE_MAX)
  2159. {
  2160. m_anGraphTechsKLine.RemoveAt(i);
  2161. continue;
  2162. }
  2163. for(int k=0; k<i; k++)
  2164. {
  2165. if(m_anGraphTechsKLine[i] == m_anGraphTechsKLine[k])
  2166. {
  2167. m_anGraphTechsKLine.RemoveAt(i);
  2168. SP_ASSERT(FALSE);
  2169. break;
  2170. }
  2171. }
  2172. }
  2173. return m_anGraphTechsKLine;
  2174. }
  2175. CSPDWordArray & CStProfile::GetGraphTechsAll()
  2176. {
  2177. int nRealCount = STT_MAX-STT_MIN+1+CTechUser::GetTechUserCount();
  2178. if(m_anGraphTechsAll.GetSize() != nRealCount)
  2179. GetGraphTechsDefault(m_anGraphTechsShow);
  2180. // Remove some dulplicate
  2181. for(int i=m_anGraphTechsAll.GetSize()-1; i>=0; i--)
  2182. {
  2183. for(int k=0; k<i; k++)
  2184. {
  2185. if(m_anGraphTechsAll[i] == m_anGraphTechsAll[k])
  2186. {
  2187. m_anGraphTechsAll.RemoveAt(i);
  2188. SP_ASSERT(FALSE);
  2189. break;
  2190. }
  2191. }
  2192. }
  2193. return m_anGraphTechsAll;
  2194. }
  2195. BOOL CStProfile::IsGraphTechShow(UINT nTech)
  2196. {
  2197. SP_ASSERT((nTech >= STT_MIN && nTech <= STT_MAX) || nTech >= STT_USER_MIN);
  2198. CSPDWordArray & anTech = GetGraphTechsShow();
  2199. CSPDWordArray & anKLine = GetGraphTechsKLine();
  2200. for(int k=0; k<anTech.GetSize(); k++)
  2201. {
  2202. if(anTech[k] == nTech)
  2203. return TRUE;
  2204. }
  2205. for(k=0; k<anKLine.GetSize(); k++)
  2206. {
  2207. if(anKLine[k] == nTech)
  2208. return TRUE;
  2209. }
  2210. return FALSE;
  2211. }
  2212. void CStProfile::ToggleGraphViewTech(UINT nTech)
  2213. {
  2214. SP_ASSERT((nTech >= STT_MIN && nTech <= STT_MAX) || nTech >= STT_USER_MIN);
  2215. if(nTech >= STT_KLINE_MIN && nTech <= STT_KLINE_MAX)
  2216. {
  2217. BOOL bHas = FALSE;
  2218. CSPDWordArray & anKLine = GetGraphTechsKLine();
  2219. for(int k=anKLine.GetSize()-1; k>=0; k--)
  2220. {
  2221. if(anKLine[k] == nTech)
  2222. {
  2223. anKLine.RemoveAt(k);
  2224. bHas = TRUE;
  2225. }
  2226. }
  2227. if(!bHas)
  2228. anKLine.InsertAt(0, nTech);
  2229. }
  2230. else
  2231. {
  2232. BOOL bHas = FALSE;
  2233. CSPDWordArray & anShow = GetGraphTechsShow();
  2234. for(int k=anShow.GetSize()-1; k>=0; k--)
  2235. {
  2236. if(anShow[k] == nTech)
  2237. {
  2238. anShow.RemoveAt(k);
  2239. bHas = TRUE;
  2240. }
  2241. }
  2242. if(!bHas)
  2243. anShow.Add(nTech);
  2244. }
  2245. }
  2246. void CStProfile::ShowGraphViewTech(UINT nTech)
  2247. {
  2248. SP_ASSERT((nTech >= STT_MIN && nTech <= STT_MAX) || nTech >= STT_USER_MIN);
  2249. if(nTech >= STT_KLINE_MIN && nTech <= STT_KLINE_MAX)
  2250. {
  2251. CSPDWordArray & anKLine = GetGraphTechsKLine();
  2252. for(int k=anKLine.GetSize()-1; k>=0; k--)
  2253. {
  2254. if(anKLine[k] == nTech)
  2255. {
  2256. anKLine.RemoveAt(k);
  2257. anKLine.Add(nTech);
  2258. return;
  2259. }
  2260. }
  2261. if(anKLine.GetSize() > 0)
  2262. anKLine.SetAt(0, nTech);
  2263. else
  2264. anKLine.Add(nTech);
  2265. }
  2266. else
  2267. {
  2268. CSPDWordArray & anShow = GetGraphTechsShow();
  2269. for(int k=anShow.GetSize()-1; k>=0; k--)
  2270. {
  2271. if(anShow[k] == nTech)
  2272. {
  2273. anShow.RemoveAt(k);
  2274. anShow.Add(nTech);
  2275. return;
  2276. }
  2277. }
  2278. if(anShow.GetSize() >= 2)
  2279. anShow.SetAt(anShow.GetSize()-1, nTech);
  2280. else
  2281. anShow.Add(nTech);
  2282. }
  2283. }
  2284. int CStProfile::GetGraphKFormat()
  2285. {
  2286. if(m_nGraphKFormat < CKData::formatMin
  2287. || m_nGraphKFormat > CKData::formatMax)
  2288. m_nGraphKFormat = CKData::formatOriginal;
  2289. return m_nGraphKFormat;
  2290. }
  2291. void CStProfile::SetGraphKFormat(int kformat)
  2292. {
  2293. m_nGraphKFormat = kformat;
  2294. }
  2295. int CStProfile::GetGraphMaindataType()
  2296. {
  2297. if(m_nGraphMaindataType < CKData::mdtypeMin
  2298. || m_nGraphMaindataType > CKData::mdtypeMax)
  2299. m_nGraphMaindataType = CKData::mdtypeClose;
  2300. return m_nGraphMaindataType;
  2301. }
  2302. void CStProfile::SetGraphMaindataType(int maindatatype)
  2303. {
  2304. m_nGraphMaindataType = maindatatype;
  2305. }
  2306. DWORD CStProfile::GetAutoResumeDRBegin()
  2307. {
  2308. if(0 == m_dwAutoResumeDRBegin || -1 == m_dwAutoResumeDRBegin)
  2309. m_dwAutoResumeDRBegin = STKLIB_AUTORESUMEDR_DATEBEGIN;
  2310. return m_dwAutoResumeDRBegin;
  2311. }
  2312. void CStProfile::SetAutoResumeDRBegin(DWORD dateBegin)
  2313. {
  2314. m_dwAutoResumeDRBegin = dateBegin;
  2315. }
  2316. BOOL CStProfile::IsValidFont(LPLOGFONT pLogFont)
  2317. {
  2318. SP_ASSERT(pLogFont);
  2319. if(NULL == pLogFont)
  2320. return FALSE;
  2321. for(int i=0; i<sizeof(LOGFONT); i++)
  2322. {
  2323. BYTE bt = *(((LPBYTE)pLogFont) + i);
  2324. if(0 != bt)
  2325. return TRUE;
  2326. }
  2327. return FALSE;
  2328. }
  2329. void CStProfile::GetFontSListView(LPLOGFONT pLogFont)
  2330. {
  2331. SP_ASSERT(pLogFont);
  2332. if(NULL == pLogFont)
  2333. return;
  2334. if(IsValidFont(&m_lfSListView))
  2335. {
  2336. memcpy(pLogFont, &m_lfSListView, sizeof(LOGFONT));
  2337. }
  2338. else
  2339. {
  2340. #ifndef _WIN32_WCE
  2341. // Initially use the system message font for the GridCtrl font
  2342. NONCLIENTMETRICS ncm;
  2343. ncm.cbSize = sizeof(NONCLIENTMETRICS);
  2344. SP_VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));    
  2345. memcpy(pLogFont, &(ncm.lfMessageFont), sizeof(LOGFONT));
  2346. #else
  2347. LOGFONT lf;
  2348. GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf);
  2349. memcpy(pLogFont, &lf, sizeof(LOGFONT));
  2350. #endif
  2351. }
  2352. }
  2353. void CStProfile::SetFontSListView(LPLOGFONT pLogFont)
  2354. {
  2355. SP_ASSERT(pLogFont);
  2356. if(pLogFont)
  2357. memcpy(&m_lfSListView, pLogFont, sizeof(LOGFONT));
  2358. }
  2359. void CStProfile::GetFontBaseView(LPLOGFONT pLogFont)
  2360. {
  2361. SP_ASSERT(pLogFont);
  2362. if(NULL == pLogFont)
  2363. return;
  2364. if(IsValidFont(&m_lfBaseView))
  2365. {
  2366. memcpy(pLogFont, &m_lfBaseView, sizeof(LOGFONT));
  2367. }
  2368. else
  2369. {
  2370. LOGFONT lf;
  2371. ::GetObject(::GetStockObject(SYSTEM_FIXED_FONT), sizeof(LOGFONT), &lf);
  2372. memcpy(pLogFont, &lf, sizeof(LOGFONT));
  2373. }
  2374. }
  2375. void CStProfile::SetFontBaseView(LPLOGFONT pLogFont)
  2376. {
  2377. SP_ASSERT(pLogFont);
  2378. if(pLogFont)
  2379. memcpy(&m_lfBaseView, pLogFont, sizeof(LOGFONT));
  2380. }
  2381. CTechParameters & CStProfile::GetTechParameters()
  2382. {
  2383. return m_techparameters;
  2384. }
  2385. void CStProfile::AddHTMLURLToExplorer(LPCTSTR lpszURL)
  2386. {
  2387. m_aHTMLURLToExplorer.Add(lpszURL);
  2388. }
  2389. CSPStringArray & CStProfile::GetHTMLURLToExplorer()
  2390. {
  2391. return m_aHTMLURLToExplorer;
  2392. }
  2393. BOOL CStProfile::GetRcvDriverDefault(CSPStringArray & astrProvider, CSPStringArray & astrDriver)
  2394. {
  2395. astrProvider.Copy(m_astrProvider);
  2396. astrDriver.Copy(m_astrDriver);
  2397. return astrDriver.GetSize() > 0 ;
  2398. }
  2399. void CStProfile::SetRcvDriverDefault(CSPStringArray & astrProvider, CSPStringArray & astrDriver)
  2400. {
  2401. m_astrProvider.Copy(astrProvider);
  2402. m_astrDriver.Copy(astrDriver);
  2403. }
  2404. CSPString CStProfile::GetTrader()
  2405. {
  2406. return m_strTrader;
  2407. }
  2408. void CStProfile::SetTrader(LPCTSTR lpszFileTrader)
  2409. {
  2410. m_strTrader = lpszFileTrader;
  2411. }
  2412. BOOL CStProfile::GetAutoSaveKDataMin()
  2413. {
  2414. return m_bAutoSaveKDataMin;
  2415. }
  2416. void CStProfile::SetAutoSaveKDataMin(BOOL bSave)
  2417. {
  2418. m_bAutoSaveKDataMin = bSave;
  2419. }
  2420. BOOL CStProfile::GetNotifyIcon()
  2421. {
  2422. return m_bNotifyIcon;
  2423. }
  2424. void CStProfile::SetNotifyIcon(BOOL bNotifyIcon)
  2425. {
  2426. m_bNotifyIcon = bNotifyIcon;
  2427. }
  2428. UINT CStProfile::GetCacheDays()
  2429. {
  2430. return m_nCacheDays;
  2431. }
  2432. void CStProfile::SetCacheDays(UINT nCacheDays)
  2433. {
  2434. m_nCacheDays = nCacheDays;
  2435. }
  2436. CAlarmCondContainer & CStProfile::GetAlarmCondContainer()
  2437. {
  2438. return m_aAlarmCond;
  2439. }
  2440. int CStProfile::GetLocalDataVersion()
  2441. {
  2442. return m_nLocalDataVersion;
  2443. }
  2444. void CStProfile::SetLocalDataVersion(int nDataVersion)
  2445. {
  2446. m_nLocalDataVersion = nDataVersion;
  2447. }