关于浮动窗口以及分割窗口的问题

miaoshine1 2005-03-21 09:15:55
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}

// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
CSize BarSize; //工具条大小
BarSize.cx = 200;
BarSize.cy = 150;
RECT rt;
if (!(m_DockBar1.Create(_T("m_DockBar1"), this, BarSize, TRUE, WS_CHILD)))
{
TRACE0("Failed to create m_TreeViewBar\n");
return -1;
}
if (!(m_DockBar2.Create(_T("m_DockBar2"), this, BarSize, TRUE, WS_CHILD)))
{
TRACE0("Failed to create m_PictureBar\n");
return -1;
}
m_DockBar1.SetBarStyle(m_DockBar1.GetBarStyle() | CBRS_TOOLTIPS| CBRS_SIZE_FIXED); // TODO: Delete these three lines if you don't want the toolbar to
m_DockBar2.SetBarStyle(m_DockBar2.GetBarStyle() | CBRS_TOOLTIPS| CBRS_SIZE_FIXED); // TODO: Delete these three lines if you don't want the toolbar to

m_DockBar1.EnableDocking(CBRS_ALIGN_ANY);
m_DockBar2.EnableDocking(CBRS_ALIGN_ANY);
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
//DockControlBar(&m_wndToolBar);
rt.top = 0;
rt.bottom = 150;
rt.left = 20;
rt.right = 200;
DockControlBar(&m_DockBar1, AFX_IDW_DOCKBAR_LEFT, &rt);
rt.top = 150;
rt.bottom = 300;
DockControlBar(&m_DockBar2, AFX_IDW_DOCKBAR_LEFT, &rt);

return 0;
}
请大家帮忙看看,我想要的结果就是左边有两个竖排的浮动窗口,但是有时候却变成并列的两个?

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// CG: The following block was added by the Splitter Bar component.
{
// if (!m_wndSplitter.Create(this,
// 2, 1, // TODO: adjust the number of rows, columns
// CSize(10, 10), // TODO: adjust the minimum pane size
// pContext))
if(!m_wndSplitter.CreateStatic(this, 2, 1))
{
TRACE0("Failed to create splitter bar ");
return FALSE; // failed to create
}
CRect rt;
GetClientRect(&rt);
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CDockTestView), CSize(rt.Width(), rt.Height() / 2), pContext);
m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMyView), CSize(rt.Width(), rt.Height() / 2), pContext);

return TRUE;
}
}
右边的窗体想居中平均分割两个,但是却总是无法居中分割?
请大家帮忙,在线等待!解决马上给分,不够可以再给!谢谢!
...全文
325 点赞 收藏 6
写回复
6 条回复
Kudeet 2005年03月22日
在用SetColumnInfo同时控制,应该有效的
回复 点赞
miaoshine1 2005年03月21日
对于第二部分的问题我是这样处理的:
CRect rt;
GetWindowRect(&rt);
m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CDockTestView), CSize(10, 10), pContext);
m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CMyView), CSize(10, 10), pContext);
m_wndSplitter.SetRowInfo(0, rt.Height() / 2, 10);
m_wndSplitter.SetRowInfo(1, rt.Height() / 2, 10);
m_wndSplitter.RecalcLayout();
但是还是无法解决,每次分割出来的窗口大小都不相同,请帮忙看看,谢谢!
回复 点赞
miaoshine1 2005年03月21日
laiyiling(※陌生人·坚持理想※) 第一个问题已经解决,但是能不能把第二个问题详细描述一下,谢谢
回复 点赞
miaoshine1 2005年03月21日
我正在试……
回复 点赞
xuzheng318 2005年03月21日
楼主问题是否已经解决!?
回复 点赞
Kudeet 2005年03月21日
//使一个ControlBar停靠在另一个ControlBar 的旁边,而不是另起一行
void CMainFrame::DockControlBarLeftOf(CControlBar *Bar, CControlBar *LeftOf)
{
CRect rect;
DWORD dw;
UINT n;
//计算WindowRect的精确大小
RecalcLayout();
LeftOf ->GetWindowRect(&rect);
rect.OffsetRect(1,0);
dw = LeftOf ->GetBarStyle();
n = 0;
n = (dw & CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
n = (dw & CBRS_ALIGN_BOTTOM && n == 0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
n = (dw & CBRS_ALIGN_LEFT && n == 0) ? AFX_IDW_DOCKBAR_LEFT : n;
n = (dw & CBRS_ALIGN_RIGHT && n == 0) ? AFX_IDW_DOCKBAR_RIGHT : n;

DockControlBar(Bar, n, &rect);
}

2 要居中分割,可以先任意的分割,然后用SetRowInfo/SetColumnInfo来控制每个视图的大小
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7973

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告