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

金融证券系统

开发平台:

Visual C++

  1. /* hq_cl:股票行情,分析,资讯,交易。
  2. *  by lgd/Paladin.InetSoft guangzhou 1996.9
  3. *  http://www.nease.net/~inetsoft, inetsoft@163.net
  4. *  modify by lym(看此程序学了些win32编程,修改后作者里却不愿写上原作者的一个人) guangzhou 1997.5-1998
  5. */
  6. #include <windows.h>
  7. #include <windowsx.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include <time.h>
  12. #include <io.h>
  13. #include "global.h"
  14. #include "resource.h"
  15. #include "appmain.h"
  16. #include "pctcp.h"
  17. #include "hq.h"
  18. #include "hq_cl.h"
  19. #include "jy_cl.h"
  20. #include "caption.h"
  21. #include "mmp.h"
  22. #include "cj.h"
  23. #include "status.h"
  24. #include "xlt.h"
  25. #include "jlt.h"
  26. #include "graph.h"
  27. #include "maxmin.h"
  28. #include "lithq.h"
  29. #include "zs.h"
  30. #include "fx.h"
  31. #include "toolbar.h"
  32. #include "msg.h"
  33. #include "rsa.h"
  34. #include "env.h"
  35. #include "comm.h"
  36. #include "hq_tcp.h"
  37. int WinVer =3;
  38. HINSTANCE ghInstance =NULL;
  39. HWND ghWndMain =NULL, 
  40.     ghWndStatus =NULL, 
  41.     ghWndMaxMin =NULL,
  42. ghWndXlt =NULL, 
  43. ghWndJlt =NULL,
  44. ghWndCaption =NULL, 
  45. ghWndZs =NULL,
  46. ghWndMmp =NULL, 
  47. ghWndCj =NULL, 
  48. ghWndHq =NULL, 
  49. ghWndLitHq =NULL, 
  50. ghWndFx =NULL,
  51. ghDlgChkUsr =NULL,
  52. ghWndToolBar =NULL, 
  53. ghWndTips =NULL,
  54. ghWndHelp=NULL,
  55. hWndInput =NULL;
  56. HMENU ghMenuHq =NULL, 
  57. ghMenuMain =NULL, 
  58. ghMenuMainGraph =NULL, 
  59. ghMenuGraph =NULL;
  60. HBITMAP hBmpUp =NULL, 
  61. hBmpDown =NULL, 
  62. hBmpEqual =NULL;
  63. BOOL IsSzRead=FALSE,IsShRead=FALSE;
  64. int STATUS_HEIGHT=0;
  65. int MSG_HEIGHT =0;
  66. int INPUT_WIDTH =0; 
  67. int TOOLBAR_HEIGHT =0;
  68. BOOL gfTest =FALSE;
  69. int gfOnLine = FALSE,
  70. gfConnecting =TRUE,
  71. gfDelete=FALSE;
  72. int jy_running =FALSE;
  73. char * IpSendBuffer,
  74.  *IpCommitBuffer;
  75. unsigned int IpSendLen =0,
  76. IpCommitLen =0;
  77. HANDLE hLibCtl3d =NULL;
  78. char inkey[16+1],*winpy=NULL;
  79. short SeleGp[MAX_SELE_NUM][2];
  80. char UserID[HQ_USERID_SIZE+1];
  81. char UserPwd[HQ_USERPWD_SIZE+1];
  82. //extern HWND ghDlgJy;
  83. extern char szDataPath[128];
  84. extern unsigned int RANGE_MENU[7];
  85. extern int SeleQs;
  86. extern LPSTR HqTitles[HQ_FLDS_COUNT+2];
  87. extern int Jy(void);
  88. extern void UDP_Send_Exit(void);
  89. extern HBRUSH DrawChild(HDC hDC, HWND hWnd);
  90. extern int UDP_Client_ReadHq(void);
  91. extern int AnaRecvData(void);
  92. extern int AnaJyRecvData(void);
  93. extern int UDP_Client_ReadJy(void);
  94. extern int UDP_Send_Hq00(int jys, BOOL fFirst, int fRefresh, int fSel, int recCount, short *recList);
  95. extern int UDP_Send_Hq01(int, BOOL, int, int);
  96. extern int UDP_Send_Zx(void);
  97. extern int sdHq,JyOffLineTime;
  98. extern JY_ANS_CHKUSR curChkUsrRes;
  99. extern HFILE hfZx ;
  100. extern BOOL  Ip_Send_Pack();
  101. extern int InitQsInfo(void);
  102. extern int JyQs;
  103. extern char Addr[MAX_ZQS_COUNT][15];
  104. extern int ConnectToJyHost(char *HostName);
  105. extern void SendJyQsxx(void);
  106. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInstPre,
  107. LPSTR lpszCmdLine, int nCmdShow)
  108. {                      
  109. WNDCLASS wc;
  110. HWND hwnd;
  111. MSG msg;
  112. int x,y;
  113.     
  114. if(hInstPre)
  115. {
  116. hwnd =FindWindow(APPNAME, NULL);
  117. if(hwnd)
  118. SetFocus(hwnd);
  119. return FALSE;
  120. }
  121. ghInstance =hInstance;
  122. memset(&wc, 0, sizeof(wc));
  123. wc.style =0;
  124. wc.lpfnWndProc = MainWndProc;
  125. wc.lpszClassName =APPNAME;
  126. wc.hbrBackground =GetStockObject(BLACK_BRUSH);
  127. wc.hInstance = hInstance;
  128. wc.lpszMenuName = NULL;
  129. wc.hCursor = LoadCursor(NULL, IDC_ARROW);        
  130. wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
  131. if(!RegisterClass(&wc))
  132. {
  133. ErrMsg(NULL, "RegisterClass wnd_main failed!");
  134. return FALSE;                         
  135. }       
  136. if(!RegisterChilds()) return FALSE;
  137. if(!AppInit())
  138. {
  139. ErrMsg(NULL, "AppInit failed!");
  140. AppExit();
  141. return FALSE;
  142. }
  143. if(strstr(lpszCmdLine,"/T")!=NULL||strstr(lpszCmdLine,"/t")!=NULL)
  144. gfTest =TRUE;
  145. x =GetSystemMetrics(SM_CXSCREEN);
  146. y =GetSystemMetrics(SM_CYSCREEN) -GetSystemMetrics(SM_CYCAPTION)*2;
  147. hwnd =CreateWindow(APPNAME, APPNAME, WS_SYSMENU|WS_CLIPCHILDREN|
  148. WS_THICKFRAME|WS_MAXIMIZEBOX|WS_MINIMIZEBOX,
  149. 0, 0, x, y,
  150. NULL, NULL, hInstance, NULL);
  151. if(hwnd ==NULL)
  152. {
  153. ErrMsg(NULL, "建立主窗口失败!");
  154. return FALSE;
  155. }
  156. ghWndMain =hwnd;
  157. ShowWindow(hwnd, SW_SHOW);
  158. InvalidateRect(hwnd, NULL, FALSE);
  159. while(GetMessage(&msg, 0, 0, 0))
  160. {
  161. TranslateMessage(&msg);
  162. DispatchMessage(&msg);
  163. }
  164. AppExit();
  165. return msg.wParam;
  166. }
  167. void LoadPy(void)
  168. {
  169. OFSTRUCT os;
  170. HANDLE hf;
  171. long len;
  172. hf=OpenFile("winpy.dat", &os, OF_SHARE_DENY_NONE|OF_READ);
  173. if(hf!=HFILE_ERROR)
  174. {   
  175. if((len =_llseek(hf,0L,SEEK_END))>0L)
  176. {
  177. winpy = (char *)GlobalAllocPtr(GHND,len+1);
  178. if(winpy!=NULL)
  179. {
  180. _llseek(hf,0L,SEEK_SET);
  181. if(_lread(hf,winpy,(UINT)len)!=(UINT)len)
  182. {
  183. GlobalFreePtr(winpy);
  184. winpy =NULL;
  185. }
  186. }
  187. }
  188. }
  189. if(hf!=HFILE_ERROR) _lclose(hf);
  190. }
  191. BOOL AppInit(void)
  192. {
  193. FARPROC fpTemp =NULL;
  194. WinVer =LOBYTE(LOWORD(GetVersion()));
  195. if(WinVer <4)
  196. {
  197. hLibCtl3d =LoadLibrary("CTL3DV2.DLL");
  198. if((UINT)hLibCtl3d <=32)
  199. hLibCtl3d =LoadLibrary("CTL3D.DLL");
  200. if((UINT)hLibCtl3d >32)
  201. {
  202. fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dRegister");
  203. if(fpTemp)
  204. (*fpTemp)(ghInstance);
  205. fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dAutoSubclass");
  206. if(fpTemp)
  207. (*fpTemp)(ghInstance);
  208. }
  209. }
  210. ghMenuMain =LoadMenu(ghInstance, MAKEINTRESOURCE(IDR_MENU_MAIN));
  211. if(!ghMenuMain)
  212. {
  213. ErrMsg(NULL, "Load main menu failed!");
  214. return FALSE;
  215. }
  216. ghMenuHq =GetSubMenu(ghMenuMain, 0);
  217. ghMenuMainGraph =LoadMenu(ghInstance, MAKEINTRESOURCE(IDR_MENU_GRAPH));
  218. if(!ghMenuMainGraph)
  219. {
  220. ErrMsg(NULL, "Load graph menu failed!");
  221. return FALSE;
  222. }
  223. ghMenuGraph =GetSubMenu(ghMenuMainGraph, 0);
  224. hBmpUp =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_UP));
  225. hBmpDown =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_DOWN));
  226. hBmpEqual =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_EQUAL));
  227. if(!HqInit()) return FALSE;
  228. if(!JyInit()) return FALSE;
  229. if(!GraphInit()) return FALSE;
  230. if(!AnalyseInit()) return FALSE;
  231. if(PCTCPInit() !=0)
  232. {
  233. ErrMsg(NULL, "PCTCPInit() failed!");
  234. gfOnLine =FALSE;
  235. }
  236. IpSendBuffer = (char *)GlobalAllocPtr(GHND,MAX_WRITE_BUF_SIZE +1);
  237. if(IpSendBuffer ==NULL) return FALSE;
  238. IpCommitBuffer = (char *)GlobalAllocPtr(GHND,MAX_WRITE_BUF_SIZE +1);
  239. if(IpCommitBuffer ==NULL) return FALSE;
  240. GetSet();
  241. LoadPy();
  242. return TRUE;
  243. }
  244. void AppExit(void)
  245. {
  246. FARPROC fpTemp =NULL;
  247. static BOOL fExit =FALSE;
  248. if(fExit) return;
  249. fExit =TRUE;
  250. SaveSet();
  251. GraphExit();
  252. HqExit();
  253. JyExit();
  254. PCTCPExit();
  255. GlobalFreePtr(IpSendBuffer);
  256. GlobalFreePtr(IpCommitBuffer);
  257. FxExit(Fx);
  258. if(ghMenuMain) DestroyMenu(ghMenuMain);
  259. if(ghMenuMainGraph) DestroyMenu(ghMenuMainGraph);
  260. if(hBmpUp) DeleteObject(hBmpUp);
  261. if(hBmpDown) DeleteObject(hBmpDown);
  262. if(hBmpEqual) DeleteObject(hBmpEqual);
  263. if((UINT)hLibCtl3d >32)
  264. {
  265. fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dUnregister");
  266. if(fpTemp)
  267. (*fpTemp)(ghInstance);
  268. FreeLibrary(hLibCtl3d);
  269. }
  270. if(winpy!=NULL) GlobalFreePtr(winpy);
  271. }
  272. extern void ReadHqDataAll(void); 
  273. extern void WriteHqDataAll(void);
  274. extern void DelOldData(void);   
  275. extern void ReadHqData(int jys);
  276. LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message,
  277. WPARAM wParam, LPARAM lParam)
  278. {
  279. FARPROC lpFarProc=NULL;
  280. static int recNum =0;
  281. int i,ret,j;
  282. char temp[100+1];
  283. HDC hDC;
  284. TEXTMETRIC tm;
  285. STOCK_INFO_FRAME StockInfo;
  286. switch(message)
  287. {
  288. case WM_CREATE:
  289. ghWndMain =hWnd;
  290. ghDlgJy =NULL;
  291. hDC =GetDC(hWnd);
  292. GetTextMetrics(hDC, &tm);
  293. ReleaseDC(hWnd,hDC);
  294. STATUS_HEIGHT =30;
  295.             MSG_HEIGHT =tm.tmHeight+4;
  296. INPUT_WIDTH =tm.tmMaxCharWidth*10;
  297. if(!CreateChilds(hWnd)) 
  298. return -1;
  299. InvalidateRect(hWnd, NULL, FALSE);
  300. PostMessage(hWnd,WM_USER+4,0,0L);
  301. break;  
  302. case WM_USER+1:
  303. switch(lParam)
  304. {
  305. case FD_READ:
  306. AnaRecvData();
  307. break;
  308. case FD_CONNECT:
  309. gfConnecting=FALSE;
  310. gfOnLine =TRUE;
  311. if(UDP_Send_Hq00(0, TRUE, FALSE, FALSE, HqPaintData.curRecCount, &recNum)<0)
  312. {
  313. ErrMsg(ghWndMain, "不能请求行情数据");
  314. gfOnLine =FALSE;
  315. PostMessage(hWnd,WM_USER+3,0,0L);
  316. break;
  317. }
  318. SetTimer(hWnd, 1, 100, NULL);
  319. SetTimer(hWnd, 2, 1000*HQ_REFRESH_TIME, NULL);
  320. lpFarProc =MakeProcInstance((FARPROC)HqUserDlgProc, ghInstance);
  321. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_HQUSER),
  322. hWnd, lpFarProc);
  323. FreeProcInstance(lpFarProc);
  324. if(!gfOnLine)
  325. PostMessage(hWnd,WM_USER+3,0,0L);
  326. else
  327. {
  328. Msg("请求主机发送初始化数据",MSG_VERT);
  329. DelOldData();
  330. gfDelete=TRUE;
  331. gfOnLine=TRUE;
  332. }
  333. break;
  334. }
  335. break;
  336. case WM_USER+2:
  337. switch(lParam)
  338. {
  339. case FD_READ:
  340.     AnaJyRecvData();
  341. break;
  342. case FD_CONNECT:
  343. JyQs =SeleQs;
  344. DispQsName(JyQs,0);
  345. if(!ReadRsaCiper(JyQs,RsaKey,temp))
  346. {
  347. SendJyQsxx();
  348. RsaOk =0;
  349. }
  350. else
  351. {
  352. strncpy(DesKey,temp,8);
  353. DesKey[8]=0;
  354. RsaOk =1;
  355. DispQsName(JyQs,RsaOk);
  356. }
  357. break;
  358. }
  359. break;
  360. case WM_USER +3:
  361. gfConnecting=FALSE;
  362. ReadHqDataAll();
  363. if(ReCreateChild()!=0)
  364. return (-1);
  365. IsSzRead=IsShRead=TRUE;
  366. GetSelSet();
  367. SetTimer(hWnd, 1, 100, NULL);
  368. SetTimer(hWnd, 2, 1000*HQ_REFRESH_TIME, NULL);
  369. break;
  370. case WM_USER +4:
  371. gfOnLine =FALSE;
  372. gfConnecting=TRUE;            
  373. recNum =0;      
  374.             
  375.             if(BeginConnect(HostName)<0)
  376. {
  377. Msg("连接主机失败,系统进入离线状态",MSG_VERT);
  378. PostMessage(hWnd,WM_USER+3,0,0L);
  379. }
  380. else
  381. {
  382. sprintf(temp,"正在连接主机%s",HostName);
  383. Msg(temp,MSG_VERT);
  384. SetTimer(hWnd, 1, 15000, NULL);
  385. }
  386. break;
  387. case WM_USER +5:
  388. Msg("读取深圳初始化文件",MSG_VERT);
  389. ReadHqData(0);
  390. IsSzRead=TRUE;
  391. break;
  392. case WM_USER +6:
  393. Msg("读取上海初始化文件",MSG_VERT);
  394. ReadHqData(1);
  395. IsShRead=TRUE;
  396. InitQsInfo();
  397. GetSelSet();
  398. if(access("winpy.dat",0)!=0)
  399. {
  400.   StockInfo.type=FILE_WINPY;
  401. strcpy(StockInfo.name,"winpy.dat");
  402.     UDP_Send_Stock_Info(&StockInfo);
  403. }
  404. break;
  405. case WM_USER +7:
  406. LoadPy();
  407. break;
  408. case WM_SIZE:
  409.     CreateChilds(ghWndMain);
  410. break;
  411. case WM_SYSKEYDOWN:
  412. ret =toupper(wParam);
  413. switch(ret)
  414. {
  415.     case 'H':
  416. SendMessage(ghWndHq, WM_KEYDOWN,VK_F1, 0L);
  417.     break; 
  418.     case 'J':
  419. SendMessage(ghWndHq, WM_KEYDOWN,VK_F2, 0L);
  420.     break; 
  421. case 'R':
  422. SendMessage(ghWndXlt, WM_KEYDOWN,VK_F3, 0L);
  423. break;
  424. case 'A':
  425. SendMessage(ghWndHq, WM_KEYDOWN,VK_F4, 0L);
  426. break;
  427. case 'Z':
  428. SendMessage(ghWndHq, WM_KEYDOWN,VK_F5, 0L);
  429. break;
  430. case 'W':
  431. SendMessage(ghWndHq, WM_KEYDOWN,VK_F6, 0L);
  432. break;
  433. case 'S':
  434. SendMessage(ghWndHq, WM_KEYDOWN,VK_F7, 0L);
  435. break;
  436. case 'F':
  437. SendMessage(ghWndHq, WM_KEYDOWN,VK_F8, 0L);
  438. break;
  439. case 'E':
  440. SendMessage(ghWndHq, WM_KEYDOWN,VK_F9, 0L);
  441. break; 
  442. case 'G':
  443. SendMessage(ghWndHq, WM_KEYDOWN,VK_F12, 0L);
  444. break;
  445. case 'Q':
  446. SendMessage(hWnd, WM_CLOSE,0, 0L);
  447. break;
  448. case '1':
  449. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  450. gfTest)
  451.                      DlgBuySell('B');
  452. break;
  453. case '2':
  454. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  455. gfTest)
  456.                      DlgBuySell('S');
  457. break;
  458. case '3':
  459. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  460. gfTest)
  461.                      DlgCancel();
  462. break;
  463. case '4':
  464. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  465. gfTest)
  466.                      DlgCjcx();
  467. break;
  468. case '5':
  469. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  470. gfTest)
  471.                      DlgWtcx();
  472. break;
  473. case '6':
  474. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  475. gfTest)
  476.                      DlgYecx();
  477. break;
  478. case '7':
  479. if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)||
  480. gfTest)
  481.                      DlgChgPwd();
  482. break;
  483. }
  484. break;
  485. case WM_TIMER:
  486. if(wParam ==2 && gfOnLine)
  487. CheckTime(TRUE);
  488. if(wParam ==1)
  489. {   
  490. KillTimer(ghWndMain,1);
  491. if(gfConnecting &&!gfOnLine)
  492. {
  493. ErrMsg(hWnd, "连接主机失败,系统进入离线状态");
  494. PostMessage(hWnd,WM_USER+3,0,0L);
  495. }
  496. Ip_Send_Pack();
  497.     //if(JyOffLineTime>0)
  498.               // JyOffLineTime--;
  499.               //if(JyOffLineTime==0)
  500.               //{
  501.               // Msg("交易连接时间过长,系统复位",MSG_VERT);
  502.               //   curChkUsrRes.userId=0;
  503.               //} 
  504.              
  505.               //if(JyOffLineTime<10&&JyOffLineTime*(int)JyOffLineTime/2==JyOffLineTime
  506.               // &&JyOffLineTime>0)
  507.               // DrawTime(-2);
  508.               //else
  509. DrawTime(-1);
  510.               SetTimer(ghWndMain,1,400,NULL);
  511. }
  512. if(wParam ==6) DestroyWindow(hWnd);
  513. break;
  514. case WM_CHAR:
  515. if(ghWndSetup==NULL)
  516. {
  517. SendMessage(ghWndMsg, WM_CHAR, wParam, lParam);
  518. return 0;
  519. }
  520. break;
  521. case WM_KEYDOWN:
  522. if(wParam==VK_RETURN)
  523. {
  524. GetWindowText(hWndInput, inkey, sizeof(inkey));
  525.     ret =PreComm(inkey);
  526.     switch(ret)
  527.     {
  528.      case IP_CONN_COMM:
  529. strcpy(HostName,inkey);
  530. strcpy(inkey,"");
  531.      SendMessage(hWnd, WM_USER+4, 0, 0L);
  532.      SetWindowText(hWndInput, "");     
  533.      break;
  534. case NULL_COMM:     
  535.      case OP_CODE_COMM:
  536.      case GP_CODE_COMM:
  537. if(IsWindowVisible(ghWndFx))
  538. SendMessage(ghWndFx, WM_KEYDOWN, wParam, lParam);
  539. else if(IsWindowVisible(ghWndXlt))
  540. SendMessage(ghWndXlt, WM_KEYDOWN, wParam, lParam);
  541. else SendMessage(ghWndHq, WM_KEYDOWN, wParam, lParam);     
  542.      break;
  543.      case PY_NAME_COMM:
  544.      if(winpy==NULL)
  545.      break;
  546.      for(i=0;i<10;i++) SeleGp[i][0]=-1;
  547.     
  548. for(i =0,j=0; i<HqData[0].recCount&&j<MAX_SELE_NUM; i++)
  549. {
  550. strcpy(temp,HqData[0].lpPreData[i].zqmc);
  551. PreStockName(temp);
  552. if(IsPyOk(inkey,temp))
  553. {
  554. SeleGp[j][0]=0;
  555. SeleGp[j++][1]=i;
  556. }
  557. }
  558. for(i =0; i<HqData[1].recCount&&j<MAX_SELE_NUM; i++)
  559. {
  560. strcpy(temp,HqData[1].lpPreData[i].zqmc);
  561. PreStockName(temp);
  562. if(IsPyOk(inkey,temp))
  563. {
  564. SeleGp[j][0]=1;
  565. SeleGp[j++][1]=i;
  566. }
  567. }
  568. if(SeleGp[1][0]!=-1)
  569. {
  570. i=DlgSelectGp();
  571. if(i!=-1)
  572. if(SeleGp[i][0]!=-1)
  573. SetWindowText(hWndInput, HqData[SeleGp[i][0]].lpPreData[SeleGp[i][1]].zqdm);
  574. }
  575. else
  576. {
  577.   if(SeleGp[0][0]!=-1)
  578. SetWindowText(hWndInput, HqData[SeleGp[0][0]].lpPreData[SeleGp[0][1]].zqdm);
  579. }
  580. if(IsWindowVisible(ghWndFx))
  581. SendMessage(ghWndFx, WM_KEYDOWN, wParam, lParam);
  582. else if(IsWindowVisible(ghWndXlt))
  583. SendMessage(ghWndXlt, WM_KEYDOWN, wParam, lParam);
  584. else SendMessage(ghWndHq, WM_KEYDOWN, wParam, lParam);     
  585.      break;
  586.     }
  587.     strcpy(inkey,"");
  588.     SetWindowText(hWndInput, "");
  589. }
  590. else
  591. {
  592. if(IsWindowVisible(ghWndXlt))
  593. SendMessage(ghWndXlt, WM_KEYDOWN, wParam, lParam);
  594. else if(IsWindowVisible(ghWndFx))
  595. SendMessage(ghWndFx, WM_KEYDOWN, wParam, lParam);
  596. else SendMessage(ghWndHq, WM_KEYDOWN, wParam, lParam);
  597. }
  598. break;
  599. case WM_KILLFOCUS:
  600. if(IsWindowVisible(ghWndFx))
  601. SendMessage(ghWndFx, WM_KILLFOCUS, wParam, lParam);
  602. else SendMessage(ghWndXlt, WM_KILLFOCUS, wParam, lParam);
  603. break;
  604. case WM_CLOSE:
  605. if(MessageBox(hWnd, "您是否确定要退出?",APPNAME,
  606. MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_SYSTEMMODAL)
  607. ==IDNO)
  608. return 0L;
  609. UDP_Send_Exit();
  610. SetTimer(hWnd, 6, 1000,NULL);
  611. gfOnLine = FALSE;
  612. //DestroyWindow(hWnd);
  613. break;
  614. case WM_DESTROY:
  615. WriteHqDataAll();
  616. ghWndMain =NULL;
  617. KillTimer(hWnd, 1);
  618. KillTimer(hWnd, 2);
  619. KillTimer(hWnd, 5);
  620. KillTimer(hWnd, 6);
  621. PostQuitMessage(0);
  622. break;
  623. case WM_COMMAND:
  624. switch(wParam)
  625. {
  626. case IDM_ONLINE:
  627. SetHqEnv();
  628. break;
  629. case IDM_VIEW_TOOLBAR:
  630. if(IsWindowVisible(ghWndToolBar))
  631. {
  632.     ShowWindow(ghWndFx, SW_HIDE);
  633. ShowWindow(ghWndToolBar, SW_HIDE);
  634. ModifyMenu(ghMenuMain, IDM_VIEW_TOOLBAR, MF_STRING|MF_BYCOMMAND,
  635. IDM_VIEW_TOOLBAR, "显示工具条");
  636. TOOLBAR_HEIGHT=0;
  637. ReCreateChild();
  638. }
  639. else
  640. {
  641. ShowWindow(ghWndFx, SW_HIDE);
  642. ShowWindow(ghWndToolBar, SW_SHOW);
  643. ModifyMenu(ghMenuMain, IDM_VIEW_TOOLBAR, MF_STRING|MF_BYCOMMAND,
  644. IDM_VIEW_TOOLBAR, "隐藏工具条");
  645. TOOLBAR_HEIGHT=BUTTON_HEIGHT +12;
  646. ReCreateChild();
  647. }
  648. break;
  649. case IDM_HQ_SZ:
  650. case IDM_HQ_SH:
  651. case IDM_HQSEL_1:
  652. case IDM_HQSEL_2:
  653. case IDM_HQSEL_3:
  654. case IDM_HQSEL_4:
  655. case IDM_HQSEL_5:
  656. case IDM_GRAPH:
  657. SendMessage(ghWndHq, WM_COMMAND, wParam, 0L);
  658. break;
  659. case IDM_HQSEL_SET_1:
  660. case IDM_HQSEL_SET_2:
  661. case IDM_HQSEL_SET_3:
  662. case IDM_HQSEL_SET_4:
  663. case IDM_HQSEL_SET_5:
  664. lpFarProc =MakeProcInstance((FARPROC)HqSelDlgProc, ghInstance);
  665. DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_HQSEL_SET),
  666. hWnd, lpFarProc, (LPARAM)wParam);
  667. FreeProcInstance(lpFarProc);
  668. break;
  669. case IDM_HQ_FLD_SEL:
  670. lpFarProc =MakeProcInstance((FARPROC)HqFldSelDlgProc, ghInstance);
  671. DialogBox(ghInstance, MAKEINTRESOURCE(IDD_FLDSEL),
  672. hWnd, lpFarProc);
  673. FreeProcInstance(lpFarProc);
  674. break;
  675. //case IDM_SORT_REFRESH:
  676. // UDP_Client_Hq01(HqPaintData.jys, TRUE);
  677. //break;
  678. case IDM_JY:
  679. jy_running =TRUE;
  680. Jy();
  681. jy_running =FALSE;
  682. break;
  683. case IDM_MINIMIZE:
  684. ShowWindow(hWnd, SW_MINIMIZE);
  685. break;
  686. case IDM_FX:
  687. case IDM_FX_MACD:
  688. case IDM_FX_DMI:
  689. case IDM_FX_RSI:
  690. case IDM_FX_PSY:
  691. case IDM_FX_VR:
  692. case IDM_FX_OBV:
  693. case IDM_FX_BIAS:
  694. case IDM_FX_WR:
  695. case IDM_FX_KDJ:
  696. for(i=IDM_FX_MACD;i<=IDM_FX_KDJ;i++)
  697. {
  698.                      if(GetMenuState(ghMenuMain, i, MF_BYCOMMAND)&MF_CHECKED)
  699.                              break;
  700. }
  701. if((unsigned int)i!= wParam)
  702. {
  703. CheckMenuItem(ghMenuMain, i, MF_BYCOMMAND|MF_UNCHECKED);
  704. CheckMenuItem(ghMenuMain, wParam, MF_BYCOMMAND|MF_CHECKED);
  705. if(i<=IDM_FX_KDJ) Fx->type =i;
  706. else Fx->type =IDM_FX_MACD;
  707. }
  708. Fx->IsDataOk=FALSE;
  709.     SendMessage(ghWndHq,WM_KEYDOWN,VK_F9,0L);
  710. break;
  711. case IDM_FX_5:
  712. case IDM_FX_15:
  713. case IDM_FX_30:
  714. case IDM_FX_60:
  715. case IDM_FX_DAY:
  716. case IDM_FX_WEEK:
  717. case IDM_FX_MONTH:
  718. for(i=0;i<MONTH+1;i++)
  719. if(RANGE_MENU[i]==wParam) break;
  720. if(i<MONTH+1)
  721. {
  722. CheckMenuItem(ghMenuMain, wParam, MF_BYCOMMAND|MF_CHECKED);
  723. CheckMenuItem(ghMenuMain,RANGE_MENU[Fx->range], MF_BYCOMMAND|MF_UNCHECKED);
  724. Fx->range =i;
  725. }
  726. if(IsWindowVisible(ghWndFx))
  727. {
  728. Fx->IsDataOk=FALSE;
  729. InvalidateRect(ghWndFx, NULL, TRUE);
  730. }
  731. break;
  732. case IDM_NEWS:
  733.      SendMessage(ghWndHq,WM_KEYDOWN,VK_F12,0L);
  734. break;
  735. case IDM_HELP:
  736.      SendMessage(ghWndHq,WM_KEYDOWN,VK_F1,0L);
  737. break;
  738. case IDM_SZDP:
  739. SendMessage(ghWndHq, WM_COMMAND, IDM_GRAPH, 3L);
  740. break;
  741. case IDM_SHDP:
  742.     SendMessage(ghWndHq, WM_COMMAND, IDM_GRAPH, 4L);
  743. break;
  744. case IDM_GGXX:
  745.      SendMessage(ghWndHq,WM_KEYDOWN,VK_F3,0L);
  746. break;
  747. case IDM_EXIT:
  748. SendMessage(hWnd, WM_CLOSE, 0, 0L);
  749. break;
  750. default:
  751. if(IsWindowVisible(ghWndHq))
  752. SendMessage(ghWndHq, WM_COMMAND, wParam, lParam);
  753. //else if(IsWindowVisible(ghWndXlt))
  754. // SendMessage(ghWndXlt, WM_COMMAND, wParam, lParam);
  755.      else if(IsWindowVisible(ghWndFx))
  756. SendMessage(ghWndFx ,WM_COMMAND, wParam, lParam);
  757. break;
  758. }
  759. break;
  760. }
  761. return DefWindowProc(hWnd, message, wParam, lParam);
  762. }
  763. LRESULT CALLBACK HqSelDlgProc(HWND hDlg, UINT message,
  764. WPARAM wParam, LPARAM lParam)
  765. {
  766. int i, k;
  767. char tmp[256];
  768. static int SelNum;
  769. DWORD dw;
  770. HWND hctl;
  771. int sel_num[MAX_HQSEL_REC_COUNT+1];
  772. LPSTR tok;
  773. switch(message)
  774. {
  775. case WM_INITDIALOG:
  776. ghDlgJy =hDlg;
  777. SendMessage(hDlg,WM_USER+1,wParam,lParam);
  778. return TRUE;
  779. case WM_USER+1:
  780. SelNum =(int)lParam-IDM_HQSEL_SET_1;
  781. if(SelNum >=5)
  782. {
  783. EndDialog(hDlg, 0);
  784. return FALSE;
  785. }
  786. k =0;
  787. if(HqSelData[SelNum].recCount <=0)
  788. HqSelData[SelNum].jys =HqPaintData.jys;
  789. for(i =0; i<HqData[HqSelData[SelNum].jys].recCount; i++)
  790. {
  791. if(HqData[HqSelData[SelNum].jys].lpPreData[i].zqdm[0] ==0)
  792. continue;
  793. wsprintf(tmp, "%s-%d-%s",
  794. (LPSTR)HqData[HqSelData[SelNum].jys].lpPreData[i].zqdm,
  795. i, (LPSTR)HqData[HqSelData[SelNum].jys].lpPreData[i].zqmc);
  796. if(HqSelData[SelNum].recCount)
  797. {
  798. if(HqSelData[SelNum].recNum[k] ==i && k<HqSelData[SelNum].recCount)
  799. {
  800. SendDlgItemMessage(hDlg, IDL_SEL, LB_ADDSTRING,
  801. 0, (LPARAM)(LPSTR)tmp);
  802. k++;
  803. continue;
  804. }
  805. }
  806. SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_ADDSTRING,
  807. 0, (LPARAM)(LPSTR)tmp);
  808. }
  809. return TRUE;
  810. case WM_COMMAND:
  811. switch(wParam)
  812. {
  813. case IDC_ADD:
  814. dw =SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_GETSELCOUNT, 0, 0L);
  815. if(dw ==LB_ERR) break;
  816. if((int)dw >MAX_HQSEL_REC_COUNT)
  817. {
  818. wsprintf(tmp, "最大可选数量不能超过%d", MAX_HQSEL_REC_COUNT);
  819. ErrMsg(hDlg, tmp);
  820. break;
  821. }
  822. if(SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_GETSELITEMS, (int)dw,
  823. (LPARAM)(int FAR *)&sel_num[0]) ==LB_ERR)
  824. break;
  825. for(i =0; i<(int)dw; i++)
  826. {
  827. if(SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_GETTEXT, sel_num[i],
  828. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  829. {
  830. ErrMsg(hDlg, "Error LB_GETTEXT");
  831. break;
  832. }
  833. SendDlgItemMessage(hDlg, IDL_SEL, LB_ADDSTRING, i,
  834. (LPARAM)(LPSTR)tmp);
  835. }
  836. for(i =(int)dw -1; i>=0; i--)
  837. SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_DELETESTRING, sel_num[i], 0L);
  838. hctl =GetDlgItem(hDlg, IDOK);
  839. EnableWindow(hctl, TRUE);
  840. break;
  841.     
  842.     case IDC_DEL:
  843. dw =SendDlgItemMessage(hDlg, IDL_SEL, LB_GETSELCOUNT, 0, 0L);
  844. if(dw ==LB_ERR) break;
  845. if(SendDlgItemMessage(hDlg, IDL_SEL, LB_GETSELITEMS, (int)dw,
  846. (LPARAM)(int FAR *)&sel_num[0]) ==LB_ERR)
  847. break;
  848. for(i =0; i<(int)dw; i++)
  849. {
  850. if(SendDlgItemMessage(hDlg, IDL_SEL, LB_GETTEXT, sel_num[i],
  851. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  852. {
  853. ErrMsg(hDlg, "Error LB_GETTEXT");
  854. break;
  855. }
  856. SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_ADDSTRING, i,
  857. (LPARAM)(LPSTR)tmp);
  858. }
  859. for(i =(int)dw -1; i>=0; i--)
  860. SendDlgItemMessage(hDlg, IDL_SEL, LB_DELETESTRING, sel_num[i], 0L);
  861. hctl =GetDlgItem(hDlg, IDOK);
  862. EnableWindow(hctl, TRUE);
  863. break;
  864.     
  865. case IDOK:
  866. k =(int)SendDlgItemMessage(hDlg, IDL_SEL, LB_GETCOUNT, 0, 0L);
  867. if(k >MAX_HQSEL_REC_COUNT)
  868. {
  869. wsprintf(tmp, "最大可选数量不能超过%d", MAX_HQSEL_REC_COUNT);
  870. ErrMsg(hDlg, tmp);
  871. break;
  872. }
  873. for(i =0; i<k; i++)
  874. {
  875. if(SendDlgItemMessage(hDlg, IDL_SEL, LB_GETTEXT, i,
  876. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  877. {
  878. ErrMsg(hDlg, "get list text failed!");
  879. break;
  880. }
  881. tok =strtok(tmp, "-");
  882. if(!tok)
  883. break;
  884. else tok =strtok(NULL, "-");
  885. if(!tok) break;
  886. HqSelData[SelNum].recNum[i] =atoi(tok);
  887. }
  888. HqSelData[SelNum].recCount =i;
  889. if(HqPaintData.type ==SelNum+2)
  890. SendMessage(ghWndHq, WM_HQSEL_RESET, SelNum+2, 0L);
  891. case IDCANCEL:
  892. EndDialog(hDlg, 0);
  893. ghDlgJy =NULL;
  894. break;
  895. break;
  896. }
  897. }
  898. return FALSE;
  899. LRESULT CALLBACK HqFldSelDlgProc(HWND hDlg, UINT message,
  900. WPARAM wParam, LPARAM lParam)
  901. {
  902. int i, j;
  903. char tmp[256];
  904. DWORD dw;
  905. HWND hctl;
  906. LPSTR tok;
  907. switch(message)
  908. {
  909. case WM_INITDIALOG:
  910. ghDlgJy =hDlg;
  911. for(i =0; i<HqPaintData.fldCount; i++)
  912. {
  913. wsprintf(tmp, "%d-%s", HqPaintData.fldNum[i],
  914. HqTitles[HqPaintData.fldNum[i]]);
  915. SendDlgItemMessage(hDlg, IDL_SEL, LB_ADDSTRING,
  916. 0, (LPARAM)(LPSTR)tmp);
  917. }
  918. for(i =0; i<HQ_FLDS_COUNT+1; i++)
  919. {
  920. wsprintf(tmp, "%d-%s", i, HqTitles[i]);
  921. for(j =0; j<HqPaintData.fldCount; j++)
  922. {
  923. if(HqPaintData.fldNum[j] ==i)
  924. break;
  925. }
  926. if(j ==HqPaintData.fldCount)
  927. SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_ADDSTRING,
  928. 0, (LPARAM)(LPSTR)tmp);
  929. }
  930. return TRUE;
  931. /*case WM_CTLCOLOR:
  932. SetBkMode((HDC)wParam, TRANSPARENT);
  933. if(HIWORD(lParam) == CTLCOLOR_LISTBOX)
  934. return (LRESULT)DrawChild((HDC)wParam, (HWND)LOWORD(lParam));
  935. return (LRESULT)(HBRUSH)GetStockObject(LTGRAY_BRUSH);
  936. break;
  937. case WM_NCACTIVATE:
  938. if(WinVer >3) break;
  939. DrawDlgFrame(hDlg, (BOOL)wParam, 1);
  940. return TRUE;
  941. case WM_NCPAINT:
  942. if(WinVer >3) break;
  943. DrawDlgFrame(hDlg, -1, 0);
  944. return TRUE;   
  945.     */
  946. case WM_COMMAND:
  947. switch(wParam)
  948. {
  949. case IDC_ADD:
  950. dw =SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_GETCURSEL, 0, 0L);
  951. if(dw ==LB_ERR) break;
  952. i =(int)dw;
  953. if(SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_GETTEXT, i,
  954. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  955. {
  956. ErrMsg(hDlg, "Error LB_GETTEXT");
  957. break;
  958. }
  959. SendDlgItemMessage(hDlg, IDL_SEL, LB_ADDSTRING, i,
  960. (LPARAM)(LPSTR)tmp);
  961. SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_DELETESTRING, i, 0L);
  962. hctl =GetDlgItem(hDlg, IDOK);
  963. EnableWindow(hctl, TRUE);
  964. break;
  965.     
  966.     case IDC_DEL:
  967. dw =SendDlgItemMessage(hDlg, IDL_SEL, LB_GETCURSEL, 0, 0L);
  968. if(dw ==LB_ERR) break;
  969. i =(int)dw;
  970. if(SendDlgItemMessage(hDlg, IDL_SEL, LB_GETTEXT, i,
  971. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  972. {
  973. ErrMsg(hDlg, "Error LB_GETTEXT");
  974. break;
  975. }
  976. SendDlgItemMessage(hDlg, IDL_NOTSEL, LB_ADDSTRING, i,
  977. (LPARAM)(LPSTR)tmp);
  978. SendDlgItemMessage(hDlg, IDL_SEL, LB_DELETESTRING, i, 0L);
  979. hctl =GetDlgItem(hDlg, IDOK);
  980. EnableWindow(hctl, TRUE);
  981. break;
  982.     
  983. case IDOK:
  984. j =(int)SendDlgItemMessage(hDlg, IDL_SEL, LB_GETCOUNT, 0, 0L);
  985. for(i =0; i<j; i++)
  986. {
  987. if(SendDlgItemMessage(hDlg, IDL_SEL, LB_GETTEXT, i,
  988. (LPARAM)(LPSTR)tmp) ==LB_ERR)
  989. {
  990. ErrMsg(hDlg, "get list text failed!");
  991. break;
  992. }
  993. tok =strtok(tmp, "-");
  994. if(!tok) break;
  995. HqPaintData.fldNum[i] =atoi(tok);
  996. }
  997. HqPaintData.fldCount =i;
  998. if(IsWindowVisible(ghWndHq))
  999. SendMessage(ghWndHq, WM_USER +1, 0, 0L);
  1000. case IDCANCEL:
  1001. EndDialog(hDlg, 0);
  1002. ghDlgJy =NULL;
  1003. break;
  1004. break;
  1005. }
  1006. }
  1007. return FALSE;
  1008. }
  1009. extern void WriteMsg(LPSTR);
  1010. BOOL ErrMsg(HWND hWnd, LPSTR msg)
  1011. {
  1012. char tmp[256];
  1013. HWND hwnd;
  1014. WriteMsg(msg);
  1015. if(strlen(msg)>=250) *(msg+250) =0;
  1016. wsprintf(tmp, "错误: %s", msg);
  1017. if(ghDlgJy) hwnd =ghDlgJy;
  1018. else if(hwnd ==NULL) hwnd =ghWndMain;
  1019. else hwnd =hWnd;
  1020. MessageBox(hwnd, tmp, APPNAME, MB_OK|MB_ICONSTOP);
  1021. return FALSE;
  1022. }
  1023. BOOL GetInitString(char *Entry, char *Item, char *buf)
  1024. {
  1025. GetPrivateProfileString(Entry, Item, "", buf, 256, "st_cl.ini");
  1026. if(*buf ==0) return FALSE;
  1027. return TRUE;
  1028. }
  1029. BOOL PutInitString(char *Entry, char *Item, char *buf)
  1030. {
  1031. return WritePrivateProfileString(Entry, Item, buf, "st_cl.ini");
  1032. }
  1033. int CheckTime(BOOL fRead)
  1034. {
  1035. char tmp[15];
  1036. LPSTR tok;
  1037. int tim, jys;
  1038. static int recNum =0;
  1039. BOOL fret =FALSE;
  1040. _strtime(tmp);
  1041. tok =strtok(tmp, ":");
  1042. tim =atoi(tok)*60;
  1043. tim +=atoi(strtok(NULL, ":"));
  1044. tim -=1;
  1045. for(jys =0; jys <2; jys++)
  1046. {
  1047. if(tim <HqTime[jys].am_min_start
  1048. || tim >HqTime[jys].pm_min_start+HqTime[jys].pm_min_count
  1049. || (tim <HqTime[jys].pm_min_start 
  1050. && tim >HqTime[jys].am_min_start+HqTime[jys].am_min_count))
  1051. {
  1052. //if(HqTime[jys].fRunning ==TRUE)
  1053. //HqTime[jys].fRunning =FALSE;
  1054. }
  1055. else if(HqTime[jys].fRunning ==FALSE)
  1056. {
  1057. HqTime[jys].fRunning =TRUE;     
  1058. if(fRead)
  1059. {
  1060.     //if(!gfConnecting&&gfOnLine)
  1061.     //{
  1062. // if(UDP_Send_Hq00(0, TRUE, FALSE, FALSE, HqPaintData.curRecCount, &recNum)<0)
  1063. // {
  1064. // ErrMsg(ghWndMain, "UDP_Send_Hq00 failed");
  1065. // DestroyWindow(ghWndMain);
  1066. // return FALSE;
  1067. // }
  1068. //}
  1069. fret =TRUE;
  1070. }
  1071. }
  1072. }
  1073. return fret;
  1074. }
  1075. int SaveSet(void)
  1076. {
  1077. int i, j;
  1078. char tmp[6000], tmp1[256];
  1079. for(i =0; i<5; i++)
  1080. {
  1081. sprintf(tmp, "%d,%d", HqSelData[i].jys, HqSelData[i].recCount);
  1082. for(j =0; j<HqSelData[i].recCount; j++)
  1083. {
  1084. //HqData[HqSelData[i].jys].lpPreData[j].zqdm
  1085. //sprintf(&tmp[strlen(tmp)], ",%d", HqSelData[i].recNum[j]);
  1086. sprintf(&tmp[strlen(tmp)], ",%s", HqData[HqSelData[i].jys].lpPreData[HqSelData[i].recNum[j]].zqdm);
  1087. }
  1088. sprintf(tmp1, "HQSEL%d", i);
  1089. PutInitString("HQSEL", tmp1, tmp);
  1090. }
  1091. sprintf(tmp, "%d", HqPaintData.fldCount);
  1092. for(i =0; i<HqPaintData.fldCount; i++)
  1093. {
  1094. sprintf(&tmp[strlen(tmp)], ",%d", HqPaintData.fldNum[i]);
  1095. }
  1096. PutInitString("HQ", "FLDS", tmp);
  1097. return 0;
  1098. }
  1099. int GetSet(void)
  1100. {
  1101. int i ;//, j;
  1102. char tmp[1000]; //, tmp1[20];
  1103. LPSTR tok;
  1104.         
  1105. /*        
  1106. for(i =0; i<5; i++)
  1107. {
  1108. sprintf(tmp1, "HQSEL%d", i);
  1109. if(!GetInitString("HQSEL", tmp1, tmp))
  1110. {
  1111. HqSelData[i].recCount =0;
  1112. continue;
  1113. }
  1114. if(!(tok =strtok(tmp, ","))) continue;;
  1115. HqSelData[i].jys =atoi(tok);
  1116. if(HqSelData[i].jys <0) HqSelData[i].jys =0;
  1117. if(HqSelData[i].jys >=2) HqSelData[i].jys =1;
  1118. if(!(tok =strtok(NULL, ","))) continue;
  1119. HqSelData[i].recCount =atoi(tok);
  1120. for(j =0; j<HqSelData[i].recCount; j++)
  1121. {
  1122. if(!(tok =strtok(NULL, ","))) break;
  1123. HqSelData[i].recNum[j] =atoi(tok);
  1124. }
  1125. HqSelData[i].recCount =j;
  1126. }
  1127. */
  1128. if(!GetInitString("HQ", "FLDS", tmp))
  1129. {
  1130. HqPaintData.fldCount =0;
  1131. return 0;
  1132. }
  1133. if(!(tok =strtok(tmp, ",")))
  1134. {
  1135. HqPaintData.fldCount =0;
  1136. return 0;
  1137. }
  1138. HqPaintData.fldCount =atoi(tok);
  1139. for(i =0; i<HqPaintData.fldCount; i++)
  1140. {
  1141. if(!(tok =strtok(NULL, ","))) break;
  1142. HqPaintData.fldNum[i] =atoi(tok);
  1143. }
  1144. HqPaintData.fldCount =i;
  1145. return 0;
  1146. }
  1147. int GetSelSet(void)
  1148. {
  1149. int i, j,k;
  1150. char tmp[6000], tmp1[20];
  1151. LPSTR tok;
  1152. for(i =0; i<5; i++)
  1153. {
  1154. sprintf(tmp1, "HQSEL%d", i);
  1155. if(!GetInitString("HQSEL", tmp1, tmp))
  1156. {
  1157. HqSelData[i].recCount =0;
  1158. continue;
  1159. }
  1160. if(!(tok =strtok(tmp, ","))) continue;;
  1161. HqSelData[i].jys =atoi(tok);
  1162. if(HqSelData[i].jys <0) HqSelData[i].jys =0;
  1163. if(HqSelData[i].jys >=2) HqSelData[i].jys =1;
  1164. if(!(tok =strtok(NULL, ","))) continue;
  1165. HqSelData[i].recCount =atoi(tok);
  1166. for(j =0; j<HqSelData[i].recCount; j++)
  1167. {
  1168. if(!(tok =strtok(NULL, ","))) break;
  1169. HqData[HqSelData[i].jys].lpPreData[HqSelData[i].recNum[j]].zqdm;
  1170. for(k=0;k<HqData[HqSelData[i].jys].recCount;k++)
  1171. {
  1172. if(strncmp(tok,HqData[HqSelData[i].jys].lpPreData[k].zqdm,
  1173. strlen(tok))==0)
  1174. break;
  1175. }     
  1176. if(k<HqData[HqSelData[i].jys].recCount)
  1177. HqSelData[i].recNum[j] =k;
  1178. else
  1179. continue;
  1180. }
  1181. HqSelData[i].recCount =j;
  1182. }
  1183. return 0;
  1184. }
  1185. BOOL RegisterChilds(void)
  1186. {
  1187. if(!RegisterHq())
  1188. {
  1189. ErrMsg(NULL, "Error Register HQ");
  1190. return FALSE;
  1191. }
  1192. if(!RegisterXlt())
  1193. {
  1194. ErrMsg(NULL, "Error Register JgGraph");
  1195. return FALSE;
  1196. }
  1197. if(!RegisterJlt())
  1198. {
  1199. ErrMsg(NULL, "Error Register JltGraph");
  1200. return FALSE;
  1201. }
  1202. if(!RegisterStatus())
  1203. {
  1204. ErrMsg(NULL, "Error Register Status");
  1205. return FALSE;
  1206. }
  1207. if(!RegisterCaption())
  1208. {
  1209. ErrMsg(NULL, "Error Register Caption");
  1210. return FALSE;
  1211. }
  1212. if(!RegisterMmp())
  1213. {
  1214. ErrMsg(NULL, "Error Register Mmp");
  1215. return FALSE;
  1216. }
  1217. if(!RegisterCj())
  1218. {
  1219. ErrMsg(NULL, "Error Register Cj");
  1220. return FALSE;
  1221. }
  1222. if(!RegisterLitHq())
  1223. {
  1224. ErrMsg(NULL, "Error Register LitHq");
  1225. return FALSE;
  1226. }
  1227. if(!RegisterMaxMin())
  1228. {
  1229. ErrMsg(NULL, "Error Register LitHq");
  1230. return FALSE;
  1231. }
  1232. if(!RegisterZs())
  1233. {
  1234. ErrMsg(NULL, "Error Register Zs");
  1235. return FALSE;
  1236. }
  1237.     if(!RegisterFx())
  1238. {
  1239. ErrMsg(NULL, "Error Register Fx");
  1240. return FALSE;
  1241. }
  1242.     if(!RegisterToolBar())
  1243. {
  1244. ErrMsg(NULL, "Error Register ToolBar");
  1245. return FALSE;
  1246. }
  1247. if(!RegisterHelp())
  1248. {
  1249. ErrMsg(NULL, "Error Register Help");
  1250. return FALSE;
  1251. }
  1252. if(!RegisterMsg())
  1253. {
  1254. ErrMsg(NULL, "Error Register Msg");
  1255. return FALSE;
  1256. }
  1257. return TRUE;    
  1258. }
  1259. BOOL CreateChilds(HWND hWnd)
  1260. {
  1261. if(!CreateWndHq(hWnd))
  1262. {
  1263. ErrMsg(hWnd, "CreateWndHq failed!");
  1264. return FALSE;
  1265. }
  1266. if(!CreateWndStatus(hWnd))
  1267. {
  1268. ErrMsg(hWnd, "CreateWndStatus failed!");
  1269. return FALSE;
  1270. }
  1271. if(!CreateWndCaption(hWnd))
  1272. {
  1273. ErrMsg(hWnd, "CreateWndCaption failed!");
  1274. return FALSE;
  1275. }
  1276. if(!CreateWndXlt(hWnd))
  1277. {
  1278. ErrMsg(hWnd, "CreateWndXlt failed!");
  1279. return FALSE;
  1280. }
  1281. if(!CreateWndJlt(hWnd))
  1282. {
  1283. ErrMsg(hWnd, "CreateWndJlt failed!");
  1284. return FALSE;
  1285. }
  1286. if(!CreateWndMmp(hWnd))
  1287. {
  1288. ErrMsg(hWnd, "CreateWndMmp failed!");
  1289. return FALSE;
  1290. }
  1291. if(!CreateWndCj(hWnd))
  1292. {
  1293. ErrMsg(hWnd, "CreateWndCj failed!");
  1294. return FALSE;
  1295. }
  1296. if(!CreateWndLitHq(hWnd))
  1297. {
  1298. ErrMsg(hWnd, "CreateWndLitHq failed!");
  1299. return FALSE;
  1300. }
  1301. if(!CreateWndMaxMin(hWnd))
  1302. {
  1303. ErrMsg(hWnd, "CreateWndMaxMin failed!");
  1304. return FALSE;
  1305. }
  1306. if(!CreateWndZs(hWnd))
  1307. {
  1308. ErrMsg(hWnd, "CreateWndZs failed!");
  1309. return FALSE;
  1310. }
  1311.     if(!CreateWndFx(hWnd))
  1312. {
  1313. ErrMsg(hWnd, "CreateWndFx failed!");
  1314. return FALSE;
  1315.     }
  1316.     if(!CreateToolBar(hWnd))
  1317. {
  1318. ErrMsg(hWnd, "CreateWnd ToolBar failed!");
  1319. return FALSE;
  1320.     }
  1321.     if(!CreateWndHelp(hWnd))
  1322. {
  1323. ErrMsg(hWnd, "CreateWnd Help!");
  1324. return FALSE;
  1325.     }
  1326.     if(!CreateWndMsg(hWnd))
  1327. {
  1328. ErrMsg(hWnd, "CreateWnd Msg!");
  1329. return FALSE;
  1330.     }
  1331. return TRUE;
  1332. }
  1333. void PASCAL ShowBmp(HDC hDC,HBITMAP hBmp,int left,int top,int width,int height)
  1334. {
  1335.   HDC hMemDC = CreateCompatibleDC(hDC);
  1336.   
  1337.   if(hBmp)
  1338.   {
  1339.     SelectObject(hMemDC,hBmp);
  1340.     BitBlt(hDC,left,top,width,height,hMemDC,0,0,SRCCOPY);
  1341.   }         
  1342.   DeleteObject(hMemDC);
  1343. }
  1344. void PASCAL ShowBmp1(HDC hDC,HBITMAP hBmp,int left,int top,int width,int height)
  1345. {
  1346.   BITMAP bmp;
  1347.   HDC hMemDC = CreateCompatibleDC(hDC);
  1348.   
  1349.   GetObject(hBmp, sizeof(BITMAP), &bmp);
  1350.   if(hBmp)
  1351.   {
  1352.     SelectObject(hMemDC,hBmp);
  1353.     StretchBlt(hDC,left,top,width,height,hMemDC,0,0,
  1354. bmp.bmWidth, bmp.bmHeight,SRCCOPY);
  1355.   }         
  1356.   DeleteObject(hMemDC);
  1357. }
  1358. LRESULT CALLBACK HelpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  1359. BOOL RegisterHelp(void)
  1360. {
  1361. WNDCLASS wc;
  1362. memset(&wc, 0, sizeof(wc));
  1363. wc.style =CS_HREDRAW | CS_VREDRAW;
  1364. wc.lpfnWndProc =HelpWndProc;
  1365. wc.lpszClassName ="HELP";
  1366. wc.hbrBackground =GetStockObject(BLACK_BRUSH);
  1367. wc.hInstance = ghInstance;
  1368. wc.lpszMenuName = NULL;
  1369. wc.hCursor = LoadCursor(NULL, IDC_ARROW);        
  1370. wc.hIcon = LoadIcon(ghInstance, MAKEINTRESOURCE(IDR_MAINFRAME));
  1371. if(!RegisterClass(&wc)) return FALSE;
  1372. return TRUE;
  1373. }
  1374. int LoadFile(char *filename,int sline,char *title)
  1375. {
  1376.     static char infile[80];
  1377.     ShowWindow(ghWndHelp,SW_SHOW);
  1378.     SetFocus(ghWndHelp);
  1379. if(strlen(filename)!=0)
  1380. {
  1381.      strcpy(infile,filename);
  1382.      SendMessage(ghWndHelp,WM_USER+2,(UINT)sline,(LPARAM)filename);
  1383.     }
  1384.     if(strlen(title)!=0)
  1385.      SetWindowText(ghWndHelp,title);
  1386.  
  1387.     return 1;
  1388. }
  1389. #define MAX_LINE_CHARS 200
  1390. #define MAX_DISP_LINE 300
  1391. char *PageBuff[MAX_DISP_LINE];
  1392. int LoadPage(char *filename,int lstart,int lnum)
  1393. {
  1394.     
  1395.     FILE *fp;
  1396.     int i,j=0;
  1397.     char line[MAX_LINE_CHARS+1];
  1398.     
  1399. fp=fopen(filename,"rt");
  1400. if(fp==NULL)  return -1;
  1401. if(lnum ==0) lnum =MAX_DISP_LINE;
  1402.     for(i=0;i<lstart+lnum;i++)
  1403.     {
  1404.      if(fgets(line,MAX_LINE_CHARS,fp)==NULL)
  1405.      break;
  1406.      if(i<lstart) continue;
  1407.      if(PageBuff[j] ==NULL)
  1408.      PageBuff[j] =(char *)GlobalAllocPtr(GHND,MAX_LINE_CHARS*sizeof(char));
  1409.      if(PageBuff[j]==NULL)
  1410.      break;
  1411.      memset(PageBuff[j],' ',MAX_LINE_CHARS);
  1412.      strcpy(PageBuff[j++],line);
  1413.     }
  1414. fclose(fp);
  1415.     return j;
  1416. }
  1417. extern int UDP_Send_Stock_Info(STOCK_INFO_FRAME *StockInfoFrame);
  1418. LRESULT CALLBACK HelpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  1419. {
  1420. PAINTSTRUCT ps;
  1421. RECT rc;
  1422. static char file[256];
  1423. static int sline=0,
  1424.    TolNum=0,
  1425.    minRange,maxRange,step,LinePerScr,CurSor=0;
  1426. int pos;
  1427.     char line[256];
  1428.     int i,j;
  1429.     STOCK_INFO_FRAME StockInfo;
  1430.     HDC hdc;
  1431.     TEXTMETRIC tm;
  1432. static int FontHeight;
  1433. switch(message)
  1434. {
  1435. case WM_CREATE:
  1436. hdc =GetDC(hWnd);
  1437. SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
  1438. GetTextMetrics(hdc, &tm);
  1439. FontHeight =tm.tmHeight;
  1440. FontHeight +=FontHeight*15/100;
  1441. ReleaseDC(hWnd, hdc);
  1442. SetScrollRange(hWnd,SB_VERT,0,5000,TRUE);
  1443. GetScrollRange(hWnd,SB_VERT,&minRange,&maxRange);
  1444. GetClientRect(hWnd, &rc);
  1445. LinePerScr  =(rc.bottom -rc.top)/FontHeight;
  1446. memset(PageBuff,0,sizeof(char *)*MAX_DISP_LINE);
  1447. break;
  1448. case WM_SIZE:
  1449. GetClientRect(hWnd, &rc);
  1450. LinePerScr  =(rc.bottom -rc.top)/FontHeight;
  1451. if(TolNum>0)
  1452. step = maxRange/TolNum;
  1453. break;
  1454. case WM_USER+2:
  1455. strcpy(file,(LPSTR)lParam);
  1456. TolNum=sline =CurSor=0;
  1457. TolNum =LoadPage(file,sline,0);
  1458. if(TolNum>0) 
  1459. {
  1460. step = maxRange/TolNum;
  1461. InvalidateRect(ghWndHelp, NULL, TRUE);
  1462. }
  1463. else
  1464. SetTimer(hWnd,1,1000,NULL);
  1465. break;
  1466. case WM_VSCROLL:
  1467. pos=GetScrollPos(hWnd,SB_VERT);
  1468. if(wParam==SB_BOTTOM)
  1469. sline=TolNum -1;
  1470. if(wParam==SB_LINEDOWN)
  1471. if(sline<TolNum) sline++;
  1472. if(wParam==SB_PAGEDOWN)
  1473. if(sline+LinePerScr<=TolNum) sline+=LinePerScr;
  1474. if(wParam==SB_PAGEUP)
  1475. {
  1476. if(sline -LinePerScr>=0) 
  1477. sline -=LinePerScr;
  1478. else 
  1479. sline=0;
  1480. }
  1481. if(wParam==SB_LINEUP) if(sline>0) sline--;
  1482. if(wParam==SB_TOP) sline=0;
  1483. pos=step*sline ;
  1484. SetScrollPos(hWnd,SB_VERT,pos,TRUE);
  1485. InvalidateRect(ghWndHelp, NULL, TRUE);
  1486. break;
  1487. case WM_KEYDOWN:
  1488. if(wParam==VK_ESCAPE)
  1489. {
  1490. SetScrollPos(hWnd,SB_VERT,0,TRUE);
  1491. ShowWindow(hWnd,SW_HIDE);
  1492. KillTimer(hWnd,1);
  1493. for(i=0;i<TolNum;i++) 
  1494. {
  1495. GlobalFreePtr(PageBuff[i]);
  1496. PageBuff[i] =NULL;
  1497. }
  1498. TolNum=sline =CurSor=0;
  1499. break;
  1500. }
  1501. pos=GetScrollPos(hWnd,SB_VERT);
  1502. if(wParam==VK_UP)
  1503. {   
  1504. if(TolNum>0)
  1505. {
  1506. hdc =GetDC(hWnd);
  1507. SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
  1508. SetBkColor(hdc, RGB(0, 0, 0));
  1509. SetTextColor(hdc, RGB(10,150,100));
  1510. TextOut(hdc,2,CurSor*FontHeight,PageBuff[sline+CurSor],
  1511. strlen(PageBuff[sline+CurSor])-1);
  1512.   if(CurSor>0) CurSor--; 
  1513. SetTextColor(hdc, RGB(0,255,255));
  1514. TextOut(hdc,2,CurSor*FontHeight,PageBuff[sline+CurSor],
  1515. strlen(PageBuff[sline+CurSor])-1);
  1516.   ReleaseDC(hWnd,hdc);
  1517.   }
  1518.   break;
  1519. }
  1520. if(wParam==VK_DOWN) 
  1521. {   
  1522. if(TolNum>0)
  1523. {
  1524. hdc =GetDC(hWnd);
  1525. SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
  1526. SetBkColor(hdc, RGB(0, 0, 0));
  1527. SetTextColor(hdc, RGB(10,150,100));
  1528. TextOut(hdc,2,CurSor*FontHeight,PageBuff[sline+CurSor],
  1529. strlen(PageBuff[sline+CurSor])-1);
  1530. if(CurSor<LinePerScr &&CurSor +sline <TolNum-1) 
  1531. CurSor++;
  1532. SetTextColor(hdc, RGB(0,255,255));
  1533. TextOut(hdc,2,CurSor*FontHeight,PageBuff[sline+CurSor],
  1534. strlen(PageBuff[sline+CurSor])-1);
  1535.   ReleaseDC(hWnd,hdc);
  1536. }
  1537. break;
  1538. }
  1539. if(wParam==VK_NEXT)
  1540. {   
  1541. if(TolNum>0)
  1542. {
  1543. CurSor =0;
  1544. if(sline+LinePerScr<TolNum)
  1545. sline+=LinePerScr;
  1546. else
  1547. {
  1548. sline =TolNum -LinePerScr -1;
  1549. if(sline <0) sline =0;
  1550. }
  1551. }
  1552. }
  1553. if(wParam==VK_PRIOR)
  1554. {
  1555. if(TolNum>0)
  1556. {
  1557. CurSor =LinePerScr -1;
  1558. if(sline -LinePerScr>=0) 
  1559. sline -=LinePerScr;
  1560. else 
  1561. sline=0;
  1562. }
  1563. }
  1564. if(wParam ==VK_RETURN)
  1565. {   
  1566. if(TolNum>0)
  1567. {
  1568. if(strstr(strupr(file),"IDX")!=NULL)
  1569.         {
  1570. StockInfo.type= 2;
  1571. strncpy(line,PageBuff[sline+CurSor],12);
  1572. line[12] =0;
  1573. for(i=0;i<12;i++)
  1574. {
  1575. if(line[i]!=' ') break;
  1576. }
  1577. if(i<12)
  1578. {
  1579. strcpy(StockInfo.name,&line[i]);
  1580.      sprintf(file,"%s\%s",szDataPath,&line[i]);
  1581.      TolNum=sline =CurSor=0;
  1582.      UDP_Send_Stock_Info(&StockInfo);
  1583.      SetTimer(hWnd,1,3000,NULL);
  1584.      }
  1585.      }
  1586.     }
  1587. }
  1588. pos=step*sline ; 
  1589. SetScrollPos(hWnd,SB_VERT,pos,TRUE);
  1590. InvalidateRect(ghWndHelp, NULL, TRUE);
  1591. break;
  1592. case WM_TIMER:
  1593. KillTimer(hWnd,1);
  1594. TolNum =LoadPage(file,sline,0);
  1595. if(TolNum>0) 
  1596. {
  1597. step = maxRange/TolNum;
  1598. InvalidateRect(ghWndHelp, NULL, TRUE);
  1599. }
  1600. else
  1601. SetTimer(hWnd,1,1000,NULL);
  1602. break;
  1603. //case WM_KILLFOCUS:
  1604. // KillTimer(hWnd,1);
  1605. //break;
  1606. case WM_PAINT:
  1607. BeginPaint(hWnd, &ps);
  1608. SelectObject(ps.hdc,GetStockObject(SYSTEM_FIXED_FONT));
  1609. SetBkColor(ps.hdc, RGB(0, 0, 0));
  1610.      for(i=sline,j=0;i<TolNum&&i<=LinePerScr+sline;i++,j++)
  1611.      {
  1612.      memset(line,' ',256);
  1613.      TextOut(ps.hdc,2,j*FontHeight,line,256);
  1614.     
  1615.      if(j==CurSor)
  1616.      SetTextColor(ps.hdc, RGB(0,255,255));
  1617.      else
  1618.      SetTextColor(ps.hdc, RGB(10,150,100));
  1619.      TextOut(ps.hdc,2,j*FontHeight,PageBuff[i],strlen(PageBuff[i])-1);
  1620.      }
  1621. EndPaint(hWnd, &ps);
  1622. break;
  1623. case WM_DESTROY:
  1624. KillTimer(hWnd,1);
  1625. break;
  1626. default:
  1627. break;
  1628. }
  1629. return DefWindowProc(hWnd, message, wParam, lParam);
  1630. }
  1631. BOOL CreateWndHelp(HWND hWnd)
  1632. {                          
  1633. int x ;
  1634. HWND hwnd;
  1635. RECT rc;
  1636. GetClientRect(ghWndMain, &rc);
  1637. x =GetSystemMetrics(SM_CXSCREEN);
  1638. if(ghWndHelp ==NULL)
  1639. {
  1640. hwnd =CreateWindow("HELP", "在线帮助[ESC退出]", WS_POPUP|WS_CAPTION|WS_HSCROLL|WS_VSCROLL|WS_THICKFRAME,
  1641. 0, 
  1642. STATUS_HEIGHT-2+TOOLBAR_HEIGHT,
  1643. x, 
  1644. rc.bottom -rc.top -STATUS_HEIGHT*2-TOOLBAR_HEIGHT+2,
  1645. NULL, NULL, ghInstance, NULL);
  1646. if(hwnd ==NULL)
  1647. {
  1648. ErrMsg(hWnd, "Error create help window");
  1649. return FALSE;
  1650. }
  1651. ghWndHelp =hwnd;
  1652. ShowWindow(hwnd, SW_HIDE);
  1653. }
  1654. return TRUE;
  1655. }
  1656.     
  1657. int ReCreateChild(void)
  1658. {
  1659. PostMessage(ghWndHq,WM_CLOSE,0,0L);
  1660. PostMessage(ghWndStatus,WM_CLOSE,0,0L);
  1661. //PostMessage(ghWndCaption,WM_CLOSE,0,0L);
  1662. PostMessage(ghWndXlt,WM_CLOSE,0,0L);
  1663. PostMessage(ghWndJlt,WM_CLOSE,0,0L);
  1664. PostMessage(ghWndMmp,WM_CLOSE,0,0L);
  1665. PostMessage(ghWndCj,WM_CLOSE,0,0L);
  1666. PostMessage(ghWndLitHq,WM_CLOSE,0,0L);
  1667. PostMessage(ghWndMaxMin,WM_CLOSE,0,0L);
  1668. PostMessage(ghWndZs,WM_CLOSE,0,0L);
  1669. PostMessage(ghWndFx,WM_CLOSE,0,0L);
  1670. ghWndHq=ghWndXlt=ghWndJlt=ghWndMmp=NULL;
  1671. ghWndCj = ghWndLitHq =ghWndMaxMin =ghWndZs =NULL;
  1672. ghWndFx =NULL;
  1673. ghWndStatus =NULL;
  1674. //PostMessage(ghWndToolBar,WM_CLOSE,0,0L);
  1675. if(!CreateChilds(ghWndMain)) 
  1676. return -1;
  1677.     else
  1678.       return 0;
  1679. }