📄 appmain.c
字号:
/* hq_cl:股票行情,分析,资讯,交易。* by lgd/Paladin.InetSoft guangzhou 1996.9* http://www.nease.net/~inetsoft, inetsoft@163.net* modify by lym(看此程序学了些win32编程,修改后作者里却不愿写上原作者的一个人) guangzhou 1997.5-1998*/#include <windows.h>#include <windowsx.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#include <io.h>#include "global.h"#include "resource.h"#include "appmain.h"#include "pctcp.h"#include "hq.h"#include "hq_cl.h"#include "jy_cl.h"#include "caption.h"#include "mmp.h"#include "cj.h"#include "status.h"#include "xlt.h"#include "jlt.h"#include "graph.h"#include "maxmin.h"#include "lithq.h"#include "zs.h"#include "fx.h"#include "toolbar.h"#include "msg.h"#include "rsa.h"#include "env.h"#include "comm.h"#include "hq_tcp.h"int WinVer =3;HINSTANCE ghInstance =NULL;HWND ghWndMain =NULL, ghWndStatus =NULL, ghWndMaxMin =NULL, ghWndXlt =NULL, ghWndJlt =NULL, ghWndCaption =NULL, ghWndZs =NULL, ghWndMmp =NULL, ghWndCj =NULL, ghWndHq =NULL, ghWndLitHq =NULL, ghWndFx =NULL, ghDlgChkUsr =NULL, ghWndToolBar =NULL, ghWndTips =NULL, ghWndHelp=NULL, hWndInput =NULL; HMENU ghMenuHq =NULL, ghMenuMain =NULL, ghMenuMainGraph =NULL, ghMenuGraph =NULL; HBITMAP hBmpUp =NULL, hBmpDown =NULL, hBmpEqual =NULL; BOOL IsSzRead=FALSE,IsShRead=FALSE;int STATUS_HEIGHT=0;int MSG_HEIGHT =0;int INPUT_WIDTH =0; int TOOLBAR_HEIGHT =0;BOOL gfTest =FALSE;int gfOnLine = FALSE, gfConnecting =TRUE, gfDelete=FALSE;int jy_running =FALSE;char * IpSendBuffer, *IpCommitBuffer;unsigned int IpSendLen =0, IpCommitLen =0;HANDLE hLibCtl3d =NULL;char inkey[16+1],*winpy=NULL;short SeleGp[MAX_SELE_NUM][2];char UserID[HQ_USERID_SIZE+1];char UserPwd[HQ_USERPWD_SIZE+1];//extern HWND ghDlgJy;extern char szDataPath[128];extern unsigned int RANGE_MENU[7];extern int SeleQs;extern LPSTR HqTitles[HQ_FLDS_COUNT+2];extern int Jy(void);extern void UDP_Send_Exit(void);extern HBRUSH DrawChild(HDC hDC, HWND hWnd);extern int UDP_Client_ReadHq(void);extern int AnaRecvData(void);extern int AnaJyRecvData(void);extern int UDP_Client_ReadJy(void);extern int UDP_Send_Hq00(int jys, BOOL fFirst, int fRefresh, int fSel, int recCount, short *recList);extern int UDP_Send_Hq01(int, BOOL, int, int);extern int UDP_Send_Zx(void);extern int sdHq,JyOffLineTime;extern JY_ANS_CHKUSR curChkUsrRes;extern HFILE hfZx ;extern BOOL Ip_Send_Pack();extern int InitQsInfo(void);extern int JyQs;extern char Addr[MAX_ZQS_COUNT][15];extern int ConnectToJyHost(char *HostName);extern void SendJyQsxx(void);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hInstPre, LPSTR lpszCmdLine, int nCmdShow){ WNDCLASS wc; HWND hwnd; MSG msg; int x,y; if(hInstPre) { hwnd =FindWindow(APPNAME, NULL); if(hwnd) SetFocus(hwnd); return FALSE; } ghInstance =hInstance; memset(&wc, 0, sizeof(wc)); wc.style =0; wc.lpfnWndProc = MainWndProc; wc.lpszClassName =APPNAME; wc.hbrBackground =GetStockObject(BLACK_BRUSH); wc.hInstance = hInstance; wc.lpszMenuName = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDR_MAINFRAME)); if(!RegisterClass(&wc)) { ErrMsg(NULL, "RegisterClass wnd_main failed!"); return FALSE; } if(!RegisterChilds()) return FALSE; if(!AppInit()) { ErrMsg(NULL, "AppInit failed!"); AppExit(); return FALSE; } if(strstr(lpszCmdLine,"/T")!=NULL||strstr(lpszCmdLine,"/t")!=NULL) gfTest =TRUE; x =GetSystemMetrics(SM_CXSCREEN); y =GetSystemMetrics(SM_CYSCREEN) -GetSystemMetrics(SM_CYCAPTION)*2; hwnd =CreateWindow(APPNAME, APPNAME, WS_SYSMENU|WS_CLIPCHILDREN| WS_THICKFRAME|WS_MAXIMIZEBOX|WS_MINIMIZEBOX, 0, 0, x, y, NULL, NULL, hInstance, NULL); if(hwnd ==NULL) { ErrMsg(NULL, "建立主窗口失败!"); return FALSE; } ghWndMain =hwnd; ShowWindow(hwnd, SW_SHOW); InvalidateRect(hwnd, NULL, FALSE); while(GetMessage(&msg, 0, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } AppExit(); return msg.wParam;}void LoadPy(void){ OFSTRUCT os; HANDLE hf; long len; hf=OpenFile("winpy.dat", &os, OF_SHARE_DENY_NONE|OF_READ); if(hf!=HFILE_ERROR) { if((len =_llseek(hf,0L,SEEK_END))>0L) { winpy = (char *)GlobalAllocPtr(GHND,len+1); if(winpy!=NULL) { _llseek(hf,0L,SEEK_SET); if(_lread(hf,winpy,(UINT)len)!=(UINT)len) { GlobalFreePtr(winpy); winpy =NULL; } } } } if(hf!=HFILE_ERROR) _lclose(hf);}BOOL AppInit(void){ FARPROC fpTemp =NULL; WinVer =LOBYTE(LOWORD(GetVersion())); if(WinVer <4) { hLibCtl3d =LoadLibrary("CTL3DV2.DLL"); if((UINT)hLibCtl3d <=32) hLibCtl3d =LoadLibrary("CTL3D.DLL"); if((UINT)hLibCtl3d >32) { fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dRegister"); if(fpTemp) (*fpTemp)(ghInstance); fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dAutoSubclass"); if(fpTemp) (*fpTemp)(ghInstance); } } ghMenuMain =LoadMenu(ghInstance, MAKEINTRESOURCE(IDR_MENU_MAIN)); if(!ghMenuMain) { ErrMsg(NULL, "Load main menu failed!"); return FALSE; } ghMenuHq =GetSubMenu(ghMenuMain, 0); ghMenuMainGraph =LoadMenu(ghInstance, MAKEINTRESOURCE(IDR_MENU_GRAPH)); if(!ghMenuMainGraph) { ErrMsg(NULL, "Load graph menu failed!"); return FALSE; } ghMenuGraph =GetSubMenu(ghMenuMainGraph, 0); hBmpUp =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_UP)); hBmpDown =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_DOWN)); hBmpEqual =LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_EQUAL)); if(!HqInit()) return FALSE; if(!JyInit()) return FALSE; if(!GraphInit()) return FALSE; if(!AnalyseInit()) return FALSE; if(PCTCPInit() !=0) { ErrMsg(NULL, "PCTCPInit() failed!"); gfOnLine =FALSE; } IpSendBuffer = (char *)GlobalAllocPtr(GHND,MAX_WRITE_BUF_SIZE +1); if(IpSendBuffer ==NULL) return FALSE; IpCommitBuffer = (char *)GlobalAllocPtr(GHND,MAX_WRITE_BUF_SIZE +1); if(IpCommitBuffer ==NULL) return FALSE; GetSet(); LoadPy(); return TRUE;}void AppExit(void){ FARPROC fpTemp =NULL; static BOOL fExit =FALSE; if(fExit) return; fExit =TRUE; SaveSet(); GraphExit(); HqExit(); JyExit(); PCTCPExit(); GlobalFreePtr(IpSendBuffer); GlobalFreePtr(IpCommitBuffer); FxExit(Fx); if(ghMenuMain) DestroyMenu(ghMenuMain); if(ghMenuMainGraph) DestroyMenu(ghMenuMainGraph); if(hBmpUp) DeleteObject(hBmpUp); if(hBmpDown) DeleteObject(hBmpDown); if(hBmpEqual) DeleteObject(hBmpEqual); if((UINT)hLibCtl3d >32) { fpTemp =GetProcAddress(hLibCtl3d, "Ctl3dUnregister"); if(fpTemp) (*fpTemp)(ghInstance); FreeLibrary(hLibCtl3d); } if(winpy!=NULL) GlobalFreePtr(winpy);}extern void ReadHqDataAll(void); extern void WriteHqDataAll(void);extern void DelOldData(void); extern void ReadHqData(int jys);LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ FARPROC lpFarProc=NULL; static int recNum =0; int i,ret,j; char temp[100+1]; HDC hDC; TEXTMETRIC tm; STOCK_INFO_FRAME StockInfo; switch(message) { case WM_CREATE: ghWndMain =hWnd; ghDlgJy =NULL; hDC =GetDC(hWnd); GetTextMetrics(hDC, &tm); ReleaseDC(hWnd,hDC); STATUS_HEIGHT =30; MSG_HEIGHT =tm.tmHeight+4; INPUT_WIDTH =tm.tmMaxCharWidth*10; if(!CreateChilds(hWnd)) return -1; InvalidateRect(hWnd, NULL, FALSE); PostMessage(hWnd,WM_USER+4,0,0L); break; case WM_USER+1: switch(lParam) { case FD_READ: AnaRecvData(); break; case FD_CONNECT: gfConnecting=FALSE; gfOnLine =TRUE; if(UDP_Send_Hq00(0, TRUE, FALSE, FALSE, HqPaintData.curRecCount, &recNum)<0) { ErrMsg(ghWndMain, "不能请求行情数据"); gfOnLine =FALSE; PostMessage(hWnd,WM_USER+3,0,0L); break; } SetTimer(hWnd, 1, 100, NULL); SetTimer(hWnd, 2, 1000*HQ_REFRESH_TIME, NULL); lpFarProc =MakeProcInstance((FARPROC)HqUserDlgProc, ghInstance); DialogBox(ghInstance, MAKEINTRESOURCE(IDD_HQUSER), hWnd, lpFarProc); FreeProcInstance(lpFarProc); if(!gfOnLine) PostMessage(hWnd,WM_USER+3,0,0L); else { Msg("请求主机发送初始化数据",MSG_VERT); DelOldData(); gfDelete=TRUE; gfOnLine=TRUE; } break; } break; case WM_USER+2: switch(lParam) { case FD_READ: AnaJyRecvData(); break; case FD_CONNECT: JyQs =SeleQs; DispQsName(JyQs,0); if(!ReadRsaCiper(JyQs,RsaKey,temp)) { SendJyQsxx(); RsaOk =0; } else { strncpy(DesKey,temp,8); DesKey[8]=0; RsaOk =1; DispQsName(JyQs,RsaOk); } break; } break; case WM_USER +3: gfConnecting=FALSE; ReadHqDataAll(); if(ReCreateChild()!=0) return (-1); IsSzRead=IsShRead=TRUE; GetSelSet(); SetTimer(hWnd, 1, 100, NULL); SetTimer(hWnd, 2, 1000*HQ_REFRESH_TIME, NULL); break; case WM_USER +4: gfOnLine =FALSE; gfConnecting=TRUE; recNum =0; if(BeginConnect(HostName)<0) { Msg("连接主机失败,系统进入离线状态",MSG_VERT); PostMessage(hWnd,WM_USER+3,0,0L); } else { sprintf(temp,"正在连接主机%s",HostName); Msg(temp,MSG_VERT); SetTimer(hWnd, 1, 15000, NULL); } break; case WM_USER +5: Msg("读取深圳初始化文件",MSG_VERT); ReadHqData(0); IsSzRead=TRUE; break; case WM_USER +6: Msg("读取上海初始化文件",MSG_VERT); ReadHqData(1); IsShRead=TRUE; InitQsInfo(); GetSelSet(); if(access("winpy.dat",0)!=0) { StockInfo.type=FILE_WINPY; strcpy(StockInfo.name,"winpy.dat"); UDP_Send_Stock_Info(&StockInfo); } break; case WM_USER +7: LoadPy(); break; case WM_SIZE: CreateChilds(ghWndMain); break; case WM_SYSKEYDOWN: ret =toupper(wParam); switch(ret) { case 'H': SendMessage(ghWndHq, WM_KEYDOWN,VK_F1, 0L); break; case 'J': SendMessage(ghWndHq, WM_KEYDOWN,VK_F2, 0L); break; case 'R': SendMessage(ghWndXlt, WM_KEYDOWN,VK_F3, 0L); break; case 'A': SendMessage(ghWndHq, WM_KEYDOWN,VK_F4, 0L); break; case 'Z': SendMessage(ghWndHq, WM_KEYDOWN,VK_F5, 0L); break; case 'W': SendMessage(ghWndHq, WM_KEYDOWN,VK_F6, 0L); break; case 'S': SendMessage(ghWndHq, WM_KEYDOWN,VK_F7, 0L); break; case 'F': SendMessage(ghWndHq, WM_KEYDOWN,VK_F8, 0L); break; case 'E': SendMessage(ghWndHq, WM_KEYDOWN,VK_F9, 0L); break; case 'G': SendMessage(ghWndHq, WM_KEYDOWN,VK_F12, 0L); break; case 'Q': SendMessage(hWnd, WM_CLOSE,0, 0L); break; case '1': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgBuySell('B'); break; case '2': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgBuySell('S'); break; case '3': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgCancel(); break; case '4': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgCjcx(); break; case '5': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgWtcx(); break; case '6': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgYecx(); break; case '7': if((curChkUsrRes.userId !=0 && curChkUsrRes.flag==ANS_SUCC)|| gfTest) DlgChgPwd(); break; } break; case WM_TIMER: if(wParam ==2 && gfOnLine) CheckTime(TRUE); if(wParam ==1) { KillTimer(ghWndMain,1); if(gfConnecting &&!gfOnLine) { ErrMsg(hWnd, "连接主机失败,系统进入离线状态"); PostMessage(hWnd,WM_USER+3,0,0L); } Ip_Send_Pack(); //if(JyOffLineTime>0) // JyOffLineTime--; //if(JyOffLineTime==0) //{ // Msg("交易连接时间过长,系统复位",MSG_VERT); // curChkUsrRes.userId=0; //} //if(JyOffLineTime<10&&JyOffLineTime*(int)JyOffLineTime/2==JyOffLineTime // &&JyOffLineTime>0) // DrawTime(-2); //else DrawTime(-1); SetTimer(ghWndMain,1,400,NULL); } if(wParam ==6) DestroyWindow(hWnd); break; case WM_CHAR: if(ghWndSetup==NULL) { SendMessage(ghWndMsg, WM_CHAR, wParam, lParam); return 0; } break; case WM_KEYDOWN: if(wParam==VK_RETURN) { GetWindowText(hWndInput, inkey, sizeof(inkey)); ret =PreComm(inkey); switch(ret) { case IP_CONN_COMM: strcpy(HostName,inkey); strcpy(inkey,""); SendMessage(hWnd, WM_USER+4, 0, 0L); SetWindowText(hWndInput, ""); break; case NULL_COMM: case OP_CODE_COMM: case GP_CODE_COMM: if(IsWindowVisible(ghWndFx)) SendMessage(ghWndFx, WM_KEYDOWN, wParam, lParam); else if(IsWindowVisible(ghWndXlt)) SendMessage(ghWndXlt, WM_KEYDOWN, wParam, lParam); else SendMessage(ghWndHq, WM_KEYDOWN, wParam, lParam); break; case PY_NAME_COMM: if(winpy==NULL) break; for(i=0;i<10;i++) SeleGp[i][0]=-1; for(i =0,j=0; i<HqData[0].recCount&&j<MAX_SELE_NUM; i++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -