单文档多视图中视图间数据传送的问题,在线等!!
我想在两个视图中传送数据
视图1对参数进行配置,用一个INT型变量表示,如果用户选择了X,就把1赋给这个变量,选择了Y就把2赋给这个变量。
然后把这个变量传到视图2中去
我想在视图2种的OnInitialUpdate()中就对这个变量进行选择,但值却传不过来
我用过GetDocument,App这些方法,可还是一样在OnInitialUpdate()根本就改变不了
但我这个程序设计的思想必须在OnInitialUpdate()中对这个变量进行选择
请问我怎么样才能在OnInitialUpdate()中用到我传过来的变量呢?谢谢各位大虾!!
[解决办法]
但我这个程序设计的思想必须在OnInitialUpdate()中对这个变量进行选择
请问我怎么样才能在OnInitialUpdate()中用到我传过来的变量呢?谢谢各位大虾!!
__________________________________
首先,必须明确,你这个思想压根就是错误的。
OnInitialUpdate()函数仅仅在View初始化时调用一次,界面显示之后,这个函数就不会再次调用了。此时,另外一个View更新数据时,不可能把更新后的数据传送给这个View内部已经调用过的函数。
正确的思路是,在Doc中定义变量,然后正常显示出界面。
用户在View1中改变了Doc中的这个变量,然后让Doc更新View2
更新函数类似于:
CView1::UpdateVars()
{
CDrawDoc* pDoc = GetDocument();
pDoc->m_var = newvalue;
POSITION pos = pDoc->GetFirstViewPosition();
CView1* pView1 = (CView1*)pDoc->GetNextView(pos);
CView2* pView2 = (CView2*)pDoc->GetNextView(pos);
if(pView2)
{
pView2->OnUpdate(NULL, 0, NULL);
}
}
然后在View2的OnUpdate()函数中书写你对该变量的响应。
如果你觉得一定要用OnInitialUpdate()才能解决问题,那么你的程序结构一定有问题。
App的方法,尽量少用。不符合MFC的文档/视规范。
[解决办法]
CView::OnUpdate不是直接调用的,而是通过CDocument类的UpdateAllViews来间接调用的
文档视图类结构应该以文档为中心,视图之间最好不要直接通讯
将你的配置信息保存在CDocument中,然后调用UpdateAllViews通知所有视图Update