MFCによるWindowsデスクトップアプリ保守の知識マップ(知識グラフ)
type: Dataset
description: MFCはWin32 APIをC++のクラスとして扱いやすくするフレームワークで、CWinAppがアプリ全体の初期化を担い、メッセージマップがWindowsメッセージをハンドラー関数に結びつけ、Document/ViewアーキテクチャがデータとUIの表示を分離し、DDX/DDVがダイアログのコントロールとメンバー変数を対応づけて検証します。MFCを使うにはVisual Studio InstallerでMFCコンポーネントを個別にインストールする必要があり、共有DLLか静的リンクかも構成できます。記事は、完全新規の一般的なGUIアプリケーションではMFCの採用を慎重に判断すべきである一方、既存MFCアプリの保守・機能追加・段階的移行では現実的によく価値があるという位置づけを示しています。

MFC(Microsoft Foundation Classes)
type: Concept
definition: C++でWindowsデスクトップアプリやCOMサーバーを作るためのマイクロソフト製クラスライブラリ。
alternative label: Microsoft Foundation Class Library
uses: Win32 API
uses: CWinApp
uses: CString
implements: メッセージマップ
implements: Document/Viewアーキテクチャ
implements: DDX/DDV
requires: Visual Studio InstallerのMFCコンポーネント
configured by: MFCのリンク方式(Use of MFC)
not recommended for: 完全新規の一般的なGUIアプリ開発
recommended for: 既存MFCアプリの保守・段階的移行

Win32 API
type: Concept
definition: Windowsのネイティブなアプリケーション開発向けAPI群。
alternative label: Windows API

CWinApp
type: Concept
definition: アプリケーション全体の初期化と終了を担う、MFCのCWinApp派生クラス。通常1つのグローバルオブジェクトとして存在する。
alternative label: CWinAppクラス
broader: MFC(Microsoft Foundation Classes)
automates: Win32 API

メッセージマップ
type: Concept
definition: Windowsメッセージやコマンドをハンドラー関数に結びつける、MFCのBEGIN_MESSAGE_MAPからEND_MESSAGE_MAPまでの対応表の仕組み。
alternative label: BEGIN_MESSAGE_MAP
alternative label: Message Map
broader: MFC(Microsoft Foundation Classes)
requires: Win32 API

Document/Viewアーキテクチャ
type: Concept
definition: アプリケーションが扱うデータ(CDocument)と、その表示(CView)を分離するMFCの構造。ドキュメントテンプレートがフレーム・ドキュメント・ビューを結びつける。
alternative label: Document/View
alternative label: CDocument/CView
broader: MFC(Microsoft Foundation Classes)
requires: CWinApp

DDX/DDV
type: Concept
definition: ダイアログ上のコントロールとC++のメンバー変数を対応づけるDDX(Dialog Data Exchange)と、その入力値を検証するDDV(Dialog Data Validation)からなるMFCの仕組み。
alternative label: Dialog Data Exchange
alternative label: Dialog Data Validation
alternative label: DoDataExchange
broader: MFC(Microsoft Foundation Classes)
requires: リソースファイル(.rc/resource.h)

リソースファイル(.rc/resource.h)
type: Concept
definition: ダイアログテンプレート、メニュー、アイコン、文字列テーブルなどを定義するWindowsの.rcファイルと、対応するリソースIDを定義するresource.hの組。
alternative label: .rcファイル
alternative label: resource.h
alternative label: リソーススクリプト

CString
type: Concept
definition: MFC/ATL系のコードで多用される、可変長の文字列を扱うC++クラス。
alternative label: CStringクラス

Visual Studio InstallerのMFCコンポーネント
type: Concept
definition: Visual Studio Installerで個別に選択する、MFCのヘッダーとライブラリ(atlmfcフォルダー)を提供するコンポーネント。
alternative label: C++ MFC for latest build tools
alternative label: Microsoft.VisualStudio.Component.VC.ATLMFC

MFCのリンク方式(Use of MFC)
type: Concept
definition: MFCを共有DLLとして使うか、静的ライブラリとしてリンクするかを選ぶプロジェクト設定(Use of MFC)。
alternative label: Use MFC in a Shared DLL
alternative label: Use MFC in a Static Library

MFCモジュール状態
type: Concept
definition: MFC拡張DLLなどで、どのモジュールのリソースを見に行くかを切り替えるためにAFX_MANAGE_STATEマクロで管理する状態。
alternative label: AFX_MANAGE_STATE
alternative label: モジュール状態

ActiveX
type: Concept
definition: 実務ではCOMベースのコントロールやその周辺資産をまとめて指す言葉として使われる技術群。特に.ocx形式のUIコントロールやIE/コンテナへ埋め込む部品を含むことが多い。
alternative label: ActiveXコントロール
broader: com

bitness一致要件
type: Concept
definition: ネイティブモジュール(in-procのCOMコンポーネント、P/Invokeで呼ぶDLL、ベンダー提供SDKのDLLなど)を読み込むホストプロセスと、そのモジュールのビット構成(32bit/64bit)が一致していなければならないという制約。
alternative label: 32bit/64bitの一致
alternative label: bitness match

高DPI対応
type: Concept
definition: アプリケーションがディスプレイの拡大率に応じて正しくレイアウト・描画されるようにする、DPI対応モードの明示を含む設計・実装。
alternative label: DPI Awareness
alternative label: 高DPI
alternative label: DPI対応
alternative label: 高解像度ディスプレイ対応

完全新規の一般的なGUIアプリ開発
type: Concept
definition: 既存資産との連携を前提としない、これから作る一般的なGUIアプリケーションの新規開発。
alternative label: 新規GUIアプリ開発
alternative label: グリーンフィールド開発

既存MFCアプリの保守・段階的移行
type: Concept
definition: 既存MFCアプリの保守・機能追加・ビルド環境更新・別UIへの段階的移行といった、既存資産を対象にした作業。
alternative label: 既存資産の保守
alternative label: 段階的移行

subject: MFC(Microsoft Foundation Classes)
predicate: uses
object: Win32 API
description: MFCはWin32 APIをC++のクラスとして扱いやすくするためのライブラリであり、Win32 APIの考え方を土台にした薄いフレームワークである
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-and-atl
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: uses
object: CWinApp
description: MFCアプリケーションでは通常CWinAppから派生したグローバルオブジェクトが1つ存在し、アプリケーション全体の初期化と終了を担う
evidence: https://learn.microsoft.com/en-us/cpp/mfc/reference/cwinapp-class
verified at: 2026-08-01
certainty: established

subject: CWinApp
predicate: automates
object: Win32 API
description: CWinAppはWinMain、ウィンドウクラス登録、メッセージループなど通常Win32 APIで直接書く処理の多くをフレームワーク側で引き受ける
evidence: https://learn.microsoft.com/en-us/cpp/mfc/cwinapp-the-application-class
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: implements
object: メッセージマップ
description: MFCはWindowsメッセージやコマンドをハンドラー関数に結びつけるメッセージマップという仕組みの実装を担う
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mapping-messages
verified at: 2026-08-01
certainty: established

subject: メッセージマップ
predicate: requires
object: Win32 API
description: メッセージマップはWM_COMMANDなどのWindowsメッセージを前提とし、自クラスから基底クラスへ対応表をたどってハンドラーへ振り分ける
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mapping-messages
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: implements
object: Document/Viewアーキテクチャ
description: MFCはアプリケーションが扱うデータ(Document)と表示(View)を分離するDocument/Viewアーキテクチャの実装を担う
evidence: https://learn.microsoft.com/ja-jp/cpp/mfc/document-view-architecture
verified at: 2026-08-01
certainty: established

subject: Document/Viewアーキテクチャ
predicate: requires
object: CWinApp
description: フレーム・ドキュメント・ビューを結びつけるドキュメントテンプレートは、CWinApp派生クラスのInitInstanceの中で登録される
evidence: https://learn.microsoft.com/ja-jp/cpp/mfc/document-view-architecture
verified at: 2026-08-01
certainty: established

subject: メッセージマップ
predicate: uses
object: Document/Viewアーキテクチャ
description: ON_COMMANDで登録されたコマンドはアクティブビュー・ドキュメント・フレーム・アプリケーションの順に配送されるコマンドルーティングを持ち、Document/View構造を使っているかどうかで配送先が変わる
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mapping-messages
verified at: 2026-08-01
certainty: context-dependent

subject: MFC(Microsoft Foundation Classes)
predicate: implements
object: DDX/DDV
description: MFCはダイアログ上のコントロールとC++メンバー変数を対応づけるDDXと、入力値を検証するDDVの実装を担う
evidence: https://learn.microsoft.com/en-us/cpp/mfc/dialog-data-exchange-and-validation
verified at: 2026-08-01
certainty: established

subject: DDX/DDV
predicate: requires
object: リソースファイル(.rc/resource.h)
description: DoDataExchangeはDDX_TextなどでリソースIDとメンバー変数を対応づけるため、resource.hで定義されたコントロールIDと一致している必要がある
evidence: https://learn.microsoft.com/en-us/cpp/mfc/dialog-data-exchange-and-validation
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: uses
object: CString
description: MFCはAPIやコントロールとの相性から、可変長文字列クラスであるCStringを多用する
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-and-atl
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: requires
object: Visual Studio InstallerのMFCコンポーネント
description: Visual StudioでMFCを使うには、C++ MFC for latest build toolsなどのコンポーネントをVisual Studio Installerで個別にインストールする必要があり、入っていないとafxwin.hが見つからずビルドが止まる
evidence: https://learn.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-build-tools
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: configuredBy
object: MFCのリンク方式(Use of MFC)
description: MFCはプロジェクト設定のUse of MFCで、共有DLLとして使うか静的ライブラリとしてリンクするかを構成できる
evidence: https://learn.microsoft.com/en-us/cpp/windows/redistributing-the-mfc-library
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: requires
object: MFCモジュール状態
description: MFC拡張DLLなどでリソースを読み込む場面では、公開関数の入口でAFX_MANAGE_STATEを呼び正しいモジュール状態に切り替える必要がある
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-and-atl
verified at: 2026-08-01
certainty: context-dependent

subject: MFC(Microsoft Foundation Classes)
predicate: uses
object: ActiveX
description: 古い業務アプリでは、OLE Automation・ActiveXコントロール・COMサーバーなどCOM/OLE関連の要素がMFCアプリに組み込まれていることがある
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-and-atl
verified at: 2026-08-01
certainty: context-dependent

subject: MFC(Microsoft Foundation Classes)
predicate: requires
object: bitness一致要件
description: COM/ActiveXを利用するMFCアプリでは、32bit MFCアプリからは32bit COM、64bit MFCアプリからは64bit COMを使う必要があり、x64化の際はCOM/ActiveX依存のビット構成を確認する(COM/ActiveXを使わないMFCアプリには当てはまらない)
evidence: process-interoperability
verified at: 2026-08-01
certainty: context-dependent

subject: MFC(Microsoft Foundation Classes)
predicate: requires
object: 高DPI対応
description: 古いMFCアプリを現代のWindowsで正しく表示するには、アプリケーションがDPI対応モードを明示し、固定ピクセル描画を見直す必要がある
evidence: high-dpi-desktop-application-development-on-windows
verified at: 2026-08-01
certainty: context-dependent

subject: MFC(Microsoft Foundation Classes)
predicate: notRecommendedFor
object: 完全新規の一般的なGUIアプリ開発
description: MFCのドキュメントには新機能追加やドキュメント更新が行われないという注記があり、完全新規の一般的なGUIアプリケーションでの採用は慎重に判断すべきとされる
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-desktop-applications
verified at: 2026-08-01
certainty: established

subject: MFC(Microsoft Foundation Classes)
predicate: recommendedFor
object: 既存MFCアプリの保守・段階的移行
description: 既存MFCアプリの保守・機能追加・ビルド環境更新・別UIへの段階的移行では、MFCの知識が現実的によく必要になる
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-desktop-applications
verified at: 2026-08-01
certainty: established

subject: MFCモジュール状態
predicate: requires
object: リソースファイル(.rc/resource.h)
description: AFX_MANAGE_STATEを忘れると、DLL内のダイアログや文字列リソースなどresource.h/.rcで定義したリソースが正しいモジュールから読み込まれなくなる
evidence: https://learn.microsoft.com/en-us/cpp/mfc/mfc-and-atl
verified at: 2026-08-01
certainty: context-dependent