Visual Studio 2022でC++のWindowsフォームがない?C++/CLIでWinFormsを作る手順と代替案

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# UIC++/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)

  1. スタートメニューから「Visual Studio Installer」を起動
  2. インストール済みの「Visual Studio Community 2022」の右側にある「変更(Modify)」をクリック
  3. ワークロードで「C++によるデスクトップ開発」をオン
  4. 個別のコンポーネントタブに移動し、次をチェック
    • C++/CLI support for v143 build tools(Latest)(または同等のC++/CLIサポート)
    • .NET Framework 4.8 SDK、.NET Framework 4.8 targeting pack(表示があれば)
    • Windows SDK(未導入の場合)
  5. 「変更」を押してインストール

これで「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プロジェクトを追加する拡張が公開されています。

導入イメージ

  1. Visual Studio → 拡張機能(Extensions)関連のメニューから管理画面を開く
  2. Marketplaceで次のようなキーワードで検索
    • C++ Windows Forms for VS 2022 .NET Framework
    • CppWinFormsProjectTemplate
  3. インストール後、Visual Studioを再起動
  4. 新規プロジェクト作成で「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へ乗る”の二択になりがちです。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次