鼻烟壶的鉴定:利用ExpressBar实现主、子窗口工具栏的整合

来源:百度文库 编辑:九乡新闻网 时间:2024/05/05 23:00:48
(2006-12-17 18:09:06)转载
分类: 活到老学到老
不论是MDI和SDI,由多个窗口构成的应用系统总是希望能够将各个子窗口上的工具栏整合到主窗口上。MDI的菜单好办,但是工具栏并没有直接的办法。虽然感觉是个简单问题,但是也是困扰我多时。记录一个利用devExpressBar的工具栏整合方法,在这里菜单和工具栏是一视同仁的。
TdxBar *__fastcall TFrm_Main::addDxBar(TdxBarManager * MainBarManager, TdxBarManager * ChildBarManager,
AnsiString ACaption, TdxBarDockingStyle ADockingStyle, int ARow, int ACol, bool Insert, bool AVisible)
{
//TODO: 向指定BarManager里添加dxBar,并返回NewBar指针
TdxDockControl * DockControl;
bool Vertical;
TdxDockRow * DockRow;
TdxBar * NewBar, *ChildBar;
TdxDockCol * DockCol;
int ChildBarCount;
ChildBarCount = ChildBarManager->Bars->Count;
for(int i = 0; i{
ChildBar = ChildBarManager->Bars->Items[i];
if(ChildBar->Caption != "caption")
{
ChildBar->Visible = false;
NewBar = BarManager->Bars->Add();
NewBar->ItemLinks = ChildBar->ItemLinks;
NewBar->Caption = ACaption;
NewBar->DockingStyle = ADockingStyle;
if (ARow < 0) ARow = 0;
NewBar->Row = ARow;
NewBar->OneOnRow = Insert;
if (ACol != -1 && NewBar->DockingStyle != dsNone)
{
DockControl = BarManager->Bars->DockControls[NewBar->DockingStyle];
if (NewBar->Row < DockControl->RowList->Count)
{
Vertical = ((NewBar->DockingStyle == dsLeft) || (NewBar->DockingStyle == dsRight));
DockRow = (TdxDockRow *)(DockControl->RowList->Items[NewBar->Row]);
if (ACol < 0) ACol = 0;
if (ACol >= DockRow->ColList->Count)
{
DockCol = (TdxDockCol *) DockRow->ColList->Last();
if (Vertical)
NewBar->DockedTop = NewBar->DockedTop + DockCol->BarControl->Height;
else
NewBar->DockedLeft = NewBar->DockedLeft + DockCol->BarControl->Width;
}
else
{
DockCol = (TdxDockCol*)DockRow->ColList->Items[ACol]; // NEW LINE
if (Vertical)
NewBar->DockedTop = DockCol->Pos.y;
else
NewBar->DockedLeft = DockCol->Pos.x;
}
}
}
NewBar->Visible = AVisible;
}
}
return NewBar;
}