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

📄 uiframewnd.cpp

📁 程序经过了调试,直接运行就可以显示结果,为股市应用程序,VC++的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// UIFrameWnd.cpp : implementation file
//

#include "stdafx.h"
#include "afxmt.h"
#include "stock.h"
#include "UIFrameWnd.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WM_IRQ (WM_USER+200)
/////////////////////////////////////////////////////////////////////////////
// CUIFrameWnd

CCriticalSection m_CriticalSection;
vector<CData> CUIFrameWnd::m_SHIndexArray;
vector<CData> CUIFrameWnd::m_SHStockArray;
vector<CData> CUIFrameWnd::m_SZIndexArray;
vector<CData> CUIFrameWnd::m_SZStockArray;
unsigned int CUIFrameWnd::m_uiWriteCounter = 0;
unsigned int CUIFrameWnd::m_uiWriteIndex = 0;
unsigned int CUIFrameWnd::m_uiReadCounter = 0;
unsigned int CUIFrameWnd::m_uiReadIndex = 0;
int  CUIFrameWnd::Lastday=0;
BOOL CUIFrameWnd::m_bKill;
vector<CString> CUIFrameWnd::m_conserCode;
vector<CString> CUIFrameWnd::m_conserName;
vector<CString> CUIFrameWnd::m_appCode;
STOCK CUIFrameWnd::m_Stock[2000];
BOOL bControl=false;
KLine CUIFrameWnd:: data1[31];
CMainFrame *pMain = (CMainFrame *)AfxGetApp()->m_pMainWnd;
IMPLEMENT_DYNCREATE(CUIFrameWnd, CFrameWnd)

CUIFrameWnd::CUIFrameWnd()
{
	InitBulk();
	m_hLibrary = NULL;
}

CUIFrameWnd::~CUIFrameWnd()
{
	FreeLibrary();
}


BEGIN_MESSAGE_MAP(CUIFrameWnd, CFrameWnd)
//{{AFX_MSG_MAP(CUIFrameWnd)
ON_MESSAGE(WM_IRQ, OnIRQ)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUIFrameWnd message handlers


int CUIFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	m_hLibrary = ::LoadLibrary("fstrcv.dll");
	INITCARD* lpfunction = (INITCARD*)::GetProcAddress(m_hLibrary, "InitCard");
	unsigned int uiCardNumber = (*lpfunction)((this->m_hWnd), WM_IRQ);
	
	m_EnableMessage = (ENABLEMESSAGE*)::GetProcAddress(m_hLibrary, "EnableMessage");
	m_ReceiveInfo = (RECEIVEINFO*)::GetProcAddress(m_hLibrary, "ReceiveInfo");
	m_DataAcquisition = (DATAACQUISITION*)::GetProcAddress(m_hLibrary, "DataAcquisition");
	
	// TODO: Add your specialized creation code here
	
	return 0;
}
LRESULT CUIFrameWnd::OnIRQ(WPARAM wParam, LPARAM lParam)
{
	unsigned int iMsgCounter;
	unsigned int i;
	(*m_EnableMessage)(0);
	iMsgCounter = (*m_ReceiveInfo)();
	for(i = 0; i < iMsgCounter; i++)
	{
		m_CriticalSection.Lock();
		m_uiWriteIndex = m_uiWriteCounter % 2000;
		(*m_DataAcquisition)(&(m_Stock[m_uiWriteIndex]), i);
		++ m_uiWriteCounter;
		m_CriticalSection.Unlock();
	}
	(*m_EnableMessage)(1);
	CMainFrame::m_pReadThread->ResumeThread();
	return 1;
}
UINT CUIFrameWnd::ReadRingThread(PVOID pParam)
{	
	while(!m_bKill)
	{
		m_CriticalSection.Lock();
		while((m_uiReadCounter) < m_uiWriteCounter)
		{
			m_uiReadIndex = m_uiReadCounter % 2000;	
			switch(m_Stock[m_uiReadIndex].Type) 
			{
			case 0x10://-----------------上证指数
				ExpandPackage(m_SHIndexArray);
				++m_uiReadCounter;
				break;
			case 0x11://-----------------上证股票
				ExpandPackage(m_SHStockArray);
				++m_uiReadCounter;
				break;
			case 0x12://-----------------上证公告
				++m_uiReadCounter;
				break;				
			case 0x14://-----------------上证补分时
				++m_uiReadCounter;
				break;				
			case 0x15://-----------------上证补日线
				++m_uiReadCounter;
				break;				
			case 0x16://-----------------上证权息
				++m_uiReadCounter;
				break;				
			case 0x20://-----------------深证指数
				ExpandPackage(m_SZIndexArray);
				++m_uiReadCounter;
				break;
			case 0x21://-----------------深证股票
				ExpandPackage(m_SZStockArray);
				++m_uiReadCounter;
				break;
			case 0x24://-----------------深证补分时
				++m_uiReadCounter;
				break;				
			case 0x25://-----------------深证补日线
				++m_uiReadCounter;
				break;				
			case 0x26://-----------------深证权息
				++m_uiReadCounter;
				break;				
			case 0x31://-----------------存盘文件
				++m_uiReadCounter;
				break;				
			case 0x50://-----------------其它(瑞照规定)
				++m_uiReadCounter;
				break;				
			default://-------------------其它(自定义)
				++m_uiReadCounter;
				break;
			}
			
		}
		m_CriticalSection.Unlock();
		CMainFrame::m_pReadThread->SuspendThread();
	}
	return 0; 
}
void CUIFrameWnd::ExpandPackage(vector<CData>& Data)
{
    int iIndex, iRealTime;
	RealTime m_RealTime;
	iIndex = SearchCode(Data,m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Code , m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Name);
	if(((m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Volume) == m_SHIndexArray[1].m_pAllData->m_KLine.Volume) || //----------判断是否有重复数据
		(((m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.New) > (m_SHIndexArray[1].m_pAllData->m_KLine.LastClose * 1.1 + 0.01)) && //----*1.1+0.01涨停板
		((m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.New) < (m_SHIndexArray[1].m_pAllData->m_KLine.LastClose * 0.9 - 0.01))))//------*0.9-0.01跌停板
		return;
	else
	{
		m_RealTime.New = (float)(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.New)/1000;
		m_RealTime.Volume = (m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Volume);
		m_RealTime.Amount = (m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Amount);		
		m_RealTime.Time= CTime::GetCurrentTime();
        Data[iIndex].m_pAllData->m_KLine.Time= CTime::GetCurrentTime();
		Data[iIndex].m_pAllData->m_KLine.LastClose = (float)(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Close)/1000;
		Data[iIndex].m_pAllData->m_KLine.Highest = (float)(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.High)/1000;
		Data[iIndex].m_pAllData->m_KLine.Open = (float)(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Open)/1000;
		Data[iIndex].m_pAllData->m_KLine.Lowest = (float)(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Low)/1000;
		Data[iIndex].m_pAllData->m_KLine.New = (float)(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.New)/1000;
		Data[iIndex].m_pAllData->m_KLine.Volume = (m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Volume);
		Data[iIndex].m_pAllData->m_KLine.Amount = (m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Amount);
	}
	iRealTime = Data[iIndex].m_pAllData->m_RealData.Add(m_RealTime);

	if(!Search(m_appCode,m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Code))
	  m_appCode.push_back(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Code);
//	if(Lastday!=m_RealTime.Time.GetDay())
//	          bControl=false;
    if(pMain->bTime)
	{
    	bControl=false;
        pMain->bTime=false;
	}
	if(!bControl)
	{
	for(int j=0;j<m_appCode.size();j++)
	{
        int index,Num;
		index= SearchCode(Data,m_appCode[j]);
		Num=Readdata(m_appCode[j]);
		if(Num<30)
    	WriteData(m_appCode[j],Data[index].m_pAllData->m_KLine);
		else
		{
		   WriteDataOnce(m_appCode[j],Data[index].m_pAllData->m_KLine);	
		}
	}
//	Lastday=m_RealTime.Time.GetDay();
	bControl=true;
	}
   	if(m_Stock[m_uiReadIndex].ALLSTRUCT.INDEX.Code==pMain->pCode)
		pMain->Refresh(Data[iIndex]);	
}
int CUIFrameWnd::SearchCode(vector<CData>& Data, CString strCode, CString strName)
{
	int iLow = 0;
	int iHigh = (Data.size() - 1);
	int iMid = 0;
	CData Temp;
	Temp.m_strCode = strCode;
	Temp.m_strName = strName;
	while((iLow <= iHigh))
	{
		iMid = (int)((iLow + iHigh)/2);
		if(strCode.Compare(Data[iMid].m_strCode) == 0)
		{
			return iMid;
		}
		else if(strCode.Compare(Data[iMid].m_strCode) < 0)
		{
			iHigh = (iMid - 1);
		}
		else
		{
			iLow = (iMid + 1);
		}
	}
	if(strCode.Compare(Data[iMid].m_strCode) > 0)
	{
		m_conserCode.push_back(strCode);
		m_conserName.push_back(strName);
		Data.insert((Data.begin()+iMid + 1), Temp);
		return (iMid + 1);
	} 
	else
	{
		m_conserCode.push_back(strCode);
		m_conserName.push_back(strName);
		Data.insert((Data.begin()+iMid + 1), Temp);
		return iMid;
	}
	return 0;
}
void CUIFrameWnd::InitBulk(void)
{
    CData data;
	CStdioFile finSHStk, finSZStk, finSHIdx, finSZIdx;
	finSHIdx.Open("SHStock.txt",  CFile::modeRead);
	while(1)
	{
		CString str,strCode, strName;
		finSHIdx.ReadString(str);
		if(str == "")
			break;
		strCode = str.Left(str.Find(" ",0));
		strName = str.Right(str.GetLength() - str.Find(" ",0));
		data.m_strCode = strCode;
		data.m_strName = strName;
		m_SHStockArray.push_back(data);
		m_conserCode.push_back(strCode);
		m_conserName.push_back(strName);
		if(strCode!=_T(""))
		{
			strName=strCode+_T(".txt");
			CFile file(strName, CFile::modeCreate|CFile::modeNoTruncate);
			file.Close();
		}
	}
	finSHIdx.Close();
	finSHStk.Open("SHIndex.txt",  CFile::modeRead);
	while(1)
	{
		CString str,strCode, strName;
		finSHStk.ReadString(str);
		if(str == "")
			break;
		strCode = str.Left(str.Find(" ",0));
		strName = str.Right(str.GetLength() - str.Find(" ",0));
		data.m_strCode = strCode;
		data.m_strName = strName;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -