想写一个画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线和成交量,在单视图上,我希望这两部分的空间可以用鼠标来变动,可以吗?应该怎样实现?
要把一个窗口分成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线和成交量,在单视图上,我希望这两部分的空间可以用鼠标来变动,可以吗?应该怎样实现?
解决方案 »
- 郁闷了,一个简单问题 combo box 获得一行字符串
- tcp连接后,客户端随后发送RST,请问有可能是什么原因引起的这个RST?谢谢
- 就找工作而言,学VC++有前途吗?有没有必要转向java?
- 关于 CEdit 的 EN_CHANGE 事件
- 求救:怎么在VC中调用VB的Dll
- 问一个VC与Access问题!
- 请问一个工程在不同的电脑上调试,它的pch文件会出现错误
- 用ADO连接数据库,为什么打开记录集时用SELECT语句有问题,高手请指教,急
- 在控件中是否可以在一开始就domodal出一个对话框?
- 弄了个VS2012
- 求vc读写Excel2003的代码?
- 利用串口读取电子称数据时,电子称不断传送数据,如何才能获取需要的重量值?
其他的我还没学到, 不能帮上你了。。
两个视图之间的联系通过CDocument类来实现第2个问题,可以通过定时器,定时触发UpdateAllViews,在视图的OnUpdate中每次只画一条线。举例,第3个问题
你可以在CDocument类中申明一个成员变量来保存视图的偏移量,这两个视图都以这个偏移量来显示
如果其中一个视图翻页了,就修改这个偏移量,然后通过CDocument的UpdateAllViews来通知其它视图,你在其它视图类的OnUpdate中同步翻页即可第4个问题类似,在文档试图类中保存当前选中日期第5个问题,不明白你的意思