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

📄 hq_cl.c

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