在.NET框架中创建图形用户界面(GUI)是一种常见的需求。本文将通过一个示例介绍如何使用.NET框架来构建一个类似于Outlook Express的GUI界面。将探讨如何添加工具栏、菜单、树状视图、列表视图、面板和分隔器。
工具栏的创建是通过使用ToolBar类来实现的。首先,需要创建一个ToolBar对象。
ToolBar *t = new ToolBar();
接下来,声明工具栏按钮:
ToolBarButton *tb1, *tb2, *tb3, *tb4, *tb5;
创建按钮非常简单,只需调用构造函数并传入按钮文本作为参数:
tb1 = new ToolBarButton("New Mail");
如果想要为工具栏按钮添加下拉菜单,可以设置按钮的样式为DropDownButton,这样会显示一个倒三角形。
tb1->Style = ToolBarButtonStyle::DropDownButton;
创建完所有工具栏按钮后,将它们添加到工具栏中:
t->Buttons->Add(tb3);
t->Buttons->Add(tb4);
t->Buttons->Add(tb5);
可以设置一些工具栏样式来确定工具栏的外观和感觉:
t->Appearance = ToolBarAppearance::Flat;
t->BorderStyle = BorderStyle::FixedSingle;
t->Dock = DockStyle::Top;
设置好工具栏后,可以将其添加到窗体中:
this->Controls->Add(t);
树状视图的创建是通过使用TreeView类及其成员来实现的。一个特别有用的成员是Nodes属性,它返回底层的TreeNodeCollection指针。然后可以使用TreeNodeCollection对象的Add方法来添加节点。
TreeNode *tnode;
tnode = m_ptreeview->Nodes->Add("Inbox");
tnode->Nodes->Add("Code Project");
tnode->Nodes->Add("Linux");
如您所见,添加了一个名为'Inbox'的节点,并使用返回的TreeNode指针来添加子节点。
m_ptreeview->Dock = DockStyle::Left;
m_ptreeview->HideSelection = false;
m_ptreeview->ShowPlusMinus = true;
m_ptreeview->ExpandAll();
将树状视图停靠在窗体的左侧,并设置了一些属性。还调用了ExpandAll成员函数来展开所有节点。
在Outlook Express中,在树状视图的右侧有一个列表视图和一个HTML视图。这里没有使用HTML视图(不确定框架中是否有这样的视图),但添加了两个列表视图。然后将这两个列表视图添加到面板中,如下一节所述。
将第一个列表视图停靠在顶部,并将其视图属性设置为详细视图。
m_ptop->Dock = DockStyle::Top;
m_ptop->View = View::Details;
现在添加了一些列:
m_ptop->Columns->Add("Subject", 150, HorizontalAlignment::Left);
m_ptop->Columns->Add("From Address", 300, HorizontalAlignment::Left);
类似于树状视图的Nodes属性,列表视图有一个Items属性,它返回一个ListView.ListViewItemCollection指针。使用ListView.ListViewItemCollection类的Add成员来添加列表视图文本。这将返回一个ListViewItem指针,使用它可以向其他列添加数据。
ListViewItem *lvi;
lvi = m_ptop->Items->Add("Free Software Deal");
lvi->SubItems->Add("jason@jason.org");
对于底部的列表视图,遵循类似的程序,除了停靠样式:
m_pbottom->Dock = DockStyle::Fill;
稍后将这些列表视图添加到面板中。因此,顶部视图将停靠在顶部,底部视图将填充面板的其余部分。
使用Splitter类来创建分隔器。首先,创建面板分隔器,并将它的停靠样式设置为DockStyle::Top:
split2->Dock = DockStyle::Top;
split2->Height = 2;
现在创建窗体分隔器,它将窗体分割成树状视图和面板。
split1->Location = System::Drawing::Point(201, 0);
split1->Width = 2;
分隔器允许用户调整它前面的停靠控件的大小。因此,将分隔器的X坐标设置为树状视图右侧的一像素。
现在将两个列表视图和面板分隔器添加到面板中。
m_panel->Controls->Add(m_pbottom);
m_panel->Controls->Add(split2);
m_panel->Controls->Add(m_ptop);
现在已经完成了,需要设置面板的停靠样式。
m_panel->Dock = DockStyle::Fill;
好的,现在有一个停靠样式设置为左侧停靠的树状视图,以及一个填充停靠样式的面板。现在可以将它们以及窗体分隔器一起添加到窗体中。
this->Controls->Add(m_panel);
this->Controls->Add(split1);
this->Controls->Add(m_ptreeview);