我用CSplitterWnd分了左右两个窗口,都继承formview想要在左边树控件选中
一项之后,右边的listcontrol控件显示信息.
我用pFrame = (CRightView *)AfxGetApp()->GetMainWnd();这样得到右边
视图的指针,在左边调用右边视图里的函数,
void CRightView::ListBoxFresh()
{
MessageBox("try");
}
这样一点问题也没有,但是一调用关于listcontrol控件的函数比如
DeleteAllItems();就会非法操作,程序中断
不知是为何?
我右想用消息映射来完成,pFrame->PostMessage(WM_MY_MESSAGE,0,0);这回连MessageBox("try");也出不来了.
谢谢高人指点
一项之后,右边的listcontrol控件显示信息.
我用pFrame = (CRightView *)AfxGetApp()->GetMainWnd();这样得到右边
视图的指针,在左边调用右边视图里的函数,
void CRightView::ListBoxFresh()
{
MessageBox("try");
}
这样一点问题也没有,但是一调用关于listcontrol控件的函数比如
DeleteAllItems();就会非法操作,程序中断
不知是为何?
我右想用消息映射来完成,pFrame->PostMessage(WM_MY_MESSAGE,0,0);这回连MessageBox("try");也出不来了.
谢谢高人指点
如果不是上述原因,那要判断你的m_list是否得到的正确。pFrame->PostMessage(WM_MY_MESSAGE,0,0)这样做是不正确的,因为CView类根本得不到CFramMain发送的消息。只能是CFramMain中得到当前CView类的指针,调用其中的公有成员函数。
void CMainFrame::OnUpdateUserState(WPARAM wparam,LPARAM lparam)
{
//---------------2003.2.20 by yang-------------------
//更新用户状态
CString *pUserName = new CString;
pUserName = (CString*)wparam;
if(lparam == 0)
{
//界面端为登陆上来的客户,包括本地用户和服务器登陆
if((pUserName->Compare(m_strCurrentUserName) == 0 || pUserName->Compare("Server") == 0)&& m_strCurrentUserName.GetLength() != 0)
{
CFormViewUserState *pView = (CFormViewUserState*)m_wndSplitter.GetPane(0,1);
pView->UpdateUserState();
}
}
if(lparam == 1)
{
//本机作为子服务器,登陆到其它服务器
if(pUserName->Compare(m_strCurrentUserName) == 0 && m_strCurrentUserName.GetLength() != 0)
{
CFormViewUserState *pView = (CFormViewUserState*)m_wndSplitter.GetPane(0,1);
pView->UpdateServerState();
}
}
//---------------------------------------------------
}CMainFrame类接收左视图发送的消息,再得到右视图的指针,调用右视图的公有成员函数更新右视图。