mfc中创建分割视图怎么获取视图窗口句柄
mfc基于当文档:在OnCreateClient中:intrtn=m_splitterOne.CreateStatic(this,1,2);m_splitterTwo.C...
mfc基于当文档:在OnCreateClient中:int rtn = m_splitterOne.CreateStatic(this, 1, 2); m_splitterTwo.CreateStatic(&m_splitterOne, 2, 1, WS_CHILD|WS_VISIBLE, m_splitterOne.IdFromRowCol(0, 0)); m_splitterTwo.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(450, 250), pContext); m_splitterTwo.CreateView(1, 0, RUNTIME_CLASS(CBottomView), CSize(450,250), pContext); m_splitterOne.CreateView(0, 1, RUNTIME_CLASS(CRightView), CSize(450, 250), pContext); m_splitterOne.SetColumnInfo(0, 450, 100);CLeftView,CBottomView,CRightView是基于对话框从CFormView派生的(就是添加一个对话框并生成类,CFormView做父类),现在我要让这几个视图作为另外3个模块界面的父窗口,但是我发现就上面的代码就已创建好了分割窗口,我要怎么才能获取这三个视图的窗口句柄呢,希望哪位大侠能详细说一下。谢谢。
展开
2个回答
展开全部
1 在多文档多视图的MFC架构中,要想获得当前选中的CView可重写CView::OnActivateView函数,如下:
void
OnActivateView(BOOL bActivate,
CView * pActivateView,
CView * pDeactiveView)
{
if(bActivate)
{
SetEnable(TRUE);
}
else
{
SetEnable(FALSE);
}
CView::OnActivateView(bActivate,
pActivateView,
pDeactiveView);
}
2 获得窗口或者视图句柄
2.1 获得窗口句柄
要找到某个CWnd对象的HWND,用GetSafeHwnd()。
在窗口类中,有句柄的成员变量,可以直接访问: m_hWnd
在窗口类外,可以用AfxGetMainWnd()->m_hWnd获得。
在MainFrame里直接用this;
其它地方用 CMainFrame* pMainFrame = (CMainFrame*)theApp.m_pMainWnd;
想得到一个控件的的句柄
GetDlgItem(ID…)->m_hWnd
2.2 获得视图的句柄
AfxGetMainWnd()->GetActiveView();
SDI: ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
MDI: ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveFrame()->GetActiveView();
void
OnActivateView(BOOL bActivate,
CView * pActivateView,
CView * pDeactiveView)
{
if(bActivate)
{
SetEnable(TRUE);
}
else
{
SetEnable(FALSE);
}
CView::OnActivateView(bActivate,
pActivateView,
pDeactiveView);
}
2 获得窗口或者视图句柄
2.1 获得窗口句柄
要找到某个CWnd对象的HWND,用GetSafeHwnd()。
在窗口类中,有句柄的成员变量,可以直接访问: m_hWnd
在窗口类外,可以用AfxGetMainWnd()->m_hWnd获得。
在MainFrame里直接用this;
其它地方用 CMainFrame* pMainFrame = (CMainFrame*)theApp.m_pMainWnd;
想得到一个控件的的句柄
GetDlgItem(ID…)->m_hWnd
2.2 获得视图的句柄
AfxGetMainWnd()->GetActiveView();
SDI: ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
MDI: ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveFrame()->GetActiveView();
展开全部
查这个函数CSplitterWnd::GetPane
CWnd* GetPane(
int row,
int col
) const;
注意行和列是以0开始的
CWnd* GetPane(
int row,
int col
) const;
注意行和列是以0开始的
追问
谢谢,窗口句柄是能获取到,但是三个类的对象怎么获取呢?因为我要把这三个视图窗口的子窗口(另外创建的)保存起来,让子窗口大小与三个视图窗口大小一致,并且能随分割条移动而自动调整大小。我强转GetPane获取的窗口指针为相应的类型,但是发现并不能通过它调用我写的保存子窗口函数保存子窗口指针,保存的窗口指针始终为空,我想请问下具体该怎么做呢?谢谢。
追答
CSplitterWnd::GetPane这个函数是得到View对象的指针。确实没看懂你要表达的意思,
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询