📄 scdemodlg.cpp
字号:
sprintf(strText, "收到下载除权数据 %d 个", pdl->m_lCount);
SetDlgItemText(IDC_DOWN_LOAD, strText);
}
break;
case SC_DL_XX: // 资讯数据下载:交易所公告、信息地雷、新闻、综合等
{
SC_Download *pdl = (SC_Download *)lParam;
switch ( pdl->m_cClass ) {
case CLASS_JYSXX:
sprintf(strText, "收到下载交易所公告 %d 个", pdl->m_lCount);
break;
case CLASS_STKINFO:
sprintf(strText, "收到下载历史信息地雷 %d 个", pdl->m_lCount);
break;
case CLASS_NEWS:
sprintf(strText, "收到下载新闻 %d 个", pdl->m_lCount);
break;
case CLASS_STOCKBASE:
sprintf(strText, "收到下载F10 %d 个", pdl->m_lCount);
break;
case CLASS_MKTINFO:
sprintf(strText, "收到下载综合资讯 %d 个", pdl->m_lCount);
break;
default:
break;
}
SetDlgItemText(IDC_DOWN_LOAD, strText);
}
break;
case SC_DL_TRACE: // 分笔明细下载
{
SC_Download *pdl = (SC_Download *)lParam;
sprintf(strText, "收到下载分笔数据 %d 个", pdl->m_lCount);
SetDlgItemText(IDC_DOWN_LOAD, strText);
}
break;
default:
break;
}
return 1;
}
void CSCDemoDlg::_DeleteMLink()
{
TMLink *pTemp, *pML = m_pMLHead;
while ( pML ) {
delete [] (char *)pML->m_pm;
pTemp = pML;
pML = pML->m_pNext;
delete pTemp;
}
m_pMLHead = m_pMLTail = NULL;
}
SCMarket *CSCDemoDlg::_GetMarket(WORD wMarket)
{
TMLink *pML = m_pMLHead;
while ( pML ) {
if ( pML->m_pm->m_wMarket == wMarket )
return pML->m_pm;
pML = pML->m_pNext;
}
return NULL;
}
CSCDemoDlg::TMLink *CSCDemoDlg::_GetMarketLnk(WORD wMarket)
{
TMLink *pML = m_pMLHead;
while ( pML ) {
if ( pML->m_pm->m_wMarket == wMarket )
return pML;
pML = pML->m_pNext;
}
return NULL;
}
// 把所有市场保存到一条链表中
BOOL CSCDemoDlg::_AddMarket2Link(SCMarket *pm)
{
int nSize;
char *p;
TMLink *pml;
BOOL bTailModify;
nSize = sizeof(SCMarket) + (pm->m_nCount-1) * sizeof(StockInfo);
p = new char [nSize];
if ( !p )
return FALSE;
if ( m_pMLHead == NULL ) {
pml = new TMLink;
if ( !pml ) {
delete []p;
return FALSE;
}
pml->m_pNext = NULL;
m_pMLTail = m_pMLHead = pml;
}
else {
pml = _GetMarketLnk(pm->m_wMarket);
if ( pml ) {
bTailModify = FALSE;
delete [] (char *)pml->m_pm;
}
else {
bTailModify = TRUE;
pml = new TMLink;
}
if ( !pml ) {
delete []p;
return FALSE;
}
if ( bTailModify ) {
pml->m_pNext = NULL;
m_pMLTail->m_pNext = pml;
m_pMLTail = pml;
}
}
pml->m_pm = (SCMarket *)p;
memcpy(p, pm, nSize);
return TRUE;
}
void CSCDemoDlg::_InitTree()
{
UpdateData();
int i;
TMLink *pML;
DWORD dwData;
SCMarket *pm;
char strText[128];
HTREEITEM hRoot, hItem;
m_treeStock.DeleteAllItems();
pML = m_pMLHead;
while ( pML ) {
pm = pML->m_pm;
if ( pm ) {
hRoot = m_treeStock.InsertItem(pm->m_Name);
dwData = pm->m_wMarket;
dwData <<= 16;
m_treeStock.SetItemData(hRoot, dwData);
for ( i=0; i<pm->m_nCount; ++i ) {
sprintf(strText, "%s %s", pm->m_Siif[i].m_szLabel, pm->m_Siif[i].m_szName);
hItem = m_treeStock.InsertItem(strText, hRoot);
dwData = pm->m_wMarket;
dwData <<= 16;
dwData |= i;
m_treeStock.SetItemData(hItem, dwData);
}
}
pML = pML->m_pNext;
}
}
void CSCDemoDlg::OnSelchangeListFunc()
{
// TODO: Add your control notification handler code here
_SCAskData();
}
void CSCDemoDlg::OnSelchangeListTitle()
{
// TODO: Add your control notification handler code here
if ( m_bIMTitle && m_pIMTitle ) {
UpdateData();
WORD wMarket;
short nIndex;
HTREEITEM h = m_treeStock.GetSelectedItem();
if ( h == NULL )
return;
DWORD nID = m_treeStock.GetItemData(h);
wMarket = (WORD)(nID >> 16);
nIndex = (short)(nID & 0xffff);
if ( m_nLstTitle >= 0 && m_nLstTitle < m_nIMCnt ) {
SC_IMDataAsk imd;
imd.m_Head.m_nType = SC_IMCONTENT;
imd.m_Head.m_cStatus = 1;
imd.m_Head.m_lIndex = m_lAskIndex;
imd.m_cClass = m_cClass;
imd.m_nSize = 1;
imd.m_ID[0].m_lChkSum = 0; //m_pIMTitle[m_nLstTitle].m_lChkSum;
imd.m_ID[0].m_lID = m_pIMTitle[m_nLstTitle].m_lID;
imd.m_sID.m_nIndex = nIndex;
imd.m_sID.m_wMarket = wMarket;
imd.m_lDate = m_lClassDate;
m_Dll.SCAskData(&imd, sizeof(SC_IMDataAsk));
}
++m_lAskIndex;
}
// _AskIMData();
}
void CSCDemoDlg::OnSelchangedTreeStock(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
//_AskData();
_SCAskData();
}
void CSCDemoDlg::_SCAskData()
{
char cClass;
WORD wMarket;
short nIndex;
int nAskLen;
char tmpbuf[1024];
long lStartDate, lEndDate;
UpdateData();
if ( m_nLstFunc == -1 )
return;
sprintf(tmpbuf, "%d%02d%02d", m_dateStart.GetYear(), m_dateStart.GetMonth(), m_dateStart.GetDay());
lStartDate = atol(tmpbuf);
sprintf(tmpbuf, "%d%02d%02d", m_dateEnd.GetYear(), m_dateEnd.GetMonth(), m_dateEnd.GetDay());
lEndDate = atol(tmpbuf);
memset(tmpbuf, 0, 1024);
if ( m_nLstFunc == 4 || m_nLstFunc == 5 ) {
// 新闻和综合资讯与市场无关
wMarket = 0;
nIndex = 0;
}
else {
HTREEITEM h = m_treeStock.GetSelectedItem();
if ( h == NULL )
return;
DWORD nID = m_treeStock.GetItemData(h);
wMarket = (WORD)(nID >> 16);
nIndex = (short)(nID & 0xffff);
}
nAskLen = 0;
switch ( m_nLstFunc ) {
case 0:
{
// SC_NowAsk *pNow = (SC_NowAsk *)tmpbuf;
}
break;
case 1:
cClass = CLASS_JYSXX;
goto ASKIM;
case 2:
cClass = CLASS_STOCKBASE;
goto ASKIM;
case 3:
cClass = CLASS_STKINFO;
goto ASKIM;
case 4:
cClass = CLASS_NEWS;
goto ASKIM;
case 5:
cClass = CLASS_MKTINFO;
ASKIM:
{
SC_IMTitleAsk *pta = (SC_IMTitleAsk *)tmpbuf;
pta->m_Head.m_nType = SC_IMTITLE;
pta->m_Head.m_cStatus = 1;
pta->m_Head.m_lIndex = m_lAskIndex;
pta->m_sID.m_nIndex = nIndex;
pta->m_sID.m_wMarket = wMarket;
pta->m_cClass = cClass;
pta->m_lStartDate = lStartDate;
pta->m_lEndDate = lEndDate;
nAskLen = sizeof(SC_IMTitleAsk);
}
break;
case 6: // 五分钟
{
TDate *p5m;
SC_KLineAsk *pk = (SC_KLineAsk *)tmpbuf;
pk->m_Head.m_nType = SC_KLINE;
pk->m_Head.m_cStatus = 1;
pk->m_Head.m_lIndex = m_lAskIndex;
pk->m_sID.m_nIndex = nIndex;
pk->m_sID.m_wMarket = wMarket;
pk->m_wDataType = KLINE_MIN5DATA;
p5m = (TDate *)&pk->m_tBegin;
p5m->SetStdDate(lStartDate);
p5m->SetStdTime(930);
p5m = (TDate *)&pk->m_tEnd;
p5m->SetStdDate(lEndDate);
p5m->SetStdTime(1500);
nAskLen = sizeof(SC_KLineAsk);
}
break;
case 7: // 日线
{
SC_KLineAsk *pk = (SC_KLineAsk *)tmpbuf;
pk->m_Head.m_nType = SC_KLINE;
pk->m_Head.m_cStatus = 1;
pk->m_Head.m_lIndex = m_lAskIndex;
pk->m_sID.m_nIndex = nIndex;
pk->m_sID.m_wMarket = wMarket;
pk->m_wDataType = KLINE_DAYDATA;
pk->m_tBegin = lStartDate;
pk->m_tEnd = lEndDate;
nAskLen = sizeof(SC_KLineAsk);
}
break;
case 8: // 除权
{
SC_CQAsk *pc = (SC_CQAsk *)tmpbuf;
pc->m_Head.m_nType = SC_CQ;
pc->m_Head.m_cStatus = 1;
pc->m_Head.m_lIndex = m_lAskIndex;
pc->m_sID.m_nIndex = nIndex;
pc->m_sID.m_wMarket = wMarket;
nAskLen = sizeof(SC_CQAsk);
}
break;
case 9: // 盘口
{
SC_PankouAsk *pp = (SC_PankouAsk *)tmpbuf;
SCMarket *pm = _GetMarket(wMarket);
if ( pm ) {
pp->m_Head.m_nType = SC_PANKOU;
pp->m_Head.m_cStatus = 1;
pp->m_Head.m_lIndex = m_lAskIndex;
pp->m_sID.m_nIndex = nIndex;
pp->m_sID.m_wMarket = wMarket;
pp->m_lDate = pm->m_lDate;
nAskLen = sizeof(SC_PankouAsk);
}
else
return;
}
break;
}
m_strData = "";
m_lstTitle.ResetContent();
UpdateData(FALSE);
m_bIMTitle = FALSE;
// 请求数据
if ( nAskLen > 0 )
m_Dll.SCAskData(tmpbuf, nAskLen);
++m_lAskIndex;
if ( m_lAskIndex == 0 ) // 0表示非请求返回,故请求包的索引不能为0
m_lAskIndex = 1;
}
void CSCDemoDlg::OnClearPrevAsk()
{
// TODO: Add your control notification handler code here
SCHead aHead;
aHead.m_lIndex = m_lAskIndex;
aHead.m_nType = SC_CLEAR_PREVREQ;
aHead.m_cStatus = 1;
m_Dll.SCAskData(&aHead, sizeof(aHead));
}
void CSCDemoDlg::OnUsername()
{
// TODO: Add your control notification handler code here
char strName[32];
int nSize;
if ( m_Dll.SCGetInfo(INFO_USERNAME, strName, &nSize) )
MessageBox(strName);
else
MessageBox("没有登录");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -