前回までの経験で「C#のウィンドウプログラムにはWinFormsとWPFという異なる(UI)プラットフォームがあり、これらは共存が困難である。」ということを学びました。(注)

注:私がMSCompAssを作って、Windows10や11に標準でついてくるcsc.exe(C# 5)を使い始めた際に参照した学習サイトは、私が20年以上前にC++を学習した際に参考にした旧いもの(「猫でも」)だったので、自然にウィンドウズプログラミングがWinFormsベースになった訳です。私はWPFという「言葉」は「Visual Studioの新しいプロジェクトの作成で出てくる略語」位は知っていましたが、WinForm、UWP等Microsoftの「寿限無寿限無」の一つくらいにしか考えておらず、両者の違い(そんなものがあるのかどうかも含め)は了解していませんでした。

 

では、「WPF(Windows Presentation Foundation)」とは一体何なのか?これについて調べるとわんさか出てきますが、最近Microsoftがお勧めのWindows Copilotさんは次の通り説明します。

 

WPFとは、Windows Presentation Foundationの略称で、Windows用のデスクトップクライアントアプリケーションを作成するためのGUIフレームワーク(注1)です。WPFは、解像度に依存しない、ベクター ベース(注2)のレンダリングエンジンであり、これは最新のグラフィックスハードウェアを活用できる(注3)ように構築されています。WPFでは、Extensible Application Markup Language (XAML)、コントロールデータバインディングレイアウト2Dおよび3Dグラフィックスアニメーションスタイルテンプレートドキュメントメディアテキストタイポグラフィなどの、アプリケーション開発機能の包括的なセットを使用します。WPF.NETの一部であり、.NET APIの他の要素を組み込むアプリケーションを構築できます。WPFのプログラミングは、ほとんどの部分がSystem.Windows名前空間に格納されている.NET型のサブセットとして存在します。WPFでは、マークアップと関連付けられたコードで動作が実装されます。このタイプのコードは分離コードと呼ばれています。WPFは、マイクロソフトが提供するMicrosoft Learnのコースで学ぶことができます。」(ご参考

注1:「なんちゃらフレームワーク」という言葉が出てきたら、サブシステム(API群)とか纏まったライブラリーがある、と考えてよいでしょう。

注2:FormはGDI+を使っており「ラスターベース」の描画を行います。「ラスター」と「ベクター」の違いは、これとかをお読みください。

注3:WinFormはWin32APIのラッパーだったので、GDI+というグラフィックサブシステム(API群)を使っていますが、処理がCPUに依存しているので、現在の新しいPCのようにGPUが独立して処理できる場合でもCPUに負荷がかかってしまいます。「最新のグラフィックスハードウェアを活用できる」とは、WPFがDirectXをベースにしているので、処理をGPUに任せることが出来る、という意味です。

 

自分なりに纏めると、

 

1995年の32bitOSであるWindows 95から脈々と続いてきたWin32API、GDI+、およびそれらをラップしてライブラリーとしてまとめたWinForms(プラットフォーム)から、新しい技術、特にDirect XをGUIに採用し、CPUへの負荷をGPUへ移管した新しいGUIライブラリー(注)

注:Windows 10、11についてくるC# 5では"C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF"に入っているようです。

 

で、その移行の必然性はこのようなことにありました。(大昔は640x480しかなかったのですが...。なお、実際には思った通り移行せず、未だにWinFormsアプリが結構残っているのが実態のようです。)

 

この進化はWelcomeですが、それは同時にインターネット環境への適合をも進め、「分離コードと呼ばれ」る、UIに関わるXamlコーディング(View)と処理に関わるC#コーディング(Model)の分離を可能とし(というか、促進し)、データバインディングと呼ばれるViewとModelの結合処理(ViewModel)で結ぶ、統合開発環境なしにはWPFベースのアプリケーションプログラムを開発するのが相当ムズイ状況にしてしまいました。(とはいえ、個人で趣味の小規模アプリを作るうえでは、このようなビジネスレベルの話は殆ど関係がない、とも思ったのですが...)

 

でも、本当にWPFプログラムはVisual Studioを使わずに書けないの?

 

などと馬鹿なことを考えたことを、まぁ、ブログネタにしたんですが。(続く)

 

【ご参考】

WPFを理解する!初心者でも分かる特徴、使用環境、基礎知識などを簡単に解説! | 案件評判 (anken-hyouban.com)

WPF とは|WPF 入門 (zenn.dev)

【2分で理解】!WPF とは ?図付きで解説! | 初心者DIYプログラミング入門 (resanaplaza.com)