c ++ builder MDI / SDI还是其他方法?

时间:2013-06-16 21:22:13

标签: c++builder mdi sdi

我想用c ++ builder制作一个Windows数据库应用程序。我们的想法是在顶部有一个6个图标的静态菜单(我需要在每个屏幕中保持不变),而屏幕的其余部分将托管所有用户交互和与所选菜单项有关的数据。我有一个关于SDI应用程序的小经验,据我所知,整个应用程序无法在单个屏幕/表单中。我应该像MDI应用程序一样构建它,还是有其他方法可以在顶部维护一个固定的基于图标的菜单,而其余的屏幕数据是否会针对每个不同的菜单项进行更改?当用户浏览应用程序时,我不想进入一个没有重叠形式的窗口。

2 个答案:

答案 0 :(得分:0)

您可能必须以MDI格式执行此操作。我不知道有什么方法可以跨表格分享菜单。您可以使用的另一个选项是使用页面控件并将所有其他“表单”置于选项卡中,以便菜单始终相同。如果您希望用户在不同的选项卡上时,菜单项可能会有不同的响应,或者无论您使用哪个选项卡,他们都可以执行相同的操作。对不起,这是答案的形式,我还没有评论权。

答案 1 :(得分:0)

尽管MDI应用程序绝对可行,但不同形式之间的交互有时会有点麻烦。标签页更容易处理,因为所有内容都位于同一个TForm类中。 如果要更改各个选项卡的外观,可以重载“PageControlDrawTab”。只需添加一个事件处理程序,获取选项卡本身的Canvas的句柄,您可以随意绘制它。请参阅以下示例:

void __fastcall TMainForm::PageControlDrawTab(TCustomTabControl *Control,
      int TabIndex, const TRect &Rect, bool Active)
{
/* OnDraw handler to change the appearance of the Tabs.
Change it to blue text on white background.
*/

  String s;
  TRect r;
  TTabControl * tTab =  (TTabControl *)Control; // Get a pointer to the tab itself
  s = tTab->Tabs->Strings[TabIndex];            // Retrieve the text of this tab
   Control->Canvas->Brush->Color = clWhite;     // Use  the Canvas to draw
   Control->Canvas->Font->Color = clBlue;       //  .. whatever you like  
   Control->Canvas->FillRect(Rect);
   Control->Canvas->TextRect(Rect,Rect.Left+4,Rect.Top+2,s);

}