【问题标题】:c++ builder MDI / SDI or other approach?c++ builder MDI / SDI 还是其他方法?
【发布时间】:2013-06-16 21:22:12
【问题描述】:

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

【问题讨论】:

    标签: c++builder mdi sdi


    【解决方案1】:

    虽然 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);
    
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 选项卡是一个选项。我不知道我是否可以在标签标题中使用图像而不是简单的文本,但我会检查一下..
      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 2022-03-07
      • 2011-01-18
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      相关资源
      最近更新 更多