当前位置: 代码迷 >> VC >> mainframe 向两个frameView传递消息 跪求
  详细解决方案

mainframe 向两个frameView传递消息 跪求

热度:3116   发布时间:2013-02-25 00:00:00.0
mainframe 向两个frameView传递消息 跪求 在线等
我在child里写了下面代码建立了frameview
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext)
{
VERIFY(m_wndSplitter1.CreateStatic(this, 2, 1));

VERIFY(m_wndSplitter11.CreateStatic(&m_wndSplitter1, 1, 2, WS_CHILD | WS_VISIBLE, 
m_wndSplitter1.IdFromRowCol(0, 0)));

VERIFY(m_wndSplitter11.CreateView(0, 0, RUNTIME_CLASS(CSTISView),
CSize(500, 500), pContext));
VERIFY(m_wndSplitter11.CreateView(0, 1, RUNTIME_CLASS(COrderView),
CSize(50, 50), pContext));
VERIFY(m_wndSplitter1.CreateView(1, 0, RUNTIME_CLASS(CTankerView),
CSize(100, 500), pContext));

m_wndSplitter1.SetActivePane(0,0,NULL);
m_wndSplitter11.SetActivePane(0,0,NULL);

m_bCreateSplitter = TRUE;

return TRUE;
}


在Mainframe里向这两个View传递消息,为什么下面的第一段代码可以传进去 第二段代码不行?
LRESULT CMainFrame::OnListCtrl(WPARAM wP, LPARAM lP)
{
CMainFrame* pMainFrame = (CMainFrame*)AfxGetApp()->GetMainWnd();//获得FrameView指针
if (pMainFrame != NULL)
{
CChildFrame* pChildFrame = (CChildFrame*)pMainFrame->GetActiveFrame();

if (pChildFrame->m_hWnd)
{
COrderView* pView = (COrderView*)pChildFrame->GetActiveView();
if (pView->m_hWnd)
::PostMessage(pView->m_hWnd, UM_TANKER_TID, NULL, 0);
}
}
return TRUE;
}
LRESULT CMainFrame::OnListCtrlTid(WPARAM wP, LPARAM lP)
{
CMainFrame* pMainFrame1 = (CMainFrame*)AfxGetApp()->GetMainWnd();//获得FrameView指针
if (pMainFrame1 != NULL)
{
CChildFrame* pChildFrame1 = (CChildFrame*)pMainFrame1->GetActiveFrame();

if (pChildFrame1->m_hWnd)
{

CTankerView* pView1 = (CTankerView*)pChildFrame1->GetActiveView();
if (pView1->m_hWnd)
::PostMessage(pView1->m_hWnd, UM_TANKER_TID, NULL, 0);
}
}
return TRUE;
}


注:我发现的问题是:第二段代码我断点逐步调试跟进去发现CTankerView* pView1 = (CTankerView*)pChildFrame1->GetActiveView();这一据获得的还是COrderView得指针,为什么会是这种情况?

------解决方案--------------------------------------------------------
发送消息和响应消息不回修改当前活动的视图
也就是说在一个方法里面发送两个消息,在消息响应函数中调用GetActiveView()都是一样的