0

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

4

2 回答 2

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);

}
于 2013-06-17T18:52:15.387 回答
0

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

于 2013-06-17T02:19:06.240 回答