📄 hq_cl.c
字号:
#include <windows.h>#include <windowsx.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#include <malloc.h>#include <direct.h>#include <io.h>#include <time.h>#include "resource.h"#include "global.h"#include "appmain.h"#include "hq.h"#include "hq_cl.h"#include "hq_tcp.h"#include "jy_cl.h"#include "msg.h"#include "pctcp.h"#include "caption.h"#include "rsa.h"#define HQ_CLASS "CHQ"HQ_DATA HqData[2];HQ_PAINT_DATA HqPaintData;HQSEL_DATA HqSelData[MAX_HQSEL_COUNT];DP_DATA DpData[2];HQ_TIME HqTime[2];GRAPH_DATA GraphData;MMP_DATA MmpData;MAXMIN_DATA MaxMinData[2][2];ZX_DATA ZxData;int SeleQs=0;HFONT ghFontSmall =NULL;HFONT hHqFont =NULL;char szDataPath[128];extern int LoadFile(char *filename,int sline,char *title);extern BOOL ErrMsg(HWND, LPSTR);extern BOOL run_cancelled;extern JY_ANS_CHKUSR curChkUsrRes;extern BOOL jy_running;extern int TOOLBAR_HEIGHT;extern void SendJyQsxx(void);int DrawTitle(HWND hWnd, HDC hDC);void DrawSelRect(HWND hWnd, HDC hDC, int sel_num, int bClr);LPSTR GetHqFldPos(HDC, int jys, int rec_num, int fld_num);LPSTR GetHqFldPos1(int jys, int rec_num, int fld_num);LRESULT CALLBACK HqWndProc(HWND, UINT, WPARAM, LPARAM);int HqSort(void);int SortFloat(LPSORT_DATA lpSortData, int jys);int SortLong(LPSORT_DATA lpSortData, int jys);BOOL IsZsRec(int jys, int recNum);HFILE hfZx =HFILE_ERROR;extern HBITMAP hBmpUp, hBmpDown, hBmpEqual;extern int UDP_Send_Hq10(int, int, int, int);LPSTR HqTimeDefs[] ={"9:30", "11:30", "13:00", "15:00", "9:30", "11:30", "13:00", "15:00",};int *lpHqTimes[] ={&HqTime[0].am_min_start, &HqTime[0].am_min_count, &HqTime[0].pm_min_start, &HqTime[0].pm_min_count, &HqTime[1].am_min_start, &HqTime[1].am_min_count, &HqTime[1].pm_min_start, &HqTime[1].pm_min_count};float HqZd;extern BOOL IsSzRead,IsShRead;BOOL RegisterHq(void){ WNDCLASS wc; BYTE bytes[20]; float f =(float)0.1; memset(bytes, 0, sizeof(bytes)); memcpy(bytes, &f, sizeof(float)); memset(&wc, 0, sizeof(wc)); wc.style =CS_HREDRAW | CS_VREDRAW; wc.cbWndExtra =sizeof(WORD); wc.lpfnWndProc =HqWndProc; wc.lpszClassName =HQ_CLASS; wc.hbrBackground =GetStockObject(BLACK_BRUSH); wc.hInstance = ghInstance; wc.lpszMenuName = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(ghInstance, MAKEINTRESOURCE(IDR_MAINFRAME)); if(!RegisterClass(&wc)) return FALSE; return TRUE;}BOOL CreateWndHq(HWND hWnd){ HWND hwnd; RECT rc; GetClientRect(ghWndMain, &rc); if(ghWndHq==NULL) { hwnd =CreateWindow(HQ_CLASS, HQ_CLASS, WS_CHILD|WS_CLIPSIBLINGS,// |WS_VSCROLL|WS_HSCROLL, 0, STATUS_HEIGHT +TOOLBAR_HEIGHT , rc.right -rc.left, rc.bottom -rc.top -TOOLBAR_HEIGHT-STATUS_HEIGHT*2-MSG_HEIGHT, hWnd, IDW_HQ, ghInstance, NULL); if(hwnd ==NULL) { ErrMsg(hWnd, "Error create hq window"); return FALSE; } ghWndHq =hwnd; SendMessage(hwnd, WM_COMMAND, IDM_HQ_SZ, 0L); ShowWindow(hwnd, SW_SHOW); } else { SetWindowPos(ghWndHq, (HWND)NULL, 0, 0, rc.right -rc.left, rc.bottom -rc.top -TOOLBAR_HEIGHT-STATUS_HEIGHT*2-MSG_HEIGHT, SWP_NOMOVE); PostMessage(ghWndHq,WM_USER+1,NULL,NULL); } return TRUE;}BOOL HqInit(void){ int i, jys; LOGFONT SmallLf; char temp[128]; OFSTRUCT os; HANDLE hf; memset(&HqData, 0, sizeof(HqData)); memset(&HqSelData, 0, sizeof(HqSelData)); memset(&HqTime, 0, sizeof(HqTime)); HqTime[0].fRunning =HqTime[1].fRunning =TRUE; memset(&HqPaintData, 0, sizeof(HqPaintData)); memset(&MmpData, 0, sizeof(MmpData)); memset(&GraphData, 0, sizeof(GraphData)); memset(&ZxData, 0, sizeof(ZxData)); memset(&lf, 0, sizeof(lf)); if(!GetInitString("HQ", "DATAPATH", szDataPath)) { strcpy(szDataPath, ".\\data"); } else { i =strlen(szDataPath); if(szDataPath[i-1] =='\\') szDataPath[i-1] =0; } if(_access(szDataPath, 0) !=0 && _mkdir(szDataPath) !=0) strcpy(szDataPath, "."); PutInitString("HQ", "DATAPATH", szDataPath); if(!GetInitString("HQ", "ITEM_SPACE_X", temp)) ITEM_SPACE_X =0; else ITEM_SPACE_X =atoi(temp); if(!GetInitString("HQ", "X0_TITLE", temp)) X0_TITLE =0; else X0_TITLE =atoi(temp); strcpy(temp, szDataPath); strcat(temp, "\\zx.txt"); if(access(temp,0)!=0) hfZx =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_CREATE|OF_READWRITE); else hfZx =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READWRITE); if(hfZx ==HFILE_ERROR) { strcat(temp, ": Create failed!"); ErrMsg(NULL, temp); } _lclose(hfZx); memset(&lf, 0, sizeof(LOGFONT)); strcpy(temp, "font.dat"); if(access(temp,0)==0) { hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_READ); if(hfZx ==HFILE_ERROR) unlink(temp); else { if(_lread(hf,&lf,sizeof(LOGFONT))!=sizeof(LOGFONT)) { _lclose(hfZx); memset(&lf, 0, sizeof(LOGFONT)); unlink(temp); } else _lclose(hfZx); } } memset(&SmallLf, 0, sizeof(LOGFONT)); SmallLf.lfHeight =-12; SmallLf.lfWeight =FW_NORMAL; strcpy(SmallLf.lfFaceName, "宋体"); ghFontSmall =CreateFontIndirect(&SmallLf); //由HqTimeDefs数据生成HqTimes数据 for(jys =0; jys <2; jys++) { for(i =0; i<4; i++) { strcpy(temp, HqTimeDefs[i+4*jys]); *lpHqTimes[i+4*jys] =atoi(strtok(temp, ":"))*60; *lpHqTimes[i+4*jys] +=atoi(strtok(NULL, ":")); } HqTime[jys].am_min_count -=HqTime[jys].am_min_start; HqTime[jys].pm_min_count -=HqTime[jys].pm_min_start; } if(GetInitString("TIME", "SZ_AM_START",temp)) HqTime[0].am_min_start =atoi(temp); if(GetInitString("TIME", "SZ_AM_COUNT",temp)) HqTime[0].am_min_count =atoi(temp); if(GetInitString("TIME", "SZ_PM_START",temp)) HqTime[0].pm_min_start =atoi(temp); if(GetInitString("TIME", "SZ_PM_COUNT",temp)) HqTime[0].pm_min_count =atoi(temp); if(GetInitString("TIME", "SH_AM_START",temp)) HqTime[1].am_min_start =atoi(temp); if(GetInitString("TIME", "SH_AM_COUNT",temp)) HqTime[1].am_min_count =atoi(temp); if(GetInitString("TIME", "SH_PM_START",temp)) HqTime[1].pm_min_start =atoi(temp); if(GetInitString("TIME", "SH_PM_COUNT",temp)) HqTime[1].pm_min_count =atoi(temp); return TRUE;}void HqExit(void){ static BOOL fExit =FALSE; int jys; char temp[80]; OFSTRUCT os; HANDLE hf; if(fExit ==TRUE) return; fExit =TRUE; for(jys =0; jys <2; jys++) { if(HqData[jys].lpPreData !=NULL) GlobalFreePtr(HqData[jys].lpPreData); if(HqData[jys].lpRefData !=NULL) GlobalFreePtr(HqData[jys].lpRefData); if(HqData[jys].isJgChanged !=NULL) GlobalFreePtr(HqData[jys].isJgChanged); if(HqData[jys].isLcChanged !=NULL) GlobalFreePtr(HqData[jys].isLcChanged); if(HqData[jys].isReadOK !=NULL) GlobalFreePtr(HqData[jys].isReadOK); } if(GraphData.lpGraData) GlobalFreePtr(GraphData.lpGraData); if(GraphData.lpMinPos) GlobalFreePtr(GraphData.lpMinPos); if(GraphData.lpMinLc) GlobalFreePtr(GraphData.lpMinLc); if(ZxData.lpText) GlobalFreePtr(ZxData.lpText); strcpy(temp,"font.dat"); hf =OpenFile(temp, &os, OF_SHARE_DENY_NONE|OF_CREATE|OF_WRITE); _lwrite(hf,&lf,sizeof(LOGFONT)); _lclose(hf); if(ghFontSmall) DeleteObject(ghFontSmall); if(hHqFont!=NULL) DeleteObject(hHqFont); //if(hfZx !=HFILE_ERROR) _lclose(hfZx); sprintf(temp,"%d",HqTime[0].am_min_start); PutInitString("TIME", "SZ_AM_START",temp); sprintf(temp,"%d",HqTime[0].am_min_count); PutInitString("TIME", "SZ_AM_COUNT",temp); sprintf(temp,"%d",HqTime[0].pm_min_start); PutInitString("TIME", "SZ_PM_START",temp); sprintf(temp,"%d",HqTime[0].pm_min_count); PutInitString("TIME", "SZ_PM_COUNT",temp); sprintf(temp,"%d",HqTime[1].am_min_start); PutInitString("TIME", "SH_AM_START",temp); sprintf(temp,"%d",HqTime[1].am_min_count); PutInitString("TIME", "SH_AM_COUNT",temp); sprintf(temp,"%d",HqTime[1].pm_min_start); PutInitString("TIME", "SH_PM_START",temp); sprintf(temp,"%d",HqTime[1].pm_min_count); PutInitString("TIME", "SH_PM_COUNT",temp); }//zqdm,zrsp,jrkp,zgjg,zdjg,zgjm,zdjm,zjjg,zdf,cjss,lc,npzl, wpzl, wb, cjje ,zdint HqFldLens[HQ_FLDS_COUNT+1]={ MAX_ZQDM_SIZE+2, sizeof(float),sizeof(float), sizeof(float), sizeof(float), sizeof(float), sizeof(float),sizeof(float), sizeof(float), sizeof(long), sizeof(long), sizeof(long), sizeof(long), sizeof(float), sizeof(long),sizeof(float)};int HqPaintFldLens[HQ_FLDS_COUNT+1]={ MAX_ZQDM_SIZE+2, MAX_JG_SIZE, MAX_JG_SIZE, MAX_JG_SIZE, MAX_JG_SIZE, MAX_JG_SIZE, MAX_JG_SIZE, MAX_JG_SIZE, MAX_JG_SIZE -1, MAX_CJSS_SIZE+1, MAX_CJSS_SIZE -1, MAX_CJSS_SIZE+1, MAX_CJSS_SIZE+1, MAX_JG_SIZE-2, MAX_CJJE_SIZE,MAX_JG_SIZE+1};int HqFldTypes[HQ_FLDS_COUNT+1] ={ FLD_TYPE_STRING, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_FLOAT, FLD_TYPE_LONG, FLD_TYPE_LONG, FLD_TYPE_LONG, FLD_TYPE_LONG, FLD_TYPE_FLOAT, FLD_TYPE_LONG ,FLD_TYPE_FLOAT};short *recList =NULL;int FontHight=-15; BOOL isRF=FALSE;#define R_VERT 4000#define R_HORZ 1000//unsigned short ITEM_SPACE_Y =7;//unsigned short X0_TITLE=84;//unsigned short ITEM_SPACE_X =12;unsigned short ITEM_SPACE_Y =0;unsigned short X0_TITLE=0;unsigned short ITEM_SPACE_X =0;LOGFONT lf;LRESULT CALLBACK HqWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps; int i, j, m, l, n, k; RECT rc, rc1; HDC hDC; int x, y; static TEXTMETRIC tm; char tmp[100]; LPSTR lpTmp; int recNum, recCount; BOOL fRefresh =FALSE, fSel =FALSE; static clock_t MouDownClk; switch(message) { case WM_CREATE: MouDownClk=clock(); HqPaintData.sortData.fldID =SORT_ZQDM; HqPaintData.sortData.type =SORT_DOWN; HqPaintData.filter =HQ_ALL; HqPaintData.jys =0; SetScrollRange(hWnd,SB_VERT,0,R_VERT,TRUE); SetScrollRange(hWnd,SB_HORZ,0,R_HORZ,TRUE); if(lf.lfHeight ==0) { memset(&lf,0,sizeof(lf)); lf.lfWeight =FW_NORMAL; lf.lfHeight=FontHight; lf.lfItalic=0; lf.lfUnderline=0; }// PostMessage(hWnd,WM_USER+1,NULL,NULL);// break; case WM_USER +1: hDC =GetDC(hWnd); if(hHqFont!=NULL) DeleteObject(hHqFont); hHqFont =CreateFontIndirect(&lf); SelectObject(hDC,hHqFont); GetTextMetrics(hDC, &tm); ReleaseDC(hWnd, hDC); if(X0_TITLE ==0) X0_TITLE =tm.tmAveCharWidth *10; if(ITEM_SPACE_X ==0) ITEM_SPACE_X =10; ITEM_SPACE_Y =tm.tmHeight*15/100; // PostMessage(hWnd,WM_USER +5,0,0L);// break; case WM_USER +5: GetClientRect(hWnd, &rc); i =rc.bottom -rc.top; HqPaintData.curRecCount =i/(tm.tmHeight+ITEM_SPACE_Y); if(HqPaintData.curRecCount<=1) HqPaintData.curRecCount=2; ITEM_SPACE_Y +=(i-HqPaintData.curRecCount*(tm.tmHeight+ITEM_SPACE_Y))/HqPaintData.curRecCount; HqPaintData.itemHeight = tm.tmHeight+ITEM_SPACE_Y; if(HqPaintData.curRecCount>2) HqPaintData.curRecCount--; if(recList!=NULL) free(recList); recList =(short *)malloc(sizeof(short)*HqPaintData.curRecCount); if(recList ==NULL) { ErrMsg(hWnd, "alloc recList failed!"); return -1; } x =X0_TITLE; HqPaintData.x0 =0; HqPaintData.curFldNum=0; if(HqPaintData.fldCount <=0) { HqPaintData.fldCount =sizeof(HqFldLens)/sizeof(int); for(j =0; j<HqPaintData.fldCount; j++) HqPaintData.fldNum[j] =j; } for(j =0; j<HqPaintData.fldCount; j++) { HqPaintData.rcTitles[j].left =x; HqPaintData.rcTitles[j].right = x+(tm.tmAveCharWidth)*HqPaintFldLens[HqPaintData.fldNum[j]]; x =HqPaintData.rcTitles[j].right+ITEM_SPACE_X; HqPaintData.rcTitles[j].top =0; HqPaintData.rcTitles[j].bottom =tm.tmHeight; } break; case WM_VSCROLL: if(wParam==SB_LINEDOWN) SendMessage(hWnd,WM_KEYDOWN,VK_DOWN,0L); if(wParam==SB_LINEUP) SendMessage(hWnd,WM_KEYDOWN,VK_UP,0L); if(wParam==SB_PAGEDOWN) SendMessage(hWnd,WM_KEYDOWN,VK_NEXT,0L); if(wParam==SB_PAGEUP) SendMessage(hWnd,WM_KEYDOWN,VK_PRIOR,0L); break; case WM_HSCROLL: if(wParam ==SB_LINEDOWN||wParam ==SB_PAGEDOWN) SendMessage(hWnd,WM_KEYDOWN,VK_RIGHT,0L); if(wParam ==SB_LINEUP||wParam ==SB_PAGEUP) SendMessage(hWnd,WM_KEYDOWN,VK_LEFT,0L); break; case WM_USER +2: if((int)wParam !=HqPaintData.jys) break; HqSort(); InvalidateRect(hWnd, NULL, FALSE); break; case WM_SETFOCUS: SetFocus(ghWndMain); break; case WM_TIMER: if(wParam==5) { if(HqPaintData.type >=HQ_SEL_1 && HqPaintData.type <=HQ_SEL_5||HqPaintData.filter!=HQ_ALL) { fSel =TRUE; for(i =0; i<HqPaintData.curRecCount && i+HqPaintData.curRecNum<HqPaintData.recCount; i++) recList[i] =HqPaintData.sortData.key[i+HqPaintData.curRecNum]; recCount =i; } else { fSel =FALSE; recList[0] =HqPaintData.sortData.key[HqPaintData.curRecNum]; recCount =HqPaintData.curRecCount; } if(HqData[HqPaintData.jys].recCount ==0) fRefresh =FALSE; else fRefresh =TRUE; //to deal with the new stock code adding status,we must receive // stock code and other information fRefresh=FALSE; for(i =0; i<HqPaintData.curRecCount && (i+HqPaintData.curRecNum <HqPaintData.recCount); i++) { recNum =HqPaintData.sortData.key[i+HqPaintData.curRecNum]; if(HqData[HqPaintData.jys].isReadOK[recNum] ==FALSE) { fRefresh =FALSE; break; } } if(recCount&&!gfConnecting&&gfOnLine) UDP_Send_Hq00(HqPaintData.jys, FALSE, fRefresh, fSel, recCount, recList); KillTimer(hWnd,5); if(recCount) { recNum =HqPaintData.sortData.key[0]; if((HqData[HqPaintData.jys].recCount==0||HqData[HqPaintData.jys].lpRefData[recNum].zdjm==0.00&& HqData[HqPaintData.jys].lpRefData[recNum].zgjm==0.00)&&gfOnLine) SetTimer(hWnd,5,10000,NULL); } } break; case WM_RBUTTONDOWN: SetFocus(hWnd);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -