我想用c++ builder制作一个Windows数据库应用程序。这个想法是在顶部有6个图标的静态菜单(我需要在每个屏幕上保持不变),而屏幕的其余部分将托管所有用户交互和数据,关于所选菜单项。我对SDI应用程序有一点经验,据我所知,整个应用程序不可能在一个屏幕/表单中。我应该建立这像一个MDI应用程序或有任何其他方式来维护一个固定的图标为基础的菜单在顶部,而其余的屏幕数据为每个不同的菜单项改变?当用户在应用程序中导航时,我不想在一个没有重叠表单的单一窗口中。
虽然MDI应用程序绝对是可能的,但是不同表单之间的交互有时有点麻烦。选项卡页面更容易处理,因为所有内容都驻留在同一个TForm类中。如果你想改变单个标签的外观,你可以重载'PageControlDrawTab'只需添加一个事件处理程序,获得一个处理到标签本身的画布,你可以自由地绘制是你想要的。请看下面的例子:
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);
}
您可能必须使用MDI格式。我不知道有什么方法可以跨表单共享菜单。你可以使用的另一个选择是使用一个页面控件,把所有其他的"表单"都放在一个选项卡中,这样菜单就一直是一样的。当用户在不同的选项卡上时,菜单项可以做出不同的响应,或者无论用户在哪个选项卡上,它们都可以做同样的事情。对不起,这是一个回答的形式,我还没有评论权。