请教:单文档多视图的问题
tjxin 2007-12-06 07:07:46 想写一个画K线图的程序。
要把一个窗口分成2半,上面画K线,下面画成交量,并且希望使上下两半的空间大小可以用鼠标来拖动改变,想上半部分大一些就大一些,想下半部分大一些就大一些。
现在用单文档多视图来解决.
现在初步已经实现了这个.但是遇到以下几个问题,求教.
谢谢!
1、如何使上、下两个视图保持一定的比例?比如说K线图占2/3,成交量占1/3,改变窗口大小的时候,这个比例也不变。现在我实现的程序中,程序刚运行起来的时候,能够保持这个比例,但是一旦最大化窗口后,上下比例就改变了。(见前两张图)
这个地方的代码是这样的,请大家帮忙看看:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
/*
return m_wndSplitter.Create(this,
2, 1, // TODO: adjust the number of rows, columns
CSize(10, 10), // TODO: adjust the minimum pane size
pContext);
*/
RECT crect;
GetClientRect(&crect);
int kWindowHeight = crect.bottom*2/3;
VERIFY(m_wndSplitter.CreateStatic(this, 2, 1));
VERIFY(m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTestView),
CSize(0, kWindowHeight), pContext));
VERIFY(m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CVolumeView),
CSize(0, 0), pContext));
return TRUE;
}
2、我现在是先在一个视图中把所有的K线画一遍,然后再在另一个视图中把所有的成交量画一遍。如果想要:画一根K线,再画一根成交量图;然后再画一根K线,再画一根成交量图;……;这样一根一根画,这个怎么实现?
3、如果当前窗口只能显示一部分K线图,那我想用翻页键来往前翻,怎样做到往前翻一页的时候,一个视图里的K线翻到前面了,另一个视图中的成交量也能相对应的翻过去?
4、现在很多股票软件都支持十字光标,就是当鼠标点到某一天的K线上时,出来一个十字线。我现在使用了两个视图,怎样实现这个十字线的功能,使得当鼠标点在K线上的时候,十字线能够在当天的成交量上也有显示;反过来当鼠标点在成交量上的时候,K线上也有十字线。(十字线的样子见图)
5、我知道可以在单文档单视图上画K线和成交量,在单视图上,我希望这两部分的空间可以用鼠标来变动,可以吗?应该怎样实现?