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