hur.cn - 华软网

 热门搜索

CSplitterWnd分成上下2个窗体后,想让下面窗体随着主窗口onsize时,高度不变

  作者:未知    来源:网络    更新时间:2011/1/13
CSplitterWnd分成上下2个窗体后,想让下面窗体随着主窗口onsize时,高度不变(类似DialogBar在下面的效果)

但在onsize里
m_ViewSplitter.SetRowInfo( 1, m_Height, 0 );

这个m_Height不知道在那里取得,在onsize里取得是无转变的,在onsize之前才能够

请问,如何解决,谢谢大家

---华软 网友回答---
  class="deleted_message"> 该回复于2011-01-13 15:37:51被版主删除
---华软网友回复---
调用过SetRowInfo之后,还得recalayout
---华软网友回复---
把这个高度设置成相对于屏幕的高度,就能够了吧

---华软网友回复---
主框架类的WM_SIZE消息的响应函数OnSize中
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();
---华软网友回复---
引用 4 楼 visualeleven 的回复:
主框架类的WM_SIZE消息的响应函数OnSize中
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();

up
---华软网友回复---
引用 4 楼 visualeleven 的回复:
主框架类的WM_SIZE消息的响应函数OnSize中
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();


我是这么做的,关头是这个高度怎么取得? 我是想下面的分窗高度不变
---华软网友回复---
请看清题目作答,谢谢
---华软网友回复---
引用 6 楼 haotong8734 的回复:
引用 4 楼 visualeleven 的回复:
主框架类的WM_SIZE消息的响应函数OnSize中
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();


我是这么做的,关头是这个高度怎么取得? 我是想下面的分窗高度不变

你说高度不变,那么这个高度就是你定死的
---华软网友回复---
CMainFrame::OnCreateClient 中做切分窗口的初始化措置惩罚;并记录m_height
---华软网友回复---
引用 8 楼 visualeleven 的回复:
引用 6 楼 haotong8734 的回复:
引用 4 楼 visualeleven 的回复:
主框架类的WM_SIZE消息的响应函数OnSize中
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();


我是这么做的,关头是这个高度怎么取得? 我是想下面的分窗高度不变

你说高度不变,那么这个高度就是你定死的
……


用户托动分开条后,高度就变了啊
---华软网友回复---
引用 10 楼 haotong8734 的回复:
引用 8 楼 visualeleven 的回复:

引用 6 楼 haotong8734 的回复:
引用 4 楼 visualeleven 的回复:
主框架类的WM_SIZE消息的响应函数OnSize中
调用CSplitterWnd::SetRowInfo();CSplitterWnd::RecalcLayout();


我是这么做的,关头是这个高度怎么取得? 我是想下面的分窗高……

你不是拆分为2个视图吗?下面的区域巨细不变,上面的才变吗?
---华软网友回复---
to VisualEleven:
再改变主窗口巨细时,下面视图高度不变(类似DialogBar在下面的效果)
但允许用户托动分开条,就是能记住这个高度
---华软网友回复---
  class="deleted_message"> 该回复于2011-01-14 14:10:20被版主删除
---华软网友回复---
引用 12 楼 haotong8734 的回复:
to VisualEleven:
再改变主窗口巨细时,下面视图高度不变(类似DialogBar在下面的效果)
但允许用户托动分开条,就是能记住这个高度

C++">
BOOL m_bSplitterWnd = FALSE; // CMainFrame类的成员变量,标志,初始值为FALSE
CSplitterWnd m_wndSplitter;  //

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
// TODO: Add your specialized code here and/or call the base class
if(!m_wndSplitter.CreateStatic(this, 2, 1))
{
return FALSE;
}

if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CXXView), CSize(100, 100), pContext))
{
return FALSE;
}

if(!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CXXView2), CSize(0, HEIGHT_WND), pContext))
{
return FALSE;
}

m_bSplitterWnd = TRUE;

return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}

void CMainFrame::OnSize(UINT nType, int cx, int cy) 
{
CFrameWnd::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
if(m_bSplitterWnd && m_wndSplitter.GetSafeHwnd())
{
#define HEIGHT_WND 300
CRect rc;
GetClientRect(rc);
m_wndSplitter.SetRowInfo(0, cy - HEIGHT_WND, 10);
m_wndSplitter.SetRowInfo(1, HEIGHT_WND, 10);
m_wndSplitter.RecalcLayout();
}
}

当然这里是限定死了下面视图的高度为HEIGHT_WND,而你需要的是允许用户托动分开条,就是能记住这个高度,那你可能需要重写CSplitterWnd,措置惩罚WM_LBUTTONDOWN,WM_LBUTTONUP, WM_MOUSEMOVE消息,通过GetPane()->GetGetWindowRect()获得下面区域大高度,然后传送到主框架窗口中。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。