1.
ON_COMMAND(ID_OPTION_SETGROUP, OnOptionSetgroup)
void CMainFrame::OnOptionSetgroup()
{
CSetGroupDlg dlg;
dlg.DoModal();
}
G:\stock\TskingVS2019\src\Client\StkUI\Dialog\SetGroupDlg.cpp
股票分组设定
在stock.cpp 中有 m_szDomain字段,设置它的值即是所属板块
G:\stock\TskingVS2019\src\Client\StkLib\Src\Stock.cpp
//设置股票所属板块 by freeman
void CStockInfo::SetStockDomain(const char* szDomain)
{
memset(m_szDomain, 0, sizeof(m_szDomain));
if (NULL == szDomain)
return;
strncpy(m_szDomain, szDomain, min(sizeof(m_szDomain) - 1, strlen(szDomain)));
}
step 1:在读取磁盘财务数据时,在采取数据结构中填入了板块数据
G:\stock\TskingVS2019\src\Client\StkLib\Src\zhProvider.cpp
int LoadBasetable1(CStockContainer& container, LPCTSTR lpszFileName, DWORD dwMarket)
{
container.Lock();
....
//填入股票的板块和省份数据.策略为王的板块数据和省份数据是从财务数据中获取并填入的 by freeman
strcpy(basedatablock.m_szProvince, "block.m_szProvince");
strcpy(basedatablock.m_szDomain, "block.m_szDomain");
void* pArrayID = NULL;
if (map.Lookup(szCode, pArrayID))
{
int nIndex = ((int)pArrayID);
if (nIndex >= 0 && nIndex < container.GetSize())
{
container.ElementAt(nIndex).m_basedata.InsertBaseDataSort(basedatablock);
}
}
....
}
step 2:在加载财务数据时,填入板块数据
// 财务信息数据结构 CStock::dataBasetbl
typedef struct basedata_t {
DWORD m_dwMarket; // 证券市场类型,see CStock::StockMarket
char m_szCode[STKLIB_MAX_CODE2]; // 证券代码,以'\0'结尾
char m_szDomain[STKLIB_MAX_DOMAIN]; // 板块
char m_szProvince[STKLIB_MAX_PROVINCE]; // 省份
time_t m_time; // 日期,time_t
...
}
StkLib\Src\Stock.cpp:注释,策略为王的板块和省份数据是从财务数据中获取并填入的
//财务数据
BOOL CStockInfo::StatBaseIndex(DWORD dwDate)
{
SP_ASSERT(0 != dwDate);
if (m_basedata.GetSize() == 0)
return FALSE;
int nIndex = m_basedata.GetSize() - 1;
for (int i = m_basedata.GetSize() - 1; i >= 0; i--)
{
if (m_basedata.ElementAt(i).m_date <= dwDate)
{
nIndex = i;
break;
}
}
BASEDATA& block = m_basedata.ElementAt(nIndex);
//策略为王的板块和省份数据是从财务数据中获取并填入的 by freeman
strncpy(m_szDomain, block.m_szDomain, min(sizeof(m_szDomain), sizeof(block.m_szDomain)));
strncpy(m_szProvince, block.m_szProvince, min(sizeof(m_szProvince), sizeof(block.m_szProvince)));
二、扩展
1.先读取物理文件到容器,然后遍历容器填入板块信息
src/Client/StkUI/StkUI.cpp
AfxGetGroupContainer().Load( AfxGetProfile().GetGroupFile() );
SendMessage( hWnd, WM_USER_STARTUP_PROGRESS, nMin+nRange*4/30, 0 );
//add
//加载板块数据到容器
AfxGetDB().InstallCodetblBlock("D:\\Thirdprogram\\dzh2\\Downloaddzh365\\ABK\\downloaddzh365\\abk\\full.abk", "99");
//一次性填入股票板块数据
CDomainContainer& domains = AfxGetDomainContainer();
for (int i = 0; i < domains.GetSize(); i++)
{
CDomain& domain = domains.ElementAt(i);
//string blockName=domain.m_strName;
//m_listGroup.SetItemData(nItem, NULL);
for (int k = 0; k < domain.GetSize(); k++)
{
int id = 0;//股票在容器中的id号
if (AfxGetStockContainer().GetStockInfo(domain.ElementAt(k), NULL, &id))
{
CStockInfo& info = AfxGetStockContainer().ElementAt(id);//取得股票信息
//const char* domainstr=
info.SetStockDomain(info.GetStockDomain() + domain.m_strName);
CStockInfo& info1 = AfxGetStockContainer().ElementAt(id);//取得股票信息
int i = 0;
}
/*CStockInfo info;
if (!AfxGetStockContainer().GetStockInfo(domain.ElementAt(k), &info))
{
info.SetStockDomain(domain.m_strName);
int i= 0;
}*/
}
}
//add end
2.设置财务数据的代码中有填入板块数据的代码,注释掉,否则已填好的数据又被重置了。
//财务数据 策略为王的板块数据和省份数据是从财务数据中获取并填入的 by freeman
BOOL CStockInfo::StatBaseIndex(DWORD dwDate)
{
BASEDATA& block = m_basedata.ElementAt(nIndex);
//策略为王的板块数据和省份数据是从财务数据中获取并填入的 by freeman 从另外的地方填入
//strncpy(m_szDomain, block.m_szDomain, min(sizeof(m_szDomain), sizeof(block.m_szDomain))); //从财务数据结构中设置股票板块 by freeman
//strncpy(m_szProvince, block.m_szProvince, min(sizeof(m_szProvince), sizeof(block.m_szProvince)));
m_datebase = block.m_date
}