如何在一个FormView里获得另一个FormView的指针

这篇博客探讨了在MFC应用程序中,如何从一个FormView向另一个FormView发送自定义消息。作者遇到了在尝试通过文档类获取FormView指针时返回NULL的问题。文章详细介绍了尝试的解决方法,包括定义全局视图变量、通过MainFrm获取FormViewB的指针,并提出了对无法通过文档类获取指针的疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 我的目标是:                     想从FormView A 向FormView B 发送自定义消息。
我的程序的窗口结构是:  有一个视图类CMyView, 和两个FormView:A和B
我遇到的问题是:              在FormView A里调用CMyDoc遍历视图类以找到FormView B取
                                           得的文档类指针却为0x00000000
我是这样做的:               1.在CMyDoc中创建GetView函数,内容如下:
                                              CView* CMyDoc::GetView()
                                              {
                                                    CView *pView ;
                                                    POSITION pos=GetFirstViewPosition();
                                                    while(pos!=NULL)
                                                    {
                                                         pView = GetNextView(pos);
                                                         if(pView->IsKindOf(RUNTIME_CLASS CFormViewB)))
                                                              break;
                                                    }
                                                    return pView;
                                              }
                                         2. 在FormViewA的按钮响应函数中,写了如下代码:
                                              void CFormViewA::OnButtonTest()
                                              {
                                                   CMainFrame *Frm = (CMainFrame*)AfxGetMainWnd();
                                                   CMyDoc* pDoc=(CMyDoc*)Frm->GetActiveDocument();
                                                   CView *pView=pDoc->GetView();
                                                   pView->PostMessage(WM_USRMSG,0,0);
                                               }

问题出在:                   语句CMyDoc* pDoc=(CMyDoc*)Frm->GetActiveDocument();调
                                       试到这里,查看pDoc的值为0x00000000,请问这是什么问题,
                                       该怎么解决

----------------------------------------------------------------------------------------------------------------------------------------------------

解决方法:             1.(modaoshi3002)定义两个全局的视图变量 pA,pB,在各自的构造函数里写好:

                                  pA = this;pB= this;在要用到的文件里extern一下,搞定!

                                 2.我又找到了个办法,因为我的formViewB是由MainFrm的OnCreateClient分割而成的,于是: 
                                    CMainFrame*  pFrame  =  (CMainFrame*)AfxGetMainWnd(); 
                                    CFormViewB  *pView  =  (CFormViewB*)pFrame-  >m_wndSplitter.GetPane(1,0); 
                                    pView-  >PostMessage(WM_USRMSG,0,0); 

                                 3.题目中我的那个办法为什么不行,为啥不能获得文档指针呢?还没有解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值