更新:2007 年 11 月
Windows 窗体控件是可以添加到 Windows 窗体应用程序(面向公共语言运行库的 GUI 应用程序)的组件。使用 Visual C++ 编写的 Windows 窗体应用程序通过新的 Visual C++ 语法使用 .NET Framework 类和其他 .NET 功能。
在本过程中,您将创建显示数字的 Windows 窗体控件。用户每次单击应用程序中的标签时将递增此数字。您还将创建一个 Windows 窗体应用程序项目来测试该控件。
本演练涵盖以下内容:
- 创建新项目。 
- 设计控件。 
- 向控件添加自定义属性。 
- 添加用于测试控件的项目。 
- 将控件放在应用程序中。 
- 运行应用程序。 
先决条件
本主题假定您具备 C++ 语言的基础知识。
.gif) 有关视频演示,请参见 Video How to: Creating a Windows Forms Control (C++)(视频帮助:创建 Windows 窗体控件 (C++))。
 有关视频演示,请参见 Video How to: Creating a Windows Forms Control (C++)(视频帮助:创建 Windows 窗体控件 (C++))。
创建新项目
在本节中,您将使用“Windows 窗体控件”项目模板创建一个用户控件,该控件是一个包含其他控件的复合控件。
您也可以通过直接从 Control 类(代码负责绘制控件)或者 Component 类(无 UI 的控件)派生一个类来创建 Windows 窗体控件。
创建新的 Windows 窗体控件项目
- 在“文件”菜单上单击“新建”,再单击“项目…”。 
- 在“项目类型”窗格中,选择“Visual C++”节点中的“CLR”,然后在“Visual Studio 已安装的模板”窗格中选择“Windows 窗体控件库”。 - 键入项目的名称,如“clickcounter”。 - 为解决方案键入一个不同的名称,如“controlandtestapp”。 - 您可以接受默认位置、键入所需的位置或者导航到要保存项目的目录。 
- Windows 窗体设计器将打开并显示一个区域,您可以将要放置到控件设计图面上的控件添加到该区域中。 
设计控件
在本步骤中,您要将一个 Label 控件添加到控件设计图面中。然后,设置控件本身及其包含的 Label 控件的一些属性。
设置用户控件的属性
- 如果没有显示“属性”窗口,请单击“视图”菜单上的“属性窗口”。 - 单击以选择控件,并按照下面的操作设置其属性: - 将“Size”属性设置为“100, 100”。 
- 将“BorderStyle”设置为“Fixed3D”。 - 将控件放置到应用程序中后,将显示标签的边框。 
 
- 如果“工具箱”窗口不可见,请从“视图”菜单中选择“工具箱”。 - 将一个 Label 控件从“工具箱”拖动到设计图面上,将其放置在靠近控件中心的位置。 - 设置标签的下列属性: - 将“BorderStyle”设置为“FixedSingle”。 
- 将“Text”设置为数字“0”(零)。 
- 将“Autosize”设置为“False”。 
- 将“Size”设置为“30, 20”。 
- 将“TextAlign”设置为“MiddleCenter”。 
 - 保留“Name”属性(在代码中将使用它来引用该控件)为“label1”。该控件应如下所示: .gif) 
- 通过双击标签,为标签的 Click 事件(标签的默认事件)添加事件处理程序。 
- clickcounter.h 文件将显示在编辑区域中,并附带一个空事件处理程序方法。 .gif) 说明: 说明:- 如果需要更多空间,可以关闭“工具箱”或“属性”窗口,方法是单击相应的“关闭”框,或者解除窗口锁定使其自动隐藏。 
- 将光标移动到 label1_Click 方法的左大括号之后,按 Enter 并键入以下内容: - int temp = System::Int32::Parse(label1->Text); temp++; label1->Text = temp.ToString();- 在键入范围解析运算符 (::)、点运算符 (.) 或箭头运算符 (->) 之后,IntelliSense 将显示有效选项的列表。您可以通过突出显示某个项并按 Tab 或 Enter,或者通过双击某个项,将该项插入代码中。 - 此外,当键入方法的左括号时,Visual Studio 将显示该方法的每个重载的有效参数类型。 
向控件添加自定义属性
在本步骤中,您将定义一个自定义属性,它确定控件上显示的数字是在用户单击标签时递增还是在用户单击控件上的任何位置时递增。
向控件添加自定义属性
- 将光标放置在 clickcounterControl.h 文件顶部的第一个 public 范围指示符的冒号之后,按 Enter,然后键入以下内容: - property bool ClickAnywhere { bool get() { return (label1->Dock == DockStyle::Fill); } void set(bool val) { if (val) label1->Dock = DockStyle::Fill; else label1->Dock = DockStyle::None; } }- 当控件的 ClickAnywhere 属性设置为 true 时,标签的 Dock 属性将设置为 DockStyle::Fill,该标签将占据整个控件图面。单击控件图面上的任何位置将引发标签的 Click 事件,使标签上的数字递增。 - 当 ClickAnywhere 属性为 false(默认值)时,标签的 Dock 属性将设置为 DockStyle::None。标签不填充整个控件,并且单击控件时,必须单击标签边框内部才会引发标签的 Click 事件,使数字递增。 
- 生成用户控件。在“生成”菜单上,选择“生成解决方案”。 - 如果没有错误,将生成文件名为 clickcounter.dll 的 Windows 窗体控件。您可以在项目目录结构中找到此文件。 
添加用于测试控件的项目
在本步骤中,要创建一个 Windows 窗体应用程序项目,您将在其中的一个窗体上放置“clickcounter”控件的实例。
| .gif) 说明: | 
|---|
| 您所创建的用于测试控件的 Windows 窗体应用程序可以使用 Visual C++ 或其他 .NET 语言(如 C# 或 Visual Basic)来编写。 | 
创建 Windows 窗体应用程序项目
- 在“文件”菜单上选择“新建”,然后单击“项目…”。
也可以通过以下方法将项目添加到解决方案中:右击“解决方案资源管理器”中的“controlandtestapp”解决方案,指向“添加”,然后单击“新建项目…”。
- 在“项目类型”窗格中,选择“Visual C++”节点中的“CLR”,然后在“Visual Studio 已安装的模板”窗格中选择“Windows 窗体应用程序”。 - 键入项目的名称,如“testapp”。 - 确保选择“添入解决方案”,而不是接受“解决方案”下拉列表中默认的“创建新解决方案”设置,然后单击“确定”。 
- 将为新项目打开 Windows 窗体设计器,其中显示一个名为“Form1”的新窗体,如下图所示: .gif) 
将控件添加到工具箱
- 添加对控件的引用。在“项目”菜单上,选择“引用”;或者右击“解决方案资源管理器”中的“testapp”项目,并单击“引用”。 - 单击“添加新引用”按钮,单击“项目”选项卡(这是在此解决方案中添加对另一个项目的引用),然后选择“clickcounter”项目。单击“确定”两次。 
- 如果看不到“工具箱”窗口,请从“视图”菜单中选择“工具箱”。 
- 右击“工具箱”并单击“选择项”。 - 单击“浏览”按钮,定位到解决方案目录结构中的 clickcounter.dll文件。选择该文件并单击“打开”。 - clickcounter 控件即出现在“.NET Framework 组件”列表中,并带有一个选中标记。单击“确定”。 - 控件即显示在“工具箱”中,带有默认的“齿轮”图标。 
将控件放在应用程序中
在本步骤中,您要将控件的两个实例放到应用程序窗体上并设置其属性。
将控件的实例放置到窗体上
- 从“工具箱”拖出“clickcounter”控件的两个实例。将它们放在窗体上,避免使其重叠。 - 如果需要加宽窗体,请单击以选择窗体,向外拖动一个选择手柄。 
- 如果看不到“属性”窗口,请从“视图”菜单选择“属性”。 - 如果属性是按类别组织的,“ClickAnywhere”属性将位于“属性窗口”的“杂项”部分。 
- 单击以选择窗体上的一个“clickcounter”控件实例,将其“ClickAnywhere”属性设置为 true。 
- 保留“clickcounter”控件的另一个实例的“ClickAnywhere”属性设置为 false(默认值)。 
- 在解决方案资源管理器中,右击“testapp”项目,并选择“设为启动项目”。 
- 从“生成”菜单中选择“重新生成解决方案”。 - 您应当看到生成了两个项目,并且没有出现错误。 
运行应用程序
在本步骤中,您将运行应用程序,并单击控件测试它们。
测试应用程序
- 从“调试”菜单中选择“启动调试”。 - 将显示窗体,其中控件的两个实例都可见。 
- 运行应用程序并单击两个“clickcounter”控件: - 单击“ClickAnywhere”设置为 true 的控件。 - 当单击控件上的任何位置时,标签上的数字都会递增。 
- 单击“ClickAnywhere”设置为 false 的控件。 - 仅当在标签的可见边框内单击时,标签上的数字才会递增。下面的屏幕快照演示了应用程序在单击数次后的外观情况: 
 
.gif)
- 单击“Form1”窗口右上角的“关闭”框,关闭测试应用程序。
后续步骤
上一部分:通过使用 .NET Framework 创建 Windows 窗体应用程序 (C++) | 下一部分:使用 DirectX 创建游戏 (C++)