⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appmain.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* 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 + -