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

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include "resource.h"
  5. #include "global.h"
  6. #include "hq.h"
  7. #include "hq_cl.h"
  8. #include "lithq.h"
  9. #include "toolbar.h"
  10. #define LITHQ_CLASS "CLITHQ"
  11. extern HINSTANCE ghInstance;
  12. extern HWND ghWndMain, ghWndLitHq;
  13. extern BOOL ErrMsg(HWND, LPSTR);
  14. extern BOOL IsZsRec(int jys, int rec_num);
  15. BOOL RegisterLitHq(void)
  16. {
  17. WNDCLASS wc;
  18. memset(&wc, 0, sizeof(wc));
  19. wc.lpfnWndProc =LitHqWndProc;
  20. wc.lpszClassName =LITHQ_CLASS;
  21. wc.hbrBackground =GetStockObject(BLACK_BRUSH);
  22. wc.hInstance = ghInstance;
  23. wc.hCursor = LoadCursor(NULL, IDC_ARROW);        
  24. if(!RegisterClass(&wc)) return FALSE;
  25. return TRUE;
  26. }
  27. BOOL CreateWndLitHq(HWND hWnd)
  28. {                          
  29. int x ;
  30. HWND hwnd;
  31.     int x0,y0,x1,y1;
  32. TEXTMETRIC tm;
  33. HDC hDC;
  34. RECT rc;
  35. x =GetSystemMetrics(SM_CXSCREEN);
  36. hDC =GetDC(hWnd);
  37. GetTextMetrics(hDC, &tm);
  38. ReleaseDC(hWnd, hDC);
  39.     GetWindowRect(ghWndXlt,&rc);
  40.     
  41.     x0 =rc.right;
  42.     y0 =tm.tmHeight*8+STATUS_HEIGHT +TOOLBAR_HEIGHT ;
  43.     x1 =x*1/3-30-1;
  44.     y1 =tm.tmHeight*6;
  45.     if(ghWndLitHq ==NULL)
  46.     {    
  47. hwnd =CreateWindow(LITHQ_CLASS, NULL, WS_CHILD|WS_CLIPSIBLINGS,
  48. x0, y0, x1, y1,
  49. hWnd, NULL, ghInstance, NULL);
  50. if(hwnd ==NULL)
  51. {
  52. ErrMsg(hWnd, "Error create lithq window");
  53. return FALSE;
  54. }
  55. ghWndLitHq =hwnd;
  56. }
  57. else
  58. {
  59. SetWindowPos(ghWndLitHq, (HWND) NULL,x0, y0, x1, y1,NULL);
  60. }
  61. return TRUE;
  62. }
  63. LPSTR LitHqTitles[]=
  64. {
  65. "开盘", "平均", "最高", "最低", "最近", "涨幅", "总手", "内盘", "外盘", "涨跌", NULL
  66. };
  67. float CalcAveJg(int jys, int recNum);
  68. float CalcWb(void);
  69. extern IsZsRec(int, int);
  70. extern HFONT ghFontSmall;
  71. extern int UDP_Send_Hq10(int, int, int, int);
  72. LRESULT CALLBACK LitHqWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  73. {
  74. char tmp[256];
  75. PAINTSTRUCT ps;
  76. DWORD dw;
  77. int i, j, k, y;
  78. RECT rc;
  79. HPEN hPen;
  80. static float aveJg =0;
  81. static int x =15;
  82. switch(message)
  83. {
  84. case WM_SETFOCUS:
  85. SetFocus(ghWndMain);
  86. break;
  87. case WM_READ_OK:
  88. if(IsZsRec(GraphData.jys, GraphData.recNum)) x =5;
  89. else x =15;
  90. aveJg =CalcAveJg(GraphData.jys, GraphData.recNum);
  91. InvalidateRect(hWnd, NULL, TRUE);
  92. break;
  93. case WM_SIZE:
  94. if(IsWindowVisible)
  95. InvalidateRect(hWnd,NULL,TRUE);
  96. break; 
  97. case WM_PAINT:
  98. GetClientRect(hWnd, &rc);
  99. BeginPaint(hWnd, &ps);
  100. hPen =CreatePen(PS_SOLID, 2, RGB(180, 180, 180));
  101. SelectObject(ps.hdc, hPen);
  102. SelectObject(ps.hdc, GetStockObject(NULL_BRUSH));
  103. Rectangle(ps.hdc, 2, 2, rc.right-2, rc.bottom-1);
  104. SelectObject(ps.hdc, GetStockObject(WHITE_PEN));
  105. DeleteObject(hPen);
  106. MoveTo(ps.hdc, rc.right, 0);
  107. LineTo(ps.hdc, 0, 0);
  108. LineTo(ps.hdc, 0, rc.bottom);
  109. hPen =CreatePen(PS_SOLID, 2, RGB(80, 80, 80));
  110. SelectObject(ps.hdc, hPen);
  111. LineTo(ps.hdc, rc.right-1, rc.bottom-1);
  112. LineTo(ps.hdc, rc.right-1, 0);
  113. SelectObject(ps.hdc, GetStockObject(WHITE_PEN));
  114. DeleteObject(hPen);
  115. strcpy(tmp, "行情");
  116. dw =GetTextExtent(ps.hdc, tmp, strlen(tmp));
  117. y =HIWORD(dw);
  118. SetBkMode(ps.hdc, TRANSPARENT);
  119. SetTextColor(ps.hdc, RGB(255, 255, 0));
  120. SetTextAlign(ps.hdc, TA_LEFT|TA_TOP);
  121. k = GraphData.recNum;
  122. if(IsZsRec(GraphData.jys, k)) j =9;
  123. else j =10;
  124. for(i =0; i<j; i++)
  125. {
  126. TextOut(ps.hdc, rc.right*(i/5)/2+5-10*(i/5), 5+(y+2)*(i%5),
  127. LitHqTitles[i], strlen(LitHqTitles[i]));
  128. }
  129. SelectObject(ps.hdc, ghFontSmall);
  130. SetTextAlign(ps.hdc, TA_RIGHT|TA_TOP);
  131. //SetTextColor(ps.hdc, RGB(180, 0, 0));
  132. if(HqData[GraphData.jys].lpPreData[k].jrkp >
  133. HqData[GraphData.jys].lpPreData[k].zrsp)
  134. SetTextColor(ps.hdc, RGB(255, 0, 0));
  135. else if(HqData[GraphData.jys].lpPreData[k].jrkp <
  136. HqData[GraphData.jys].lpPreData[k].zrsp)
  137. SetTextColor(ps.hdc, RGB(0, 255, 0));
  138. else SetTextColor(ps.hdc, RGB(255, 255, 0));
  139. sprintf(tmp, "%.2f", HqData[GraphData.jys].lpPreData[k].jrkp);
  140. TextOut(ps.hdc, rc.right/2-x, 5, tmp, strlen(tmp));
  141. if(aveJg >HqData[GraphData.jys].lpPreData[k].zrsp)
  142. SetTextColor(ps.hdc, RGB(255, 0, 0));
  143. else if(aveJg < HqData[GraphData.jys].lpPreData[k].zrsp)
  144. SetTextColor(ps.hdc, RGB(0, 255, 0));
  145. else SetTextColor(ps.hdc, RGB(255, 255, 0));
  146. sprintf(tmp, "%.2f", aveJg);
  147. TextOut(ps.hdc, rc.right/2-x, 5+(y+2), tmp, strlen(tmp));
  148. if(HqData[GraphData.jys].lpRefData[k].zgjg >
  149. HqData[GraphData.jys].lpPreData[k].zrsp)
  150. SetTextColor(ps.hdc, RGB(255, 0, 0));
  151. else if(HqData[GraphData.jys].lpRefData[k].zgjg <
  152. HqData[GraphData.jys].lpPreData[k].zrsp)
  153. SetTextColor(ps.hdc, RGB(0, 255, 0));
  154. else SetTextColor(ps.hdc, RGB(255, 255, 0));
  155. sprintf(tmp, "%.2f", HqData[GraphData.jys].lpRefData[k].zgjg);
  156. TextOut(ps.hdc, rc.right/2-x, 5+(y+2)*2, tmp, strlen(tmp));
  157. if(HqData[GraphData.jys].lpRefData[k].zdjg >
  158. HqData[GraphData.jys].lpPreData[k].zrsp)
  159. SetTextColor(ps.hdc, RGB(255, 0, 0));
  160. else if(HqData[GraphData.jys].lpRefData[k].zdjg <
  161. HqData[GraphData.jys].lpPreData[k].zrsp)
  162. SetTextColor(ps.hdc, RGB(0, 255, 0));
  163. else SetTextColor(ps.hdc, RGB(255, 255, 0));
  164. sprintf(tmp, "%.2f", HqData[GraphData.jys].lpRefData[k].zdjg);
  165. TextOut(ps.hdc, rc.right/2-x, 5+(y+2)*3, tmp, strlen(tmp));
  166. if(HqData[GraphData.jys].lpRefData[k].zjjg >
  167. HqData[GraphData.jys].lpPreData[k].zrsp)
  168. SetTextColor(ps.hdc, RGB(255, 0, 0));
  169. else if(HqData[GraphData.jys].lpRefData[k].zjjg <
  170. HqData[GraphData.jys].lpPreData[k].zrsp)
  171. SetTextColor(ps.hdc, RGB(0, 255, 0));
  172. else SetTextColor(ps.hdc, RGB(255, 255, 0));
  173. sprintf(tmp, "%.2f", HqData[GraphData.jys].lpRefData[k].zjjg);
  174. TextOut(ps.hdc, rc.right/2-x, 5+(y+2)*4, tmp, strlen(tmp));
  175. sprintf(tmp, "%.2f", HqData[GraphData.jys].lpRefData[k].zdf);
  176. TextOut(ps.hdc, rc.right-5, 5, tmp, strlen(tmp));
  177. SetTextColor(ps.hdc, RGB(0, 255, 255));
  178. sprintf(tmp, "%ld", HqData[GraphData.jys].lpRefData[k].cjss);
  179. TextOut(ps.hdc, rc.right-5, 5+(y+2)*1, tmp, strlen(tmp));
  180. sprintf(tmp, "%ld", HqData[GraphData.jys].lpRefData[k].npzl);
  181. TextOut(ps.hdc, rc.right-5, 5+(y+2)*2, tmp, strlen(tmp));
  182. sprintf(tmp, "%ld", HqData[GraphData.jys].lpRefData[k].cjss
  183. -HqData[GraphData.jys].lpRefData[k].npzl);
  184. TextOut(ps.hdc, rc.right-5, 5+(y+2)*3, tmp, strlen(tmp));
  185. if(j ==10)
  186. {
  187. sprintf(tmp, "%.2f", HqData[GraphData.jys].lpRefData[k].zjjg -
  188. HqData[GraphData.jys].lpPreData[k].zrsp);
  189. TextOut(ps.hdc, rc.right-5, 5+(y+2)*4, tmp, strlen(tmp));
  190. }
  191. EndPaint(hWnd, &ps);
  192. break;
  193. }
  194. return DefWindowProc(hWnd, message, wParam, lParam);
  195. }
  196. float CalcAveJg(int jys, int recNum)
  197. {
  198. int i;
  199. double jg;
  200. if(GraphData.minEnd <=0)
  201. return HqData[jys].lpRefData[recNum].zjjg;
  202. jg =0;
  203. for(i =0; i<GraphData.minEnd; i++)
  204. jg+=GraphData.lpGraData[0].zjjg;
  205. jg /=GraphData.minEnd;
  206. jg +=HqData[jys].lpPreData[recNum].zrsp;
  207. return (float)jg;
  208. }
  209. float CalcWb(void)
  210. {
  211. int i;
  212. double slSell =0, slBuy =0;
  213. for(i =0; i<3; i++)
  214. slSell +=(double)MmpData.slSell[i];
  215. for(i =0; i<3; i++)
  216. slBuy +=(double)MmpData.slBuy[i];
  217. if(slSell +slBuy ==0) return 0;
  218. return (float)((slBuy-slSell)/(slSell+slBuy));
  219. }