关于BCG界面程序中控件停靠的问题,请热心人帮忙指点

振翅高飞 2014-07-30 11:05:06
我用BCG写了个界面(以前没用过这个库)但是有一处不是特别理想。
有5个控件,类型都是由CBCGPDockingControlBar类派生之后在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数中进行添加的。
5个控件我都声明了5个成员变量
CBar1 m_wndb1;
CBar2 m_wndb2;
CBar3 m_wndb3;
CBar4 m_wndb4;
CBar5 m_wndb5;

在CMainFrame.h上面,可喜的是所有控件都生成了。其中m_wndb1和m_wndb2是一组,都在一个组件里,m_wndb1和m_wndb2分别各占一个选项卡,鼠标点击哪个选项卡,组件局部界面就显示谁的内容,该组件在左边,m_wndb3自己一组在底边,m_wndb4和m_wndb5是两个组件,但是有一处令我百思不解,就是组件初始运行的停靠位置问题。我希望m_wndb4在右上,m_wndb5在右下。m_wndb4和m_wndb5在同一纵向方向上构成一列且都在m_wndb3组件的右侧。但是运行后却很稀奇的m_wndb4和m_wndb5总在横向方向上是一行且都在m_wndb3组件的右侧。

相关代码如下:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (!m_wndb1.Create (_T("11111"), this, CRect (0, 0, 200, 200),
TRUE, ID_VIEW_B1,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create B1!\n");
return -1; // fail to create
}
m_wndb1.SetIcon (imagesWorkspace.ExtractIcon (0), FALSE);

if (!m_wndb2.Create (_T("22222"), this, CRect (0, 0, 200, 200),
TRUE, ID_VIEW_B2,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create B2!\n");
return -1; // fail to create
}
m_wndb2.SetIcon (imagesWorkspace.ExtractIcon (1), FALSE);

if (!m_wndb4.Create (_T("44444"), this,
CRect (0, 0, 200, 200),
TRUE, ID_VIEW_CAMERAPLATFORM,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
| WS_CLIPCHILDREN | CBRS_ALIGN_RIGHT| CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create B4!\n");
return -1; // fail to create
}
m_wndB4.SetIcon (imagesWorkspace.ExtractIcon (2), FALSE);

if (!m_wndB5.Create (_T("55555"), this, CRect (0, 0, 200, 200),
TRUE, ID_VIEW_ALARMINPUTTREE,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
| CBRS_RIGHT | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create B5!\n");
return -1; // fail to create
}
m_wndB5.SetIcon (imagesWorkspace.ExtractIcon (3), FALSE);

if (!m_wndB3.Create (_T("信息"), this, CSize (150, 100),
TRUE /* Has gripper */, ID_VIEW_OUTPUT,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
| WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI))
{
TRACE0("Failed to create B3\n");
return -1; // fail to create
}
m_wndB3.SetIcon (imagesWorkspace.ExtractIcon (6), FALSE);

CString strMainToolbarTitle;
strMainToolbarTitle.LoadString (IDS_MAIN_TOOLBAR);

m_wndB1.EnableDocking(CBRS_ALIGN_ANY);
m_wndB2.EnableDocking(CBRS_ALIGN_ANY);
m_wndB4.EnableDocking(CBRS_ALIGN_ANY);
m_wndB5.EnableDocking(CBRS_ALIGN_ANY);
m_wndB3.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
EnableAutoHideBars(CBRS_ALIGN_ANY);
DockControlBar(&m_wndB1);
m_wndB2.AttachToTabWnd (&m_wndB1, BCGP_DM_STANDARD, FALSE, NULL);
DockControlBar(&m_wnd5);
DockControlBar(&m_wnd4);
RecalcLayout(TRUE);
DockControlBar(&m_wndB3);
}

...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
振翅高飞 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 redleafe 的回复:
BCG可以从XML配置文件中读取窗口停靠等参数,你先调整下窗口位置为你想要的,可以任意调整,退出时会保存。 默认存储在注册表里,看帮助文档,可保存在XML文件中,你可以利用这个XML文件来保存你的界面控制参数。 试试吧。
兄弟说得即是。注册表确有“记忆上次位置”的功能,但是我想在界面一开始第一次运行时达到主题帖要求的效果,该如何解决呢?
振翅高飞 2014-07-30
  • 打赏
  • 举报
回复
没人帮忙啊???
dvlinker 2014-07-30
  • 打赏
  • 举报
回复
没用过,只是用过VS2008 MFC中的BCG,帮忙顶一个!
redleafe 2014-07-30
  • 打赏
  • 举报
回复
BCG可以从XML配置文件中读取窗口停靠等参数,你先调整下窗口位置为你想要的,可以任意调整,退出时会保存。 默认存储在注册表里,看帮助文档,可保存在XML文件中,你可以利用这个XML文件来保存你的界面控制参数。 试试吧。
振翅高飞 2014-07-30
  • 打赏
  • 举报
回复
求助,很急。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧