?? stkreceiver.cpp
字號:
if(hInst!=NULL) FreeLibrary(hInst);
CWnd::OnDestroy();
}
LRESULT CStkReceiver::OnStkReceiverInit(WPARAM wParam, LPARAM lParam)
{
// 通視及兼容設備
CString strProvider, strDriver;
strProvider = AfxRegQueryString(HKEY_LOCAL_MACHINE, _T("Software"), _T("stockdrv"), "", "", _T("Provider"), "Tongshi");
strDriver = AfxRegQueryString(HKEY_LOCAL_MACHINE, _T("Software"), _T("stockdrv"), "", "", _T("Driver"), "Stock.dll");
// 數據共享引用
gSTOCKDLL.Stock_Quit(m_hWnd);
gSTOCKDLL.UnloadDriver();
if (gSTOCKDLL.LoadDriver(strDriver)
&& gSTOCKDLL.GetStockDrvInfo(RI_SUPPORTEXTHQ, NULL)
&& gSTOCKDLL.Stock_Init(m_hWnd,WM_APP_STKRECEIVER_TSDATA,RCV_WORK_SENDMSG) > 0)
m_bTongshiRunning = TRUE;
else if (!wParam)
AfxMessageBox("無法加載接收系統。", MB_OK | MB_ICONINFORMATION);
return TRUE;
}
LRESULT CStkReceiver::OnStkReceiverSetup(WPARAM wParam, LPARAM lParam)
{
return gSTOCKDLL.SetupReceiver(TRUE);
}
LRESULT CStkReceiver::OnStkReceiverQuit(WPARAM wParam, LPARAM lParam)
{
gSTOCKDLL.Stock_Quit(m_hWnd);
m_bTongshiRunning = FALSE;
gSTOCKDLL.UnloadDriver();
return TRUE;
}
// 通視處理數據
LRESULT CStkReceiver::OnStkReceiverTsdata(
UINT wFileType, // 文件類型, 參見 StockDrv.H
LONG lPara)
{
int i = 0;
PBYTE pFileBuf = NULL;
PBYTE pBuffx = NULL;
PGZLXBINDATA pGZLX = NULL;
RCV_DATA * pHeader = (RCV_DATA *) lPara;
// 檢查參數
ASSERT(pHeader && pHeader->m_pData);
if (!pHeader || !pHeader->m_pData)
return -1L;
if (pHeader->m_nPacketNum <= 0 && !pHeader->m_bDISK)
return -1L;
// 對于處理較慢的數據類型,建議將數據備份,另創建一線程處理
switch(wFileType)
{
case RCV_REPORT:
{
// 檢查參數
if (pHeader->m_nPacketNum <= 0 || pHeader->m_bDISK)
return -1L;
MyQueueUserWorkItem(StkProcessReceiveReport, pHeader, WT_EXECUTEDEFAULT);
}
break;
case RCV_FILEDATA:
switch(pHeader->m_wDataType)
{
case FILE_HISTORY_EX: // 補日線數據
{
RCV_HISTORY_STRUCTEx * pDay = pHeader->m_pDay;
int nPacketNum = pHeader->m_nPacketNum;
CKData kdata(CKData::ktypeDay);
CString sCode;
DWORD dwMarket = CStock::marketUnknown;
// 讀取文件
if (pHeader->m_bDISK)
{
pDay = NULL;
CFile file;
if (file.Open(pHeader->m_File.m_szFileName,CFile::modeRead))
{
ASSERT(file.GetLength() == pHeader->m_File.m_dwLen);
nPacketNum = (int)(file.GetLength()/sizeof(RCV_HISTORY_STRUCTEx));
if (nPacketNum > 0)
pDay = new RCV_HISTORY_STRUCTEx[nPacketNum];
if (pDay)
file.Read(pDay, sizeof(RCV_HISTORY_STRUCTEx)*nPacketNum);
file.Close();
}
}
// 分配備份數據存儲空間
COMMPACKET * pCommPacket = AllocCommPacket(CStock::dataK, nPacketNum);
if (NULL == pCommPacket)
return -1L;
// 處理數據
DWORD dwCount = 0;
for(i=0; i<nPacketNum && pDay; i++)
{
if (pDay[i].m_head.m_dwHeadTag == EKE_HEAD_TAG)
{
if (kdata.GetSize() > 0)
{
kdata.AutoSetKType();
UpdateStockContainerByKData(AfxGetStockContainer(), sCode, kdata);
AfxGetDB().InstallKData(kdata);
kdata.RemoveAll();
}
sCode = pDay[i].m_head.m_szLabel;
dwMarket = TSMarket_to_Market(pDay[i].m_head.m_wMarket);
continue;
}
convert_TSHISTORY_to_KDATA(dwMarket, sCode, &(pDay[i]), &(pCommPacket->m_pKdata[dwCount]));
kdata.Add(pCommPacket->m_pKdata[dwCount]);
dwCount ++;
}
pCommPacket->m_dwCount = dwCount;
if (pHeader->m_bDISK && pDay)
delete [] pDay;
if (kdata.GetSize() > 0)
{
kdata.AutoSetKType();
UpdateStockContainerByKData(AfxGetStockContainer(), sCode, kdata);
AfxGetDB().InstallKData(kdata);
}
// 通知各股票信息顯示窗口,刷新行情數據
for(i=0; i<m_awndRcvData.GetSize(); i++)
::SendMessage(m_awndRcvData[i], WM_APP_STKRECEIVER_DATA, CStock::dataK, (LPARAM)pCommPacket);
// 釋放備份數據存儲空間
FreeCommPacket(pCommPacket);
}
break;
case FILE_MINUTE_EX: // 補分鐘線數據
case 83: // 補分筆數據
{
RCV_MINUTE_STRUCTEx * pMin = pHeader->m_pMinute;
ASSERT(pMin->m_head.m_dwHeadTag == EKE_HEAD_TAG);
CMinute minute;
BOOL bAutoSaveKDataMin = AfxGetProfile().GetAutoSaveKDataMin(); // 作為分鐘K線保存
CString sCode;
DWORD dwMarket = CStock::marketUnknown;
// 分配備份數據存儲空間
COMMPACKET * pCommPacket = AllocCommPacket(CStock::dataMinute, pHeader->m_nPacketNum);
if (NULL == pCommPacket)
return -1L;
DWORD dwCount = 0;
for(i=0; i<pHeader->m_nPacketNum; i++)
{
if (pMin[i].m_head.m_dwHeadTag == EKE_HEAD_TAG)
{
if (minute.GetSize() > 0)
{
CKData kdMin(CKData::ktypeMin5);
if (minute.ToKData(kdMin))
AfxGetDB().InstallKData(kdMin);
minute.RemoveAll();
}
sCode = pMin[i].m_head.m_szLabel;
dwMarket = TSMarket_to_Market(pMin[i].m_head.m_wMarket);
continue;
}
convert_TSMINUTE_to_MINUTE(dwMarket, sCode, &(pMin[i]), &(pCommPacket->m_pMinute[dwCount]));
if (bAutoSaveKDataMin)
minute.Add(pCommPacket->m_pMinute[dwCount]);
dwCount ++;
}
pCommPacket->m_dwCount = dwCount;
if (minute.GetSize() > 0)
{
CKData kdMin(CKData::ktypeMin5);
if (minute.ToKData(kdMin))
AfxGetDB().InstallKData(kdMin);
}
// 保存至本地文件
AfxGetDB().StoreMinute(pCommPacket->m_pMinute, pCommPacket->m_dwCount);
// 通知各股票信息顯示窗口,刷新行情數據
for(i=0; i<m_awndRcvData.GetSize(); i++)
::SendMessage(m_awndRcvData[i], WM_APP_STKRECEIVER_DATA, CStock::dataMinute, (LPARAM)pCommPacket);
// 釋放備份數據存儲空間
FreeCommPacket(pCommPacket);
}
break;
case FILE_POWER_EX: // 補充除權數據
{
RCV_POWER_STRUCTEx * pPower = pHeader->m_pPower;
int nPacketNum = pHeader->m_nPacketNum;
CDRData drdata;
CString sCode;
DWORD dwMarket = CStock::marketUnknown;
if (pHeader->m_bDISK)
{
pPower = NULL;
CFile file;
if (file.Open(pHeader->m_File.m_szFileName,CFile::modeRead))
{
ASSERT(file.GetLength() == pHeader->m_File.m_dwLen);
nPacketNum = (int)(file.GetLength()/sizeof(RCV_POWER_STRUCTEx));
if (nPacketNum > 0)
pPower = new RCV_POWER_STRUCTEx[nPacketNum];
if (pPower)
file.Read(pPower, sizeof(RCV_POWER_STRUCTEx)*nPacketNum);
file.Close();
}
}
// 分配備份數據存儲空間
COMMPACKET * pCommPacket = AllocCommPacket(CStock::dataDR, nPacketNum);
if (NULL == pCommPacket)
return -1L;
DWORD dwCount = 0;
for(i=0; i<nPacketNum && pPower; i++)
{
if (pPower[i].m_head.m_dwHeadTag == EKE_HEAD_TAG)
{
if (drdata.GetSize() > 0)
AfxGetDB().InstallDRData(drdata);
drdata.RemoveAll();
sCode = pPower[i].m_head.m_szLabel;
dwMarket = TSMarket_to_Market(pPower[i].m_head.m_wMarket);
continue;
}
convert_TSPOWER_to_DRDATA(dwMarket, sCode, &(pPower[i]), &(pCommPacket->m_pDrdata[dwCount]));
drdata.Add(pCommPacket->m_pDrdata[dwCount]);
dwCount ++;
}
if (pHeader->m_bDISK && pPower)
delete [] pPower;
if (drdata.GetSize() > 0)
AfxGetDB().InstallDRData(drdata);
pCommPacket->m_dwCount = dwCount;
// 通知各股票信息顯示窗口,刷新行情數據
for(i=0; i<m_awndRcvData.GetSize(); i++)
::SendMessage(m_awndRcvData[i], WM_APP_STKRECEIVER_DATA, CStock::dataDR, (LPARAM)pCommPacket);
// 釋放備份數據存儲空間
FreeCommPacket(pCommPacket);
}
break;
case FILE_MULTISORT_EX: // 綜合排名
{
RCV_MULTISORT_STRUCTEx * pMultisort = pHeader->m_pMultisort;
// 分配備份數據存儲空間
COMMPACKET * pCommPacket = AllocCommPacket(CStock::dataMultisort, pHeader->m_nPacketNum);
if (NULL == pCommPacket)
return -1L;
for(i=0; i<pHeader->m_nPacketNum; i++)
{
convert_TSMULTISORT_to_MULTISORT(&(pMultisort[i]), &(pCommPacket->m_pMultisort[i]));
}
pCommPacket->m_dwCount = pHeader->m_nPacketNum;
// 通知各股票信息顯示窗口,刷新行情數據
for(i=0; i<m_awndRcvData.GetSize(); i++)
::SendMessage(m_awndRcvData[i], WM_APP_STKRECEIVER_DATA, CStock::dataMultisort, (LPARAM)pCommPacket);
// 釋放備份數據存儲空間
FreeCommPacket(pCommPacket);
}
break;
case FILE_BASE_EX: // 錢龍兼容基本資料文件,m_szFileName僅包含文件名
{
if (pHeader->m_bDISK)
{
AfxGetDB().InstallBaseText(pHeader->m_File.m_szFileName, AfxGetFileTitle(pHeader->m_File.m_szFileName));
}
else
{
AfxGetDB().InstallBaseText(LPCTSTR(pHeader->m_pData), pHeader->m_File.m_dwLen, AfxGetFileTitle(pHeader->m_File.m_szFileName));
}
// 分配備份數據存儲空間
COMMPACKET * pCommPacket = AllocCommPacket(CStock::dataCode, 1);
if (NULL == pCommPacket)
return -1L;
CString sTemp = AfxGetFileTitleNoExt(pHeader->m_File.m_szFileName);
strncpy(pCommPacket->m_pStockcode[0].m_szCode, sTemp, min(sizeof(pCommPacket->m_pStockcode[0].m_szCode)-1,sTemp.GetLength()));
pCommPacket->m_pStockcode[0].m_dwMarket = CStock::marketUnknown;
// 通知各股票信息顯示窗口,刷新行情數據
for(i=0; i<m_awndRcvData.GetSize(); i++)
::SendMessage(m_awndRcvData[i], WM_APP_STKRECEIVER_DATA, CStock::dataBasetext, (LPARAM)pCommPacket);
// 釋放備份數據存儲空間
FreeCommPacket(pCommPacket);
}
break;
case FILE_NEWS_EX: // 新聞類,其類型由m_szFileName中子目錄名來定
if (pHeader->m_bDISK)
{
AfxGetDB().InstallNewsText(pHeader->m_File.m_szFileName, AfxGetFileTitle(pHeader->m_File.m_szFileName));
}
else
{
AfxGetDB().InstallNewsText(LPCTSTR(pHeader->m_pData), pHeader->m_File.m_dwLen, AfxGetFileTitle(pHeader->m_File.m_szFileName));
}
// 通知各股票信息顯示窗口,刷新行情數據
for(i=0; i<m_awndRcvData.GetSize(); i++)
::SendMessage(m_awndRcvData[i], WM_APP_STKRECEIVER_DATA, CStock::dataNews, NULL);
break;
case FILE_HTML_EX: // HTML文件,m_szFileName為URL
AfxGetProfile().AddHTMLURLToExplorer(pHeader->m_File.m_szFileName);
break;
case FILE_SOFTWARE_EX:
TRACE("%s\n",pHeader->m_File.m_szFileName);
TRACE("%d\n",pHeader->m_File.m_dwLen);
pBuffx = (PBYTE)pHeader->m_pData;
break;
case FILE_SHAZQDATA_EX: //h上海國債凈價交易
break;
case FILE_TYPE_RES:
TRACE("MSG: CStkReceiver::OnStkDataOK, Replaced data \n");
break;
default:
TRACE("Msg: CStkReceiver::OnStkReceiverData,Unkonw data type\n");
}
break;
}
return 0L;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -