受欢迎的博客标签

STKUI界面分析

Published

界面如下:

1------IDR_MAINFRAME   程序的主菜单

2------IDR_MAINBAR     工具栏

3------IDR_SLISTBAR    工具栏

4------IDR_SIMUBAR     工具栏

17-----IDR_PERIODBAR   工具栏

18-----IDR_VIEWBAR     工具栏

以下是视图

5------CStragegyView   基类---CTreeView-----策略

6------CGroupView      基类---CTreeView-----分组

7------CTechsView      基类---CTreeView-----指标

8------CWizardView     基类---CFormView-----向导

9------CSimuView       基类---CFormView-----策略

10-----CSListView      基类---CFormView-----股票列表

11-----CRealTimeView   基类---CView---------分时行情

12-----CMultiSortView  基类---CView---------综合排名

13-----CGraphView      基类---CView---------技术图表;画日K线、其他周期K线的类;StkUI\View\StockGraph.cpp;StkUI\View\GraphView.cpp

14-----CBaseView       基类---CEditView-----基本信息

15-----CInfoView       基类---CHtmlView-----在线资讯

16-----CSelectorView   基类---CFormView-----智能选股

 

对话框

对话框位置

StkUI\Dialog\AlarmResultDlg.cpp

数据管理

CInstallPacDlg installdlg; //安装K线数据包
CTyDataDlg tydata; //导出K线数据包
CSetDrdataDlg setdr;//权息资料
CSetBaseDlg setbase;//板块财务F10导入
CSetBasedataDlg setbasedata;//基本资料修改
CSetKDataDlg setkdata;//K线修复

 

使用到的全局变量定义

G:\stock\TskingVS2019\src\Client\StkLib\Src\AfxCore.cpp

7.调用股票数据
BOOL AfxReloadStock( CStock & stock )
{
	CStockInfo info = stock.GetStockInfo();

	// Reload AfxGetStockMain()
	AfxGetStockContainer().GetStockInfo( info.GetStockCode(), &info );

	stock.Clear( );
	stock.SetStockInfo( &info );
	stock.SetDatabase( &AfxGetDB() );
	stock.PrepareData( CStock::dataK, CKData::ktypeDay );
	
	// Merge New
	stock.GetKDataDay().MergeKData( &(info.m_kdata) );
	
	stock.PrepareData( CStock::dataK, CKData::ktypeWeek );
	stock.PrepareData( CStock::dataK, CKData::ktypeMonth );
	stock.PrepareData( CStock::dataK, CKData::ktypeMin1);//extend 1分钟K线 by freeman 
	stock.PrepareData( CStock::dataK, CKData::ktypeMin5 );
	stock.PrepareData( CStock::dataK, CKData::ktypeMin15 );
	stock.PrepareData( CStock::dataK, CKData::ktypeMin30 );
	stock.PrepareData( CStock::dataK, CKData::ktypeMin60 );
	return TRUE;
}

加载分时线数据
G:\stock\TskingVS2019\src\Client\StkLib\Src\AfxCore.cpp

int AfxRefreshStockContainerMinute( CStockContainer & container, LONG lStockType, int nSecondsToRead )
{
	container.Lock();

	time_t	tmTradeLatest	=	-1;

	int	nCount = 0;
	for( int i=0; i<container.GetSize(); i++ )
	{
		CStockInfo & info = container.ElementAt(i);
		if( info.GetType() != lStockType )
			continue;

		CStock	stock;
		stock.SetStockInfo( &info );
		stock.SetDatabase( &AfxGetDB() );
		//加载分时线数据 by freeman
		AfxGetDB().LoadMinute( &stock );
		info.m_minute.RemoveAll();
		
		CMinute	& minstock = stock.GetMinute();
		if( -1 == tmTradeLatest && stock.GetMinute().GetSize() > 0 )
			tmTradeLatest	=	CSPTime::GetTimeTradeLatest( minstock[0].m_time );
		for( int i=0; i<minstock.GetSize(); i++ )
		{
			if( -1 == nSecondsToRead || tmTradeLatest-minstock[i].m_time<nSecondsToRead )
				info.m_minute.Add( minstock[i] );
		}
		
		nCount	++;
	}
	container.UnLock();
	return nCount;
}

 

GraphView  StockGraph  MainFrm三者之间的关系

三者之间的层级与调用关系

[ MainFrm ] (主框架窗口)
   └─▸ 管理/包含
      [ GraphView ] (视图窗口)
         └─▸ 依赖/持有 & 调用
            [ StockGraph ] (图表渲染引擎)

 

MainFrm (主框架窗口 / CMainFrame):

负责管理整体的 UI 框架(如菜单栏、工具栏、状态栏、多文档标签页/MDI 子窗口),协调各个子窗口的创建、销毁与布局调度。它是整个界面的控制中枢。

 

GraphView (图形视图窗口 / CGraphView / CView)

继承自 CView 或 CScrollView,负责接收 Windows 绘图消息(如 OnDraw / OnPaint)、鼠标交互(拖拽、放大缩小、十字光标)以及键盘事件。它将具体的绘制工作委托给 StockGraph 处理

StockGraph (股票图表绘制与逻辑引擎)

封装具体的行情图表绘制算法(如 K 线柱体、均线、MACD、副图指标等)

 

消息传递链:

MainFrm 接收全局命令(如切换股票代码、切换周期) -> 通知当前激活的 GraphView -> GraphView -> 更新 StockGraph 中的数据源并刷新显示

Windows 发送 WM_PAINT 消息给 GraphView $\rightarrow$ GraphView 获取绘图设备上下文(CDC*) --.> 传递给 StockGraph::Draw(CDC* pDC) 进行最终的 K 线和图形渲染。

 

用户点击或缩放窗口 .-> 捕获鼠标/键盘消息 $\rightarrow$ 调用 StockGraph 更新坐标、偏移量或放大倍率 .-> 触发 GraphView::Invalidate()