MAIN.C
上传用户:bjghjy
上传日期:2007-01-07
资源大小:379k
文件大小:10k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /* sv_data:数据采集机。直接将变化数据发送到通讯机
  2. *  by lgd/Paladin.InetSoft guangzhou,1996.9
  3. *  modify by lym(修改后作者里却不愿写上原作者的一个人) guangzhou,1997.4-1998
  4. */
  5. #include <windows.h>
  6. #include <string.h>
  7. #include <time.h>
  8. #include <stdlib.h>
  9. //#include "ctl3d.h"
  10. #include "resource.h"
  11. #include "hq.h"
  12. #include "sv_hq.h"
  13. #include "data.h"
  14. #include "lzw.h"
  15. #define WND_CAPTION     (LPSTR)"数据采集处理机"
  16. LRESULT CALLBACK MainDlgProc(HWND, UINT, WPARAM, LPARAM);
  17. HWND ghWndMain =NULL;
  18. HINSTANCE ghInstance =NULL;
  19. int WinVer;
  20. extern int Idel;
  21. BOOL ErrMsg(HWND hWnd, LPSTR msg);
  22. BOOL AppInit(void);
  23. void AppExit(void);
  24. int CheckTime(BOOL fRead);
  25. extern BOOL JyOpen(int);
  26. void MsgRecv(char far *msg);
  27. void MsgLocal(LPSTR msg);
  28. HBRUSH DrawChild(HDC hDC, HWND hWnd);
  29. BOOL PASCAL DrawDlgFrame(HWND,int, int);
  30. BOOL run_cancelled =FALSE;
  31. BOOL IsWeekEnd(struct tm*);
  32. BOOL IsMonthEnd(struct tm*);
  33. int DoHq(void);
  34. extern int UDPBlockingHook(void);
  35. extern BOOL IsTodayHq(int);
  36. extern BOOL ReadHqDat(int);
  37. extern BOOL WriteDayData(int);
  38. extern BOOL RemoveGDataFile(int);
  39. extern BOOL ResetHqData(int);
  40. extern BOOL WriteWeekData(int);
  41. extern BOOL WriteMonthData(int);
  42. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInstPre,
  43. LPSTR lpszCmdLine, int nCmdShow)
  44. {
  45. HWND hwnd;
  46. FARPROC lpDlgProc;
  47. if(hInstPre)
  48. {
  49. hwnd =FindWindow(NULL, WND_CAPTION);
  50. if(hwnd)
  51. SetFocus(hwnd);
  52. return FALSE;
  53. }
  54.     
  55. ghInstance =hInstance;
  56. if(!AppInit())
  57. {
  58. ErrMsg(NULL, "AppInit failed!");
  59. goto appexit;
  60. }
  61. lpDlgProc =(FARPROC)MakeProcInstance((FARPROC)MainDlgProc, hInstance);
  62. if(lpDlgProc ==NULL)
  63. {
  64. ErrMsg(NULL, "MakeProcInstance failed!");
  65. goto appexit;
  66. }
  67. DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, lpDlgProc);
  68. FreeProcInstance(lpDlgProc);
  69. appexit:
  70. AppExit();
  71. return 0;
  72. }
  73. HANDLE hLibCtl3d =NULL;
  74. BOOL AppInit(void)
  75. {
  76. extern int PCTCPInit();
  77. // FARPROC fpTemp;
  78. WinVer =LOBYTE(LOWORD(GetVersion()));
  79. //if(WinVer <4)
  80. //{
  81. // hLibCtl3d =LoadLibrary("CTL3DV2.DLL");
  82. // if((UINT)hLibCtl3d <=32)
  83. // hLibCtl3d =LoadLibrary("CTL3D.DLL");
  84. // if((UINT)hLibCtl3d >32)
  85. // {
  86. // fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dRegister");
  87. // if(fpTemp)
  88. // (*fpTemp)(ghInstance);
  89. // fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dAutoSubclass");
  90. // if(fpTemp)
  91. // (*fpTemp)(ghInstance);
  92. // }
  93. //}
  94. SetHandleCount(100);
  95. if(PCTCPInit()<0)
  96. {
  97. ErrMsg(NULL, "PCTCPInit failed!");
  98. //return FALSE;
  99. }
  100. if(HqInit() <0)
  101. {
  102. ErrMsg(NULL, "HqInit() failed!");
  103. return FALSE;
  104. }
  105. return TRUE;
  106. }
  107. void AppExit(void)
  108. {
  109. extern void PCTCPExit();
  110. static BOOL fExit =FALSE;
  111. // FARPROC fpTemp;
  112. if(fExit) return;
  113. fExit =TRUE;
  114. HqExit();
  115. PCTCPExit();
  116. //if((UINT)hLibCtl3d >32)
  117. //{
  118. // fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dUnregister");
  119. // if(fpTemp)
  120. // (*fpTemp)(ghInstance);
  121. // FreeLibrary(hLibCtl3d);
  122. //}
  123. }
  124. extern int Hq_Refresh_Time;
  125. BOOL fAuto =TRUE;
  126. extern BOOL fWrited[2];
  127. extern int SendJyStart(int);
  128. extern int ConnectHost(void);
  129. extern int WriteHqAll(int);
  130. LRESULT CALLBACK MainDlgProc(HWND hDlg, UINT message,
  131. WPARAM wParam, LPARAM lParam)
  132. {
  133. char dt[40];
  134. static BOOL fHq_Running =FALSE, fJy_Running =FALSE;
  135. HWND hctl;
  136. char temp[300];
  137. DWORD dw;
  138. switch(message)
  139. {
  140. case WM_INITDIALOG:
  141. fHq_Running =fJy_Running =FALSE;
  142. SetWindowText(hDlg, WND_CAPTION);
  143. ghWndMain =hDlg;
  144. _strdate(dt);
  145. strcat(dt, " ");
  146. _strtime(&dt[strlen(dt)]);
  147. SetDlgItemText(hDlg, IDC_STARTTIME, dt);
  148. CheckDlgButton(hDlg, IDC_AUTO, fAuto);
  149. if(ConnectHost() <0)
  150. ErrMsg(hDlg, "warning: Comm server not start");
  151. PostMessage(hDlg, WM_USER+1, 0, 0L);
  152. return TRUE;
  153. case WM_TIMER:
  154. if(wParam==1)
  155.             {
  156.              KillTimer(hDlg,1);
  157.              DoHq();
  158.              if(!run_cancelled)
  159.              SetTimer(hDlg,1,Idel,NULL);
  160. }
  161. break;
  162. case WM_USER+1:
  163. CheckTime(TRUE);
  164. SetTimer(hDlg,1,Idel,NULL);
  165. break;
  166. case WM_COMMAND:
  167. switch(wParam)
  168. {
  169. case IDC_AUTO:
  170. if(HIWORD(lParam) ==BN_CLICKED)
  171. {
  172. if(IsDlgButtonChecked(hDlg, IDC_AUTO))
  173. {
  174. hctl =GetDlgItem(hDlg, IDC_DAY);
  175. EnableWindow(hctl, FALSE);
  176. hctl =GetDlgItem(hDlg, IDC_WEEK);
  177. EnableWindow(hctl, FALSE);
  178. hctl =GetDlgItem(hDlg, IDC_MONTH);
  179. EnableWindow(hctl, FALSE);
  180. }
  181. }
  182. break;
  183. case IDC_MANU:
  184. if(HIWORD(lParam) ==BN_CLICKED)
  185. {
  186. if(IsDlgButtonChecked(hDlg, IDC_MANU))
  187. {
  188. hctl =GetDlgItem(hDlg, IDC_DAY);
  189. EnableWindow(hctl, TRUE);
  190. hctl =GetDlgItem(hDlg, IDC_WEEK);
  191. EnableWindow(hctl, TRUE);
  192. hctl =GetDlgItem(hDlg, IDC_MONTH);
  193. EnableWindow(hctl, TRUE);
  194. }
  195. }
  196. break;
  197. case IDC_DAY:
  198. if(HqTime[0].fRunning ==FALSE
  199. && HqTime[1].fRunning ==FALSE)
  200. {         
  201. WriteDayData(0);
  202. WriteDayData(1);
  203. }
  204. break;
  205. case IDC_WEEK:
  206. if(HqTime[0].fRunning ==FALSE
  207. && HqTime[1].fRunning ==FALSE)
  208. {         
  209. if(!fAuto && MessageBox(hDlg,"是本周最后交易日吗","请您注意",MB_YESNO|MB_DEFBUTTON2)==IDYES)
  210. {
  211. WriteWeekData(0);
  212. WriteWeekData(1);
  213. }
  214. }
  215. break;
  216. case IDC_MONTH:
  217. if(HqTime[0].fRunning ==FALSE
  218. && HqTime[1].fRunning ==FALSE)
  219. {         
  220. if(!fAuto && MessageBox(hDlg,"是本月最后交易日吗","请您注意",MB_YESNO|MB_DEFBUTTON2)==IDYES)
  221. {
  222. WriteMonthData(0);
  223. WriteMonthData(1);
  224. }
  225. }       
  226. break;
  227. case IDCANCEL:
  228. if(MessageBox(hDlg, "您要退出吗?", "请您注意",
  229. MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2) ==IDNO)
  230. break;
  231. KillTimer(hDlg,1);
  232. EndDialog(hDlg, 0);
  233. ghWndMain =NULL;
  234. PostQuitMessage(0);
  235. break;
  236. case IDOK:
  237. dw =SendDlgItemMessage(hDlg, IDL_MSG, LB_GETCURSEL, 0, 0L);
  238. if(dw !=LB_ERR)
  239. {
  240. SendDlgItemMessage(hDlg, IDL_MSG, LB_GETTEXT, (int)dw, (LPARAM)(LPSTR)temp);
  241. MessageBox(hDlg, temp, "Message", MB_OK);
  242. }
  243. break;
  244. }
  245. break;
  246. }
  247. return FALSE;
  248. }
  249. BOOL ErrMsg(HWND hWnd, LPSTR msg)
  250. {
  251. //char tmp[256];
  252. DWORD dw;
  253. //if(ghWndMain)
  254. {
  255. if((dw =SendDlgItemMessage(ghWndMain, IDC_LISTERR,
  256. LB_ADDSTRING, 0, (LPARAM)(LPSTR)msg))==LB_ERR)
  257. SendDlgItemMessage(ghWndMain, IDC_LISTERR,
  258. LB_RESETCONTENT, 0, (LPARAM)(LPSTR)msg);
  259. else
  260. SendDlgItemMessage(ghWndMain, IDC_LISTERR,
  261. LB_SETCURSEL, (int)dw, 0L);
  262. }
  263. //msgbox_exist =TRUE;
  264. //if(strlen(msg)>=250) *(msg+250) =0;
  265. //wsprintf(tmp, "Error message:n %s", msg);
  266. //MessageBox(hWnd, tmp, WND_CAPTION, MB_OK|MB_ICONSTOP);
  267. return FALSE;
  268. }
  269. void DelSpaces(LPSTR lpstr)
  270. {
  271. return;
  272. }
  273. BOOL GetInitString(char *Entry, char *Item, char *buf)
  274. {
  275. GetPrivateProfileString(Entry, Item, "", buf, 256, "sv_data.ini");
  276. if(*buf ==0) return FALSE;
  277. return TRUE;
  278. }
  279. void PutInitString(char *Entry, char *Item, char *buf)
  280. {
  281. WritePrivateProfileString(Entry, Item, buf, "sv_data.ini");
  282. }
  283. int GetInitInt(char *Entry, char *Item)
  284. {
  285. return GetPrivateProfileInt(Entry, Item, -1, "sv_data.ini");
  286. }
  287. void MsgSend(char far *msg)
  288. {
  289. SetDlgItemText(ghWndMain, IDC_STATUS_SEND, msg);
  290. }
  291. void MsgRecv(char far *msg)
  292. {
  293. SetDlgItemText(ghWndMain, IDC_STATUS_RECV, msg);
  294. }
  295. void MsgLocal(LPSTR msg)
  296. {
  297. SetDlgItemText(ghWndMain, IDC_STATE_LOCAL, msg);
  298. }
  299. int date_num =-1, tim =-1;
  300. long tim_seconds =0;
  301. int CheckTime(BOOL fRead)
  302. {
  303. char tmp[40], tmp1[41];
  304. LPSTR tok;
  305. int jys, ret;
  306. static long time_start =-1;
  307. //struct tm *ptm;
  308. //HFILE hFile;
  309. //OFSTRUCT os;
  310. _strdate(tmp);
  311. date_num =100*atoi(strtok(tmp, "/"));
  312. tok =strtok(NULL, "/");
  313. date_num +=atoi(tok);
  314. _strtime(tmp); //hh:mm:ss
  315. strcpy(tmp1, tmp);
  316. tok =strtok(tmp, ":");
  317. tim =atoi(tok)*60;
  318. tim +=atoi(strtok(NULL, ":"));
  319. tim_seconds =(long)tim*60+atoi(strtok(NULL, ":"));
  320. if(time_start ==-1) time_start =tim_seconds;
  321. else if(tim_seconds >time_start)
  322. MsgLocal(tmp1);
  323. for(jys =0; jys <2; jys++)
  324. {    
  325. //此处收市放量五分钟