Visual Studio 2022で「C++のWindowsフォーム(WinForms)」を探してもテンプレートが出てこないのは、環境不具合ではなく“仕様”です。現在はC++向けWinFormsテンプレートが標準搭載されないため、C++/CLIを追加して作るか、別のGUI方式を選ぶのが現実的な解決策になります。
なぜ「Visual C++ の Windows フォーム」テンプレートが見つからないのか
Visual Studioでは、C++/CLIでWindowsフォームアプリを新規作成するための専用テンプレートが標準では提供されません。また、過去に存在したC++/CLI向けWinFormsテンプレートは、Visual Studioの新しい世代では廃止(少なくとも標準搭載からは外れた扱い)と説明されています。
つまり、VBやC#のように「Windows フォーム アプリ」を選んで即デザイナー、という導線はC++には用意されていません。ですが、C++/CLI(マネージC++)を使えば、C++でWinFormsそのものは作れます。
最初に結論:あなたの目的別・おすすめルート
| やりたいこと | おすすめ | 理由 |
|---|---|---|
| VBのようにドラッグ&ドロップでGUIを作りたい | C#(WinForms)+C++はDLL/ライブラリ化 | テンプレート/デザイナー/情報量が最も多く、保守もしやすい |
| どうしても“UIもC++で”作りたい(WinFormsにこだわる) | C++/CLIでWinForms | .NETのWinFormsをC++から扱える(ただし導線は自分で整える) |
| 完全ネイティブC++でGUIを作りたい | MFC / Qt / WinUI 3(C++/WinRT)など | WinFormsは.NET前提のため、ネイティブの王道は別枠 |
| 既存のネイティブC++資産を活かしつつ、.NET UIと繋ぎたい | C++/CLI(ラッパー)+C# UI | C++/CLIは「相互運用」を得意分野として想定されている |
本記事では「C++/CLIでWinFormsを作る」手順を中心に、テンプレートが無い問題を現実的に解消する方法をまとめます。
C++/CLIをインストールして、C++でWinFormsを作れる状態にする
C++/CLIはVisual StudioのC++ワークロードを入れただけでは有効にならず、追加コンポーネントとして選択が必要です。
必要なもの(チェックリスト)
| 項目 | 場所(Visual Studio Installer) | 目的 | 入っていないと起きやすい症状 |
|---|---|---|---|
| Desktop development with C++(C++によるデスクトップ開発) | ワークロード | C++プロジェクト/ツールチェーンの基盤 | そもそもC++関連テンプレートが乏しい |
| C++/CLI support(v143 など) | 個別のコンポーネント(Compilers, build tools, and runtimes) | C++/CLI(/clr)プロジェクト作成・ビルド | CLRプロジェクトが作れない、/clrが選べない |
| .NET Framework 4.8 SDK / Targeting Pack(推奨) | 個別のコンポーネント | WinForms(.NET Framework)で安定運用 | ターゲットを選べない、ビルド時に参照関係で詰まる |
| Windows 11/10 SDK | 個別のコンポーネント | Windows向けビルド/ヘッダー/リソース | SDK不足でコンパイルが進まない |
インストール手順(Windows 11 + Visual Studio Community 2022)
- スタートメニューから「Visual Studio Installer」を起動
- インストール済みの「Visual Studio Community 2022」の右側にある「変更(Modify)」をクリック
- ワークロードで「C++によるデスクトップ開発」をオン
- 個別のコンポーネントタブに移動し、次をチェック
- C++/CLI support for v143 build tools(Latest)(または同等のC++/CLIサポート)
- .NET Framework 4.8 SDK、.NET Framework 4.8 targeting pack(表示があれば)
- Windows SDK(未導入の場合)
- 「変更」を押してインストール
これで「C++/CLIで.NETをターゲットにする」ための土台が整います。
方法1(王道):C++/CLIプロジェクトからWinFormsを立ち上げる
Visual Studioに標準の“C++ WinFormsアプリ”テンプレートが無い場合でも、CLR(.NET)向けC++プロジェクトを作って、そこからWinFormsの起動コードを用意すればGUIアプリとして動かせます。
プロジェクト作成のコツ(テンプレートが見つからないとき)
- 「新しいプロジェクトの作成」で検索欄に CLR または C++/CLI を入れて探します。
- 候補例(環境により表示名が多少異なります)
- CLR Console App (.NET Framework)
- CLR Empty Project (.NET Framework)
- CLR Class Library (.NET Framework)(UIではなくラッパー用途向け)
最小構成:WinFormsを起動するmain(Program.cpp)
まずは「ウィンドウが出る」状態を最短で作ります。フォームは次のセクションのMainFormを使います。
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::Windows::Forms;
#include "MainForm.h"
[STAThreadAttribute]
int main(array<String^>^ args)
{
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Application::Run(gcnew MainForm());
return 0;
}
ポイントは次のとおりです。
#usingで必要なアセンブリ(Windows.Formsなど)を参照する[STAThreadAttribute]を付けてWinFormsが期待するスレッドモデルにするApplication::Runにフォームを渡してメッセージループを開始する
最小構成:フォーム本体(MainForm.h)
デザイナーを使わず、コードで部品を置く最小例です(後述の「方法2」を使うとデザイナー前提のひな形を用意しやすくなります)。
#pragma once
#using <System.dll>
#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Drawing;
public ref class MainForm : public Form
{
public:
MainForm()
{
this->Text = "C++/CLI WinForms (VS2022)";
this->StartPosition = FormStartPosition::CenterScreen;
this->ClientSize = Drawing::Size(520, 220);
auto label = gcnew Label();
label->AutoSize = true;
label->Text = "テンプレートが無くても、C++/CLIならWinFormsを起動できます。";
label->Location = Point(16, 20);
auto button = gcnew Button();
button->Text = "クリック";
button->Location = Point(16, 60);
button->Click += gcnew EventHandler(this, &MainForm::OnClick);
output = gcnew TextBox();
output->Location = Point(16, 110);
output->Width = 480;
this->Controls->Add(label);
this->Controls->Add(button);
this->Controls->Add(output);
}
private:
TextBox^ output;
void OnClick(Object^ sender, EventArgs^ e)
{
output->Text = "Hello from C++/CLI WinForms!";
}
};
コンソールが出るのを消したい(GUIアプリ化)
まずはコンソール付きで動作確認するのが楽です。その上で「コンソールを出さない」場合は、次を確認します。
- プロジェクトのプロパティ → リンカー → システム → サブシステムを「Windows」に変更(/SUBSYSTEM:WINDOWS)
- 必要なら「既定のエントリポイント」周りを調整(環境により不要な場合も多い)
初学者は、まずコンソール付きで「ビルド→起動→フォーム表示」まで到達してから、見た目を整えるのがおすすめです。
方法2(手早い):拡張機能で“C++ WinFormsテンプレート”を足す
「テンプレートが無いのがつらい」「フォームデザイナー前提のひな形が欲しい」という場合は、Visual Studio Marketplaceの拡張機能でテンプレートを追加する手があります。たとえば、VS2022向けにC++ WinFormsプロジェクトを追加する拡張が公開されています。
導入イメージ
- Visual Studio → 拡張機能(Extensions)関連のメニューから管理画面を開く
- Marketplaceで次のようなキーワードで検索
- C++ Windows Forms for VS 2022 .NET Framework
- CppWinFormsProjectTemplate
- インストール後、Visual Studioを再起動
- 新規プロジェクト作成で「WinForms」「CppWinForms」等で検索してテンプレートを選ぶ
注意点として、拡張機能はMicrosoft公式テンプレートではない場合があります。業務利用では、社内のセキュリティ方針(配布元の審査、オフラインインストール可否、更新頻度、署名、ソース公開状況など)に合わせて判断してください。
「C++/CLIでWinForms」はどこまで現実的?(メリット/デメリット)
| 観点 | メリット | デメリット |
|---|---|---|
| UI開発の速さ | WinForms自体は成熟していて部品も豊富 | C#ほど導線が整っておらず、ひな形作りでつまずきやすい |
| 既存C++資産の活用 | ネイティブC++と.NETの橋渡し(相互運用)に強い | UIまでC++/CLIで作る運用はチームに知見が必要 |
| 将来性・移行 | .NET Frameworkで安定するケースは多い | .NET 7以降へ移行するとデザイナーが崩れる/動かない報告もある |
現場目線でのおすすめは、次のどちらかに寄せることが多いです。
- おすすめA:UIはC#(WinForms/WPF)に任せ、ビジネスロジックや高速処理はC++のDLL/静的ライブラリにする
- おすすめB:どうしても.NET側からネイティブを自然に呼びたい部分だけC++/CLIでラップし、UIはC#にする
「UIまでC++でやる」こと自体は可能ですが、テンプレートの不在や人材要件を考えると、長期運用では“分業”が効く構成の方が強いです。
よくある詰まりポイント(テンプレートが出ない・作れない)
「C++」自体がテンプレートに出てこない
- Visual Studio Installerで「C++によるデスクトップ開発」を入れていない可能性が高い
- Communityでも利用可能。インストーラーで追加すればOK
「CLR(.NET)向けのC++プロジェクト」が見つからない
- C++/CLI supportが未導入の典型パターンです
- インストーラーの「個別のコンポーネント」でC++/CLIを追加してください
フォームデザイナーを使いたいのに、フォーム追加の項目が見当たらない
- 環境によっては「フォーム追加」の導線が薄く、CLRコンソールから自作が必要になることがあります
- 手っ取り早くデザイナー前提で進めるなら、拡張機能でテンプレートを足すのが近道です
.NET(Core/5/6/7/8)へ移行したらデザイナーが壊れた
C++/CLIのWinFormsは、特にデザイナー周りで.NET Framework時代との互換問題が出ることがあります。実際に、.NET 7.0へ移行したC++/CLIプロジェクトでWinFormsデザイナーが失敗する報告もあります。
- 「デザイナーを安定して使う」ことを優先するなら、まずは.NET Framework(例:4.8)で固める
- 将来的な移行が必要なら「UIはC#」に寄せる構成を検討する
手順を短くまとめる(最短ルート)
| やること | ゴール |
|---|---|
| Visual Studio Installerで「C++によるデスクトップ開発」+「C++/CLI support」を入れる | CLR(.NET)向けC++プロジェクトが作れるようになる |
| CLR Console/Emptyプロジェクトを作る | WinForms起動コードの置き場所を用意 |
#using <System.Windows.Forms.dll>+Application::Runでフォームを起動 | フォームが表示される |
| デザイナーが欲しいなら拡張機能(テンプレート追加)も検討 | ドラッグ&ドロップ前提で進めやすくなる |
補足:完全ネイティブで「VBのWinForms的なもの」を探している場合
もし「.NETは使わずにC++だけでGUIを作りたい」という意味で「C++のWindowsフォーム」を探しているなら、探し方を切り替える必要があります。WinFormsは.NETのGUIフレームワークなので、ネイティブC++の文脈では次が比較対象になりやすいです。
- MFC(Visual Studioの“デスクトップ開発 with C++”で追加できる)
- Qt(クロスプラットフォーム。学習コストはあるが強力)
- WinUI 3(Windows App SDK)や、低レベルならWin32 API直書き
「VBのWindowsフォームのC++版」というイメージのままだとテンプレートが見つからないのは自然で、現在のVisual Studioでは“C++は別のUI技術でやる”か、“C++/CLIで.NETへ乗る”の二択になりがちです。

コメント