首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

mainframe 向两个frameView传递消息 跪求

2012-02-16 
mainframe 向两个frameView传递消息 跪求 在线等我在child里写了下面代码建立了frameviewBOOL CChildFrame

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()都是一样的

热点排行