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

金融证券系统

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "StartupDlg.h"
  3. #include "ProxySetDlg.h"
  4. #include "EditSrvDlg.h"
  5. /////////////////////////////////////////////////////////////////////////////
  6. // CStartupDlg dialog
  7. CStartupDlg::CStartupDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_STARTUP/*CStartupDlg::IDD*/, pParent)
  8. {
  9. m_strUser = _T("");
  10. m_strPasswd = _T("");
  11. m_bSavePasswd = FALSE;
  12. m_pfnLoadProgram = NULL;
  13. m_bDisableOffline = FALSE;
  14. }
  15. BOOL CStartupDlg::SetBitmap(HBITMAP hbmp)
  16. {
  17. return m_bitmap.Attach(hbmp);
  18. }
  19. void CStartupDlg::SetLoadProgramFunc(BOOL (CALLBACK *pfnLoadProgram)(HWND,int,int))
  20. {
  21. m_pfnLoadProgram = pfnLoadProgram;
  22. }
  23. void CStartupDlg::SetDisableOffline(BOOL bDisableOffline)
  24. {
  25. m_bDisableOffline = bDisableOffline;
  26. }
  27. void CStartupDlg::SetProgress(int nPos)
  28. {
  29. if (!::IsWindow(m_ctrlProgress.GetSafeHwnd()))
  30. return;
  31. int nLower = 0, nUpper = 0;
  32. m_ctrlProgress.GetRange(nLower, nUpper);
  33. if (nLower < nUpper && nPos >= nLower && nPos <= nUpper)
  34. {
  35. m_ctrlProgress.SetPos(nPos);
  36. }
  37. else
  38. ASSERT(FALSE);
  39. }
  40. void CStartupDlg::SetupComboServer()
  41. {
  42. m_comboServer.ResetContent();
  43. UINT nSelectedItem = 0;
  44. int nCurrentServer = AfxGetQSProfile().GetCurrentServerIndex();
  45. CQuoteServerArray & aServers = AfxGetQSProfile().GetQuoteServers();
  46. for(int i=0; i<aServers.GetSize(); i++)
  47. {
  48. CQuoteServer & qs = aServers.ElementAt(i);
  49. int nItem = m_comboServer.AddString(qs.m_strName);
  50. m_comboServer.SetItemData(nItem, i);
  51. if (i == nCurrentServer)
  52. nSelectedItem = nItem;
  53. }
  54. m_comboServer.SetCurSel(nSelectedItem);
  55. }
  56. void CStartupDlg::DoDataExchange(CDataExchange* pDX)
  57. {
  58. CDialog::DoDataExchange(pDX);
  59. //{{AFX_DATA_MAP(CStartupDlg)
  60. DDX_Control(pDX, IDC_EDIT_USER, m_editUser);
  61. DDX_Control(pDX, IDC_EDIT_PASSWD, m_editPasswd);
  62. DDX_Control(pDX, IDC_CHECK_SAVEPASSWD, m_btnCheckSavePasswd);
  63. DDX_Control(pDX, IDC_MODIFY, m_btnModify);
  64. DDX_Control(pDX, IDC_DELETE, m_btnDelete);
  65. DDX_Control(pDX, IDC_ADD, m_btnAdd);
  66. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  67. DDX_Control(pDX, IDC_PROXY_SET, m_btnProxy);
  68. DDX_Control(pDX, IDC_STATICINFO, m_staticInfo);
  69. DDX_Control(pDX, IDC_STARTUPPROGRESS, m_ctrlProgress);
  70. DDX_Control(pDX, IDC_STARTUPPICTURE, m_staticPicture);
  71. DDX_Control(pDX, IDC_OFFLINE, m_btnOffline);
  72. DDX_Control(pDX, IDOK, m_btnOK);
  73. DDX_Control(pDX, IDC_COMBO_SERVER, m_comboServer);
  74. DDX_Text(pDX, IDC_EDIT_USER, m_strUser);
  75. DDV_MaxChars(pDX, m_strUser, 128);
  76. DDX_Text(pDX, IDC_EDIT_PASSWD, m_strPasswd);
  77. DDV_MaxChars(pDX, m_strPasswd, 128);
  78. DDX_Check(pDX, IDC_CHECK_SAVEPASSWD, m_bSavePasswd);
  79. //}}AFX_DATA_MAP
  80. }
  81. BEGIN_MESSAGE_MAP(CStartupDlg, CDialog)
  82. ON_CBN_SELCHANGE(IDC_COMBO_SERVER, OnSelchangeComboServer)
  83. ON_BN_CLICKED(IDC_ADD, OnAdd)
  84. ON_BN_CLICKED(IDC_MODIFY, OnModify)
  85. ON_BN_CLICKED(IDC_DELETE, OnDelete)
  86. ON_BN_CLICKED(IDC_PROXY_SET, OnProxySet)
  87. ON_BN_CLICKED(IDC_OFFLINE, OnOffline)
  88. ON_MESSAGE(WM_USER_STARTUP_PROGRESS, OnStartupProgress)
  89. END_MESSAGE_MAP()
  90. /////////////////////////////////////////////////////////////////////////////
  91. // CStartupDlg message handlers
  92. int CStartupDlg::DoModal() 
  93. {
  94. HINSTANCE hInstanceOld = AfxGetResourceHandle();
  95. AfxSetResourceHandle(AfxGetModuleHandle());
  96. int nRet = CDialog::DoModal();
  97. AfxSetResourceHandle(hInstanceOld);
  98. return nRet;
  99. }
  100. BOOL CStartupDlg::OnInitDialog() 
  101. {
  102. CDialog::OnInitDialog();
  103. if (m_bDisableOffline)
  104. m_btnOffline.EnableWindow(FALSE);
  105. m_staticPicture.SetBitmap((HBITMAP)m_bitmap.GetSafeHandle());
  106. m_ctrlProgress.SetRange(0, STKLIB_MAX_PROGRESS);
  107. m_ctrlProgress.SetPos(0);
  108. AfxGetQSProfile().LoadProfile();
  109. SetupComboServer();
  110. OnSelchangeComboServer();
  111. return TRUE;
  112. }
  113. void CStartupDlg::OnSelchangeComboServer() 
  114. {
  115. CQuoteServer qs;
  116. int nSel = m_comboServer.GetCurSel();
  117. if (CB_ERR != nSel)
  118. {
  119. int i = m_comboServer.GetItemData(nSel);
  120. CQuoteServerArray & aServers = AfxGetQSProfile().GetQuoteServers();
  121. if (i >= 0 && i < aServers.GetSize())
  122. qs = aServers.ElementAt(i);
  123. }
  124. m_strUser = qs.m_strUser;
  125. m_strPasswd = qs.m_strPasswd;
  126. m_bSavePasswd = qs.m_bSavePasswd;
  127. if (!m_bSavePasswd)
  128. m_strPasswd.Empty();
  129. UpdateData(FALSE);
  130. }
  131. void CStartupDlg::OnAdd() 
  132. {
  133. CEditSrvDlg dlg;
  134. if (IDOK == dlg.DoModal())
  135. {
  136. CQuoteServer qs;
  137. dlg.GetQuoteServer(qs);
  138. int nNew = AfxGetQSProfile().GetQuoteServers().Add(qs);
  139. AfxGetQSProfile().SetCurrentServer(nNew);
  140. SetupComboServer();
  141. OnSelchangeComboServer();
  142. AfxGetQSProfile().StoreProfile();
  143. }
  144. }
  145. void CStartupDlg::OnModify() 
  146. {
  147. CQuoteServer qs;
  148. int nSel = m_comboServer.GetCurSel();
  149. if (CB_ERR == nSel)
  150. {
  151. AfxMessageBox(AfxModuleLoadString(IDS_SELECTSRV_NOSELECTED));
  152. return;
  153. }
  154. int i = m_comboServer.GetItemData(nSel);
  155. CQuoteServerArray & aServers = AfxGetQSProfile().GetQuoteServers();
  156. if (i >= 0 && i < aServers.GetSize())
  157. qs = aServers.ElementAt(i);
  158. CEditSrvDlg dlg;
  159. dlg.SetQuoteServer(qs);
  160. if (IDOK == dlg.DoModal())
  161. {
  162. dlg.GetQuoteServer(qs);
  163. if (i >= 0 && i < aServers.GetSize())
  164. {
  165. aServers.SetAt(i,qs);
  166. AfxGetQSProfile().SetCurrentServer(i);
  167. }
  168. SetupComboServer();
  169. OnSelchangeComboServer();
  170. AfxGetQSProfile().StoreProfile();
  171. }
  172. }
  173. void CStartupDlg::OnDelete() 
  174. {
  175. int nSel = m_comboServer.GetCurSel();
  176. if (CB_ERR == nSel)
  177. {
  178. AfxMessageBox(AfxModuleLoadString(IDS_SELECTSRV_NOSELECTED));
  179. return;
  180. }
  181. if (IDYES != AfxMessageBox(AfxModuleLoadString(IDS_SELECTSRV_DELCONFIRM), MB_YESNO))
  182. return;
  183. int i = m_comboServer.GetItemData(nSel);
  184. CQuoteServerArray & aServers = AfxGetQSProfile().GetQuoteServers();
  185. if (i >= 0 && i < aServers.GetSize())
  186. {
  187. aServers.RemoveAt(i);
  188. AfxGetQSProfile().SetCurrentServer(i);
  189. }
  190. SetupComboServer();
  191. OnSelchangeComboServer();
  192. AfxGetQSProfile().StoreProfile();
  193. }
  194. void CStartupDlg::OnProxySet() 
  195. {
  196. CProxySetDlg dlg;
  197. dlg.DoModal();
  198. }
  199. UINT RefreshServers(LPVOID pParam)
  200. {
  201. CNetDatabase * netdb = new CNetDatabase();
  202. if (NULL == netdb) return FALSE;
  203. if (!netdb->SetRootPath(AfxGetProfile().GetSelfDBPath(), IStStore::dbtypeSelfDB))
  204. {
  205. delete netdb;
  206. AfxEndThread(0, TRUE);
  207. return FALSE;
  208. }
  209. // refresh servers
  210. CString strServer = AfxGetProfile().GetMainServer();
  211. CDownloadServer server;
  212. if (!server.FromString(strServer))
  213. {
  214. delete netdb;
  215. AfxEndThread(0, TRUE);
  216. return FALSE;
  217. }
  218. if (!netdb->SetServer(server.m_strAddress, server.m_nPort))
  219. {
  220. delete netdb;
  221. AfxEndThread(0, TRUE);
  222. return FALSE;
  223. }
  224. // set access type
  225. if (!netdb->SetAccessType(AfxGetQSProfile().GetAccessType(), AfxGetQSProfile().GetProxyType(),
  226. AfxGetQSProfile().GetProxyAddress(), AfxGetQSProfile().GetProxyPort(),
  227. AfxGetQSProfile().GetProxyUser(), AfxGetQSProfile().GetProxyPasswd()))
  228. {
  229. delete netdb;
  230. AfxEndThread(0, TRUE);
  231. return FALSE;
  232. }
  233. if (!netdb->Login( AfxGetSView().GetS(), AfxGetSView().GetU(),
  234. NULL, AfxGetProfile().GetVersion()))
  235. {
  236. delete netdb;
  237. AfxEndThread(0, TRUE);
  238. return FALSE;
  239. }
  240. // load server info
  241. if (netdb->NetloadServerInfo(NULL, NULL))
  242. {
  243. CServers & servers = netdb->GetServers();
  244. servers.SaveToProfile();
  245. }
  246. if (netdb->NetloadPackageInfo(NULL, NULL) && netdb->GetPackages().m_nDataVersion > AfxGetProfile().GetLocalDataVersion())
  247. {
  248. netdb->NetloadCodetbl(NULL, NULL);
  249. netdb->NetloadBasetable(NULL, NULL, NULL, NULL, NULL);
  250. netdb->NetloadDRData(NULL, NULL, NULL, NULL, NULL);
  251. AfxGetProfile().SetLocalDataVersion(netdb->GetPackages().m_nDataVersion);
  252. }
  253. netdb->Logout();
  254. delete netdb;
  255. AfxEndThread(0, TRUE);
  256. return TRUE;
  257. }
  258. void CStartupDlg::OnOK() 
  259. {
  260. m_btnOK.EnableWindow(FALSE);
  261. m_btnOffline.EnableWindow(FALSE);
  262. UpdateData();
  263. m_ctrlProgress.ShowWindow(SW_SHOW);
  264. int nSel = m_comboServer.GetCurSel();
  265. if (CB_ERR == nSel)
  266. {
  267. AfxMessageBox(AfxModuleLoadString(IDS_SELECTSRV_NOSELECTED));
  268. m_btnOK.EnableWindow(TRUE);
  269. if (!m_bDisableOffline)
  270. m_btnOffline.EnableWindow(TRUE);
  271. m_ctrlProgress.ShowWindow(SW_HIDE);
  272. return;
  273. }
  274. int i = m_comboServer.GetItemData(nSel);
  275. CQuoteServerArray & aServers = AfxGetQSProfile().GetQuoteServers();
  276. if (i >= 0 && i < aServers.GetSize())
  277. {
  278. AfxGetQSProfile().SetCurrentServer(i);
  279. CQuoteServer & qs = aServers.ElementAt(i);
  280. // Save
  281. qs.m_strUser = m_strUser;
  282. qs.m_strPasswd = m_strPasswd;
  283. qs.m_bSavePasswd = m_bSavePasswd;
  284. if (!qs.m_bSavePasswd)
  285. qs.m_strPasswd.Empty();
  286. // Load
  287. m_strAddress = qs.m_strAddress;
  288. m_nPort = qs.m_nPort;
  289. }
  290. AfxGetQSProfile().StoreProfile();
  291. m_staticInfo.SetWindowText(AfxModuleLoadString(IDS_STARTUP_CONNECTSERVER));
  292. AfxBeginThread(RefreshServers, NULL, THREAD_PRIORITY_NORMAL);
  293. if (!AfxGetStkReceiver().NetEngineBeginWorking(m_strAddress, m_nPort, m_strUser, m_strPasswd))
  294. {
  295. m_staticInfo.SetWindowText(AfxModuleLoadString(IDS_STARTUP_CONNECTFAILED));
  296. m_btnOK.EnableWindow(TRUE);
  297. if (!m_bDisableOffline)
  298. m_btnOffline.EnableWindow(TRUE);
  299. m_ctrlProgress.ShowWindow(SW_HIDE);
  300. return;
  301. }
  302. m_staticInfo.SetWindowText(AfxModuleLoadString(IDS_STARTUP_LOADPROGRAM));
  303. ASSERT(m_pfnLoadProgram);
  304. if (m_pfnLoadProgram && !m_pfnLoadProgram(GetSafeHwnd(), 0, STKLIB_MAX_PROGRESS))
  305. {
  306. CDialog::OnCancel();
  307. return;
  308. }
  309. CDialog::OnOK();
  310. }
  311. void CStartupDlg::OnOffline() 
  312. {
  313. m_btnOK.EnableWindow(FALSE);
  314. m_btnOffline.EnableWindow(FALSE);
  315. UpdateData();
  316. m_ctrlProgress.ShowWindow(SW_SHOW);
  317. m_staticInfo.SetWindowText(AfxModuleLoadString(IDS_STARTUP_LOADPROGRAM));
  318. ASSERT(m_pfnLoadProgram);
  319. if (m_pfnLoadProgram && !m_pfnLoadProgram(GetSafeHwnd(), 0, STKLIB_MAX_PROGRESS))
  320. {
  321. CDialog::OnCancel();
  322. return;
  323. }
  324. CDialog::OnOK();
  325. }
  326. LRESULT CStartupDlg::OnStartupProgress(WPARAM wParam, LPARAM lParam)
  327. {
  328. SetProgress(wParam);
  329. return 1;
  330. }