在自己的类中如何调用文档框架CMainFrame的函数

在自己的类中怎么调用文档框架CMainFrame的函数?
我在单文档的项目中,在文档框架CMainFrame添加一个函数,
void CMainFrame::SetItemText(CString szDeviceNo,CString szIp)
{

}

我自己的socket类里面有个函数:
void CClient::DefNetMessage(UINT message, LPVOID lpData, int nLength)
{

         //下面这个if判断进不去
if(AfxGetMainWnd() && IsWindow(AfxGetMainWnd()->m_hWnd))
{
((CBatteryInfoDlg*)AfxGetMainWnd())->DefNetMessage(message,lpData,nLength);
}

}

请问要如何才能调用mainframe里面的函数呢?
------解决思路----------------------
CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
pFrame->SetItemText();
------解决思路----------------------
显示是 在 view 里吧 ? 干嘛要 在 frame 里?
------解决思路----------------------
COnline *pView=(COnline *)pMain->GetActiveView(); ==0 ?
------解决思路----------------------
你学编程没几天吧?
void CMainFrame::SetItemText(CString szDeviceNo,CString szIp)
{

CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
COnline *pView=(COnline *)pMain->GetActiveView();
ASSERT(pView);
if (pView)
{
pView->SetItemText(szDeviceNo,szIp);
}

}
============
本身就在CMainFrame类里,居然还要写CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
不知道你咋想的


------解决思路----------------------
那要看你视图类的SetItemText函数都干了啥了。我估计是给某个控件设置数值了,但此时控件句柄应该还是空的,视图类的初始化函数还没来得及调用呢
------解决思路----------------------
你可以在CMainFrame中写一个函数,把这个函数注册到你的socket类中,使用回调机制把数据传给CMainFrame。
还有一种方法就是通过SendMessage或PostMessage的方法把数据做为参数发送给CMainFrame;
------解决思路----------------------
你的socket类和CMainFrame类有什么关联没有?比如CMainFrame类中定义了一个socket类的对象等等。
------解决思路----------------------
引用:
Quote: 引用:

你学编程没几天吧?
void CMainFrame::SetItemText(CString szDeviceNo,CString szIp)
{

CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
COnline *pView=(COnline *)pMain->GetActiveView();
ASSERT(pView);
if (pView)
{
pView->SetItemText(szDeviceNo,szIp);
}

}
============
本身就在CMainFrame类里,居然还要写CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
不知道你咋想的

呵呵。就算在这个类里面。你不这样写你能拿到?你写个试试,我看你咋拿

有意思,把无知当本事了。你就这么写吧。
------解决思路----------------------
获取文档框架CMainFrame的指针:CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);


void CMainFrame::SetItemText(CString szDeviceNo,CString szIp)
{

//CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;    //多余
//COnline *pView=(COnline *)pMain->GetActiveView();                            //多余
      COnline *pView=(COnline *)GetActiveView();  
      ASSERT(pView);
      if (pView)
      {
           pView->SetItemText(szDeviceNo,szIp);
      }

}

------解决思路----------------------
SetItemText(CString szDeviceNo,CString szIp) 应该在 view 中
------解决思路----------------------
“我在单文档的项目中”
你是 单文档 多 view , 要 指定 哪个 view
------解决思路----------------------
CSDIDocTemplate* pDocTemplate;
pDocTemplate = new CSDIDocTemplate

只要 ADD 一次。因为 只有第一个 view 会 创建 , 其他 不会 创建的

其余的 view 要在
MainFrame 的 OnCreate 创建

。。。
CCreateContext Context; // I hate new
ZeroMemory(&Context,sizeof(Context));
Context.m_pCurrentFrame=this;
Context.m_pCurrentDoc=GetActiveDoc();
Context.m_pNewViewClass=RUNTIMECLASS(CxxxxView);
CreateView($Context,AFX_IDW_PANE_FIRST+1);// 只有AFX_IDW_PANE_FIRST是 显示的。
.。。。

------解决思路----------------------
参考
“Cpp集合类.rar”
http://download.****.net/detail/schlafenhamster/5023227

 是一个 SDI ,7-8个view 的 程序。

说明 其他的 view 的 创建, 显示, 销毁。。。(Exsample 按钮)
------解决思路----------------------
"主视图调用其它视图"  通过 DOC 联系。