📄 stkdemo.cpp
字号:
// StkDemo.cpp : implementation file
//
// 通视股票接收示范程序
//
//
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "StkDemo.h"
#include "StockDrv.H"
#include "STKDRV.H"
CSTKDRV gSTOCKDLL;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStkDemo
CStkDemo::CStkDemo()
{
int i;
for(i=0; i<StkBufNum; i++){
m_Stock[i] = _T("股票: ");
}
m_StkPtr = 0;
m_Min = _T("分时走势:");
m_File = _T("文件:");
m_bRunFlag = FALSE;
}
CStkDemo::~CStkDemo()
{
}
BEGIN_MESSAGE_MAP(CStkDemo, CWnd)
//{{AFX_MSG_MAP(CStkDemo)
ON_WM_PAINT()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE(My_Msg_StkData,OnStkDataOK)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStkDemo message handlers
void CStkDemo::OnPaint()
{
int i;
int k;
int High;
int y;
TEXTMETRIC tm;
char * pTitle = " 股号 名 称 最新 今开 昨收 最高 最低 成交量 成交额";
CPaintDC dc(this); // device context for painting
dc.GetTextMetrics(&tm);
High = tm.tmHeight + 3;
k = m_StkPtr;
y = 1;
dc.TextOut(1,y,pTitle,strlen(pTitle));
y += High;
for(i=0; i<StkBufNum; i++)
{
k = k % StkBufNum;
dc.TextOut(1,y,m_Stock[k],m_Stock[k].GetLength());
y += High;
k ++;
}
y += High;
dc.TextOut(1,y,m_Min,m_Min.GetLength());
y += High;
dc.TextOut(1,y,m_File,m_File.GetLength());
}
// 处理数据
LONG CStkDemo::OnStkDataOK(
UINT wFileType, // 文件类型, 参见 StockDrv.H
LONG lPara)
{
int i;
PBYTE pFileBuf = NULL;
RCV_DATA * pHeader;
int j;
pHeader = (RCV_DATA *) lPara;
// 对于处理较慢的数据类型,建议将数据备份,另创建一线程处理
switch( wFileType )
{
case RCV_REPORT:
{
int nBufSize = pHeader->m_pReport[0].m_cbSize;
PBYTE pBaseBuf = (PBYTE)&pHeader->m_pReport[0];
for(i=0; i<pHeader->m_nPacketNum; i++)
{
RCV_REPORT_STRUCTEx & Buf = *(PRCV_REPORT_STRUCTEx)(pBaseBuf + nBufSize*i );
m_Stock[m_StkPtr].Format("%6s %8s %8.3f %8.3f %8.3f %8.3f %8.3f %10.0f %10.f",
Buf.m_szLabel,Buf.m_szName,Buf.m_fNewPrice,Buf.m_fOpen,Buf.m_fLastClose,\
Buf.m_fHigh,Buf.m_fLow,Buf.m_fVolume,Buf.m_fAmount);
m_StkPtr ++;
m_StkPtr = m_StkPtr % StkBufNum;
}
}
break;
case RCV_FILEDATA:
if( !pHeader->m_pData || pHeader->m_wDataType == FILE_TYPE_RES)
{
TRACE("MSG: CStkDemo::OnStkDataOK, Replaced data \n");
break;
}
switch(pHeader->m_wDataType)
{
case FILE_HISTORY_EX: // 补日线数据
RCV_HISTORY_STRUCTEx * pDay;
pDay = pHeader->m_pDay;
ASSERT(pHeader->m_pDay[0].m_head.m_dwHeadTag == EKE_HEAD_TAG);
m_File = "日线";
j = 0;
for(i=0; i<pHeader->m_nPacketNum ; i++)
{
if( pDay[i].m_head.m_dwHeadTag == EKE_HEAD_TAG )
{
m_File = m_File + (const char *) pDay[i].m_head.m_szLabel + " ";
j ++;
}
if( j > 10) break;
}
break;
case FILE_MINUTE_EX: // 补分钟线数据
RCV_MINUTE_STRUCTEx * pMin;
pMin = pHeader->m_pMinute;
ASSERT(pMin->m_head.m_dwHeadTag == EKE_HEAD_TAG);
m_Min = "分时走势: ";
for(i=0; i<pHeader->m_nPacketNum; i++)
{
if( pMin[i].m_head.m_dwHeadTag == EKE_HEAD_TAG )
{
m_Min = m_Min + (LPCSTR)pMin[i].m_head.m_szLabel + " ";
}
}
break;
case FILE_BASE_EX: // 钱龙兼容基本资料文件,m_szFileName仅包含文件名
m_File.Format("基本资料: %s",pHeader->m_File.m_szFileName);
break;
case FILE_NEWS_EX: // 新闻类,其类型由m_szFileName中子目录名来定
m_File.Format("公告消息: %s",pHeader->m_File.m_szFileName);
break;
default:
TRACE("Msg: CStkDemo::OnStkDataOK,Unkonw data type\n");
}
break;
}
RedrawWindow();
return 0L;
}
int CStkDemo::MyCreate(CWnd* pWnd)
{
CRect rect(0, 0, 550,280);
HBRUSH hBrush;
if( m_bRunFlag ) return -1;
hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,hBrush);
CreateEx(0,lpszClassName,"股票接收测试",WS_OVERLAPPEDWINDOW,
rect,pWnd, 0, NULL);
ShowWindow(SW_SHOWNORMAL);
UpdateWindow();
int ok = gSTOCKDLL.Stock_Init(m_hWnd,My_Msg_StkData,RCV_WORK_SENDMSG); // 数据共享引用
if( ok > 0 )
{
char szTitle[10];
CString Title;
Title.Format("股票接收测试-%08lX",gSTOCKDLL.GetStockDrvInfo(RI_IDCODE,szTitle));
SetWindowText(Title);
m_bRunFlag = TRUE;
return 1;
}
PostQuitMessage(-1);
return -1;
}
void CStkDemo::OnDestroy()
{
CWnd::OnDestroy();
m_bRunFlag = FALSE;
gSTOCKDLL.Stock_Quit(m_hWnd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -