两个视图之间的消息传递 MFC里有一个全局的对象,好像是用GetApp什么函数获取的,取得的是一个类,可以通过这个传递指针或数据什么的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通过主框架窗口中转AfxGetMainWnd() 通过主框架窗口中转AfxGetMainWnd() 在app的头文件里面声明m_pleftView;m_prightViewCRightView(){ theApp.m_prightView = this;}CLeftView(){ theApp.m_plrftView = this;} CMainFrame *pMain = (CMainFrame *)AfxGetMainWnd();CLeftView *pLeftView = (CLeftView *)pMain->m_spliter.GetPane(0,0);CRighView *pRightView = (CRighView *)pMain->m_spliter.GetPane(0,1);后面就可以直接用pLeftView和pRightView访问各自视图中的数据,同样可以向各自视图发送自定义消息。 //Info.h enum {comBegin,comData,comEnd}; class CInfo::CObject { int len; BYTE data[1024]; };//LeftView.h class CLeftView{ CInfo info; .... };//LeftView.cpp...void CLeftView::OnTimer( UINT nIDEvent ){ CDocument *pDoc=GetDocument(); //start //pDoc->UpdateAllViews(this,comBegin,0); //SendData pDoc->UpdateAllViews(this,comData,&info); //end //pDoc->UpdateAllViews(this,comEnd,0); }//RightView.cpp void CRightView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint ); { if(pSender !=this && pSender!=NULL){ switch(lHint){ case comBegin: / *PreClearView */ break; case comData:{ CInfo *pInfo=pHint; ...... } break; case comEnd: { .... } break; } Invalidate(); } } UpdateAllViewsOnUpdate这两个函数,就是用来在同一个文档的,不同视图之间通讯的,这个是MFC专门做的,就是做这个用的。1)刷新所有视图,无特殊化。这个一般在文档的,某个函数里使用,如序列化函数,当数据改变时,刷新所有视图UpdateAllViews(NULL,...);2)刷新本视图以外的其他所有视图 CDocument *pDoc=GetDocument(); pDoc->UpdateAllViews(this,);第一个参数,视图类的指针,第二个参数,整数,一般指示动作类型,或者传入整数参数。第三个参数,一个CObject 指针,表示传入的要刷新的资料。函数原型如下: void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint ); 目测LZ使用窗口分割累了吧?用5楼的做法吧,绝对靠谱。总结一句话就是:在CLeftView中获取CRightView视图的窗口指针,然后用SendMessage()给CRightView发消息,在CRightView类中添加消息响应函数,处理之。 不知道发哪合适,什么是PE2 求c++代码覆盖率测试工具 图片现实问题,帮忙看下,谢谢~~! Release在工程里按F5 和 直接运行程序 结果会不一样 请高手来解释一下 谢谢! 请教一个VC++6.0的问题 单机如何虚拟局域网? help me ,friends!!!!!! 求教CRichEditCtrl中的LineLength()问题 vs2008如何编写ocx 问一个很简单的问题,(300分)(有关TELNET的)。。。。。。 多边形扩张(收缩算法) udp问题
{
theApp.m_prightView = this;
}
CLeftView()
{
theApp.m_plrftView = this;
}
CLeftView *pLeftView = (CLeftView *)pMain->m_spliter.GetPane(0,0);
CRighView *pRightView = (CRighView *)pMain->m_spliter.GetPane(0,1);
后面就可以直接用pLeftView和pRightView访问各自视图中的数据,同样可以向各自视图发送自定义消息。
//Info.h
enum {comBegin,comData,comEnd};
class CInfo::CObject
{
int len;
BYTE data[1024];
};//LeftView.h
class CLeftView{
CInfo info;
....
};
//LeftView.cpp
...
void CLeftView::OnTimer( UINT nIDEvent ){
CDocument *pDoc=GetDocument();
//start
//pDoc->UpdateAllViews(this,comBegin,0);
//SendData
pDoc->UpdateAllViews(this,comData,&info);
//end
//pDoc->UpdateAllViews(this,comEnd,0);
}
//RightView.cpp
void CRightView::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );
{
if(pSender !=this && pSender!=NULL){
switch(lHint){
case comBegin:
/ *PreClearView */
break;
case comData:{
CInfo *pInfo=pHint;
......
}
break;
case comEnd:
{ .... }
break;
}
Invalidate();
}
}
OnUpdate
这两个函数,就是用来在同一个文档的,不同视图之间通讯的,这个是MFC专门做的,就是做这个用的。1)刷新所有视图,无特殊化。
这个一般在文档的,某个函数里使用,如序列化函数,当数据改变时,刷新所有视图
UpdateAllViews(NULL,...);2)刷新本视图以外的其他所有视图
CDocument *pDoc=GetDocument();
pDoc->UpdateAllViews(this,);
第一个参数,视图类的指针,第二个参数,整数,一般指示动作类型,或者传入整数参数。
第三个参数,一个CObject 指针,表示传入的要刷新的资料。
函数原型如下:
void UpdateAllViews(CView* pSender, LPARAM lHint = 0L,
CObject* pHint = NULL);
virtual void OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint );
总结一句话就是:在CLeftView中获取CRightView视图的窗口指针,然后用SendMessage()给CRightView发消息,在CRightView类中添加消息响应函数,处理之。