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

📄 scdemodlg.cpp

📁 数畅接口示范例程源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			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 + -