Windows フォーム コントロールの作成 (C++)
Windows フォーム コントロールは、Windows フォーム アプリケーション (共通言語ランタイムを対象とする GUI アプリケーション) に追加することができるコンポーネントです。 Visual C++ の Windows フォーム アプリケーションは、.NET Framework クラスおよびその他の .NET 機能を新しい Visual C++ 構文で使用します。
この手順では、数字を表示する Windows フォーム コントロールを作成します。 この数字は、ユーザーがアプリケーションのラベルをクリックするたびにインクリメントします。 また、コントロールをテストするための Windows フォーム アプリケーション プロジェクトも作成します。
ここでは、次の内容について説明します。
新規プロジェクトの作成。
コントロールのデザイン。
コントロールへのカスタム プロパティの追加。
コントロールをテストするためのプロジェクトの追加。
アプリケーションへのコントロールの配置。
アプリケーションの実行。
必須コンポーネント
このトピックは、C++ 言語の基本を理解していることを前提としています。 C++ の学習を始めたばかりのユーザーには、『C++ Beginner's Guide』(Herb Schildt 著) をお勧めします。このガイドブックはオンラインで入手できます (https://go.microsoft.com/fwlink/?LinkId=115303)。
このトピックのビデオ デモについては、「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 コントロールのプロパティを設定します。
ユーザー コントロールのプロパティを設定するには
[プロパティ] ウィンドウが表示されていない場合は、[表示] メニューの [プロパティ ウィンドウ] をクリックします。
Windows フォーム デザイナーで、コントロールをクリックして選択し、そのプロパティを次のように設定します。
Size プロパティを 100, 100 に設定します。
[BorderStyle] を Fixed3D に設定します。
ラベルの境界線は、コントロールをアプリケーションに配置すると表示されます。
[ツールボックス] ウィンドウが表示されていない場合は、[表示] メニューの [ツールボックス] をクリックします。
Label コントロールをツールボックスからデザイン サーフェイスにドラッグし、コントロールの中央付近に配置します。
ラベルのプロパティを次のように設定します。
[BorderStyle] を FixedSingle に設定します。
[Text] を数字 0 (ゼロ) に設定します。
[Autosize] を False に設定します。
[Size] を 30, 20 に設定します。
[TextAlign] を MiddleCenter に設定します。
Nameプロパティ (コードでラベルを参照する方法) は label1 のままにします。 コントロールは次のようになります。
ラベルをダブルクリックして、ラベルの Click イベント (ラベルの既定のイベント) に対するイベント ハンドラーを追加します。
clickcounter.hファイルが、空のイベント ハンドラー メソッドと共に、編集領域に表示されます。
注意
領域を広げるには、[ツールボックス] ウィンドウまたは [プロパティ] ウィンドウの閉じるボタンをクリックしてこれらのウィンドウを閉じるか、それらの固定を解除して自動的に隠れるようにします。
label1_Click メソッドの左中かっこの後ろにカーソルを移動して Enter キーを押し、次のように入力します。
int temp = System::Int32::Parse(label1->Text); temp++; label1->Text = temp.ToString();
スコープ解決演算子 (::)、ドット演算子 (.)、または矢印演算子 (->) を入力すると、IntelliSense によって有効な選択肢の一覧が表示されます。 一覧内のアイテムを強調表示して Tab キーか Enter キーを押すか、またはアイテムをダブルクリックすると、そのアイテムがコードに挿入されます。
また、メソッドの左かっこを入力すると、Visual Studio ではそのメソッドの各オーバーロードに対しる有効な引数の型が表示されます。
コントロールのカスタム プロパティの追加
この手順では、コントロールに表示された数字が、ラベルをクリックしたときにインクリメントされるか、コントロール内の任意の場所をクリックしたときにインクリメントされるかを決定する、カスタム プロパティを定義します。
コントロールにカスタム プロパティを追加するには
clickcounterControl.h ファイルの先頭にある最初の public スコープ インジケーター (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 フォーム コントロールが生成されます。 このファイルはプロジェクトのディレクトリ構造内にあります。
コントロールをテストするためのプロジェクトの追加
この処理では、clickcounter コントロールのインスタンスをフォームに配置するための Windows フォーム アプリケーション プロジェクトを作成します。
注意
コントロールをテストするための Windows フォーム アプリケーションは、Visual C++ または他の .NET 言語 (たとえば C# や Visual Basic) で記述できます。
Windows フォーム アプリケーション プロジェクトを作成するには
- [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
ソリューションにプロジェクトを追加するには、ソリューション エクスプローラーで controlandtestapp solution ソリューションを右クリックし、[追加] をポイントして、[新しいプロジェクト] をクリックする方法もあります。
[プロジェクトの種類] ペインで、[Visual C++] ノードの [CLR] をクリックし、次に [Visual Studio にインストールされたテンプレート] ペインの [Windows フォーム アプリケーション] をクリックします。
プロジェクトとして「testapp」などの名前を付けて入力します。
[ソリューション] ボックスで、既定の [新しいソリューションを作成する] 設定をそのまま使用するのではなく、必ず [ソリューションに追加] をクリックし、次に [OK] をクリックします。
新しいプロジェクトの Windows フォーム デザイナーが開き、この図にあるような Form1 という名前の新しいフォームが表示されます。
コントロールをツールボックスに追加するには
コントロールへの参照を追加します。 ソリューション エクスプローラーで、testapp プロジェクトを右クリックし、[参照] をクリックします。
[新しい参照の追加] ボタンをクリックし、[プロジェクト] タブをクリックして (このソリューションの別のプロジェクトへの参照を追加します)、clickcounter プロジェクトを選択します。 [OK] を 2 回クリックします。
[ツールボックス] ウィンドウが表示されていない場合は、[表示] メニューの [ツールボックス] をクリックします。
"歯車" アイコンの付いた clickCounter コントロールがツールボックスに見つからない場合は、ツールボックスを右クリックし、[アイテムの選択] をクリックします。
[参照] ボタンをクリックして、ソリューションのディレクトリ構造内の clickcounter.dll ファイルを検索します。 それを選択して、[開く] をクリックします。
clickcounter コントロールが [.NET Framework コンポーネント] の一覧に表示され、チェック マークが付きます。 [OK] をクリックします。
コントロールがツールボックスに表示され、既定の "歯車" アイコンが付きます。
アプリケーションへのコントロールの配置
この処理では、コントロールの 2 つのインスタンスをアプリケーション フォームに配置し、それらのプロパティを設定します。
コントロールのインスタンスをフォームに配置するには
[ツールボックス] から、clickcounter コントロールの 2 つのインスタンスをドラッグします。 それらが重ならないようにして、フォームに配置します。
フォームを広げるには、フォームをクリックして選択し、いずれかの選択ハンドルを外側に向かってドラッグします。
[プロパティ] ウィンドウが表示されていない場合は、[表示] メニューの [プロパティ] をクリックします。
ClickAnywhere プロパティは [プロパティ] ウィンドウの [その他] セクションにあります (プロパティがカテゴリ別に編成されている場合)。
フォーム上で clickcounter コントロールの 1 つのインスタンスをクリックして選択し、その ClickAnywhere プロパティを true に設定します。
clickcounter コントロールのもう 1 つのインスタンスの ClickAnywhere プロパティは、false (既定値) のままにします。
ソリューション エクスプローラーで、testapp プロジェクトを右クリックし、[スタートアップ プロジェクトに設定] をクリックします。
[ビルド] メニューの [ソリューションのリビルド] をクリックします。
2 つのプロジェクトがエラーなしでビルドされます。
アプリケーションの実行
この処理では、アプリケーションを実行し、コントロールをクリックしてそれらをテストします。
アプリケーションをテストするには
[デバッグ] メニューの [デバッグ開始] をクリックします。
フォームにコントロールの 2 つのインスタンスが表示されます。
アプリケーションを実行し、両方の clickcounter コントロールをクリックします。
ClickAnywhere が true に設定されているコントロールをクリックします。
ラベルの数字は、コントロール内の任意の場所をクリックしたときにインクリメントされます。
ClickAnywhere が false に設定されているコントロールをクリックします。
ラベルの数字は、ラベルの境界内をクリックしたときにのみインクリメントされます。 次のスクリーンショットは、数回クリックした後のアプリケーションの外観を示しています。
- Form1 ウィンドウの右上隅にある閉じるボタンをクリックして、テスト アプリケーションを終了します。
次の手順
前へ : .NET Framework を使った Windows フォーム アプリケーションの作成 (C++) | 次へ : DirectX を使用するゲームの作成 (C++)