请教:单文档多视图的问题

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线和成交量,在单视图上,我希望这两部分的空间可以用鼠标来变动,可以吗?应该怎样实现?

...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vocanicy 2008-05-05
  • 打赏
  • 举报
回复
第1个问题,楼上说的很明白了


两个视图之间的联系通过CDocument类来实现

第2个问题,可以通过定时器,定时触发UpdateAllViews,在视图的OnUpdate中每次只画一条线。

举例,第3个问题
你可以在CDocument类中申明一个成员变量来保存视图的偏移量,这两个视图都以这个偏移量来显示
如果其中一个视图翻页了,就修改这个偏移量,然后通过CDocument的UpdateAllViews来通知其它视图,你在其它视图类的OnUpdate中同步翻页即可

第4个问题类似,在文档试图类中保存当前选中日期

第5个问题,不明白你的意思
ccyiming 2008-05-05
  • 打赏
  • 举报
回复
1. 你重载一下CMainForm的OnSize, 在里面重新设置一下就可以了,这样,当窗口一旦有变化,会自动重新分配的。
其他的我还没学到, 不能帮上你了。。
tccqs 2007-12-06
  • 打赏
  • 举报
回复
up and mark!!
tjxin 2007-12-06
  • 打赏
  • 举报
回复
只能上传一个附件。。。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧