C++/WinRTのお勉強

・最近MFCやWTLで作るのにも飽きたなと思い、QTとC++/WinRTも触り始めました。ところが、C++/WinRT ~~のあまりの人気のなさ~~に惹かれて勉強した記録記事を書いてみようかなと。とりあえず、UWPアプリの開発を行います。念のために言っておきますが、UWPアプリを作るんだったら、C#で作った方が何倍も楽。それでもC++/WinRTでという人のみどうぞ。偶にHPの構成が変更になったりして、リンクが切れたりすることがありますが、そのときは探してください。

・ゆっくり更新していきます。

<br>

# 1. UWP 基礎編
・MFC等といった古い開発環境に慣れているとUWPで何か作ろうと思っても違いすぎて訳がわからないと思うので、まずはUWPアプリを作る上で基礎的なことをやります。
・UWPアプリではUIは[xaml](https://docs.microsoft.com/ja-jp/windows/uwp/xaml-platform/)という言語で記述し、UIとデータを切り離し[データバインディング](https://docs.microsoft.com/ja-jp/windows/uwp/data-binding/)という仕組みでUIとデータを同期させます。また、WinRT APIは非同期APIが多いので[非同期](https://docs.microsoft.com/ja-jp/windows/uwp/threading-async/)の簡単な使い方までをここでやります。

[C++/WinRTでUWPその1　まずはHello World](https://qiita.com/lilac0011/items/6d1282fa6c7b1265b1c2)
[C++/WInRTでUWPその2　Xamlの編集](https://qiita.com/lilac0011/items/108b4c078a8806955a7b)
[C++/WinRTでUWPその3　データバインディングその1 xamlでバインドできるView Model](https://qiita.com/lilac0011/items/4e329d3d30da8e14ab2f)
[C++/WinRTでUWPその4　データバインディングその2 コントロールへの変更通知](https://qiita.com/lilac0011/items/2c3f1a31fd5a91345647)
[C++/WinRTでUWPその5　データバインディングその3 List～コントロールへのバインド](https://qiita.com/lilac0011/items/a2ce43b124db111f5d26)
[C++/WinRTでUWPその6　図形の描画（Win2Dを使用して）](https://qiita.com/lilac0011/items/17b3cb503154a8bbf19d)
[C++/WinRTでUWPその7　非同期操作IAsyncAction/co_await](https://qiita.com/lilac0011/items/54da15cc506b59e893d8)

<br>

# 2. WinRT API編
・ある程度の使い方さえわかれば[uwpのサンプル](https://github.com/microsoft/Windows-universal-samples/tree/master/Samples)をみれば使えるようになると思いますが、いくつかの[API](https://docs.microsoft.com/en-us/uwp/api/)を使ってみたいと思います。

[C++/WinRTでUWPその8　ファイルピッカーと画像の表示](https://qiita.com/lilac0011/items/b23180b72f25392122dc)
[C++/WinRTでUWPその9　OCRとテキスト保存](https://qiita.com/lilac0011/items/a8b5d8f0786553884651)
[C++/WinRTでUWPその10　WinUI3でWebView2を使おう](https://qiita.com/lilac0011/items/959735b4304bb6aa1ae0)
[C++/WinRTでUWPその11　複数ウインドウの表示とUIの更新と　その1.](https://qiita.com/lilac0011/items/2588ee093a65fb1ca59e)
[C++/WinRTでUWPその12　複数ウインドウの表示とUIの更新と　その2.](https://qiita.com/lilac0011/items/61c97cfc96da35b81df2)
[C++/WinRTでUWPその13　ピクチャフォルダをサムネイル表示しよう](https://qiita.com/lilac0011/items/4c897212d236df43fee6)

<br>

# 3. MFCでもWinRT（番外編）
・WinUI 3 in UWPでExperimentalが消えたら何かを作ろうと思っていたんですが、全然消えない…
・MSが[デスクトップ アプリで WinRT XAML コントロールをホストする (XAML Islands)](https://docs.microsoft.com/ja-jp/windows/apps/desktop/modernize/xaml-islands)こんな感じのページをつくったのでMFCからWinRTを利用してみようと考えてやってみました。

[MFCでもWinRTその1.　メッセージダイアログとAsync/co_wait](https://qiita.com/lilac0011/items/3c4b1322435092f32c40)
[MFCでもWinRTその2.　MFCアプリからWinRT APIの利用（ダイアログからOCRの利用）](https://qiita.com/lilac0011/items/4f1a6d4c689430d16330)
[MFCでもWinRTその3.　MFCアプリからWinRTコントロールの表示（Buttonの表示のみ）](https://qiita.com/lilac0011/items/f05c81ba5a6a4076b5be)
[MFCでもWinRTその4.　MFCアプリからWinRTコントロールの表示（Buttonのイベントハンドラ追加）](https://qiita.com/lilac0011/items/35f4badac292240dae19)
[MFCでもWinRTその5.　MFCアプリからWinRTコントロールの表示（xamlを使用してButton表示）](https://qiita.com/lilac0011/items/7a62ff921dc4f9adeba5)
[MFCでもWinRTその6.　MFCアプリからWinRTコントロールの表示（ListViewへのバインド?）](https://qiita.com/lilac0011/items/0d4b0958eba301fe3bf9)
[MFCでもWinRTその7.　MFCアプリでもピクチャフォルダをサムネイル表示しよう（仮部分の表示まで）](https://qiita.com/lilac0011/items/ca08fbb33dbf42121c4a)
[MFCでもWinRTその8.　MFCアプリでもピクチャフォルダをサムネイル表示しよう（List,Gridの表示））](https://qiita.com/lilac0011/items/d05e5635a5469aee908c)

<br>

# 4. Windows App SDKでアプリを作ろう
・~~C++/WinRTがMSから見捨てられたので~~Windiows App SDKを使用して適当なアプリを作っていきたいと思います。使用言語はC++で
・まずは[MSのページ](https://learn.microsoft.com/ja-jp/windows/apps/get-started/start-here?tabs=vs-2022-17-10)をよく読んで、ビルド出来るようにしてから読んでください。特に[最新の WinUI/Windows アプリ SDK に更新する](https://learn.microsoft.com/ja-jp/windows/apps/get-started/start-here?tabs=vs-2022-17-10#4-update-to-the-latest-winuiwindows-app-sdk)を忘れると非常に痛い目にあうことがあります。SDK1.2の起動時に特定のコントロールを追加するとクラッシュするバグには...
・最新版に更新したら、必ず[ここから安定版のランタイム](https://learn.microsoft.com/ja-jp/windows/apps/windows-app-sdk/downloads)を入手してインストールしてください。インストールしないとアプリが実行できません（もし、 [Microsoft Visual C++ 再頒布可能パッケージ](https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170)をインストールしていないPCで実行する場合にはこれもインストールしてください）。
・基本的にはC++/WinRTと同じですが、namespaceが「winrt::Windows～」から「winrt::Microsoft～」へ変更になったものあったりして非常に間違いやすいものとなっていますので注意してください。他にもWinRTではありませんが、「Microsoft::WRT～」などもあり、バッティングしたりすることもあるので注意しましょう。
・準備が出来たら、アプリを作っていきましょう。

   ## 4-1. 削除が出来る画像ビューワー
   [4-1-1. どのようなものを作るか](https://qiita.com/lilac0011/items/cbfd486810e5657db701)
   [4-1-2. 実装しよう（①～②まで）](https://qiita.com/lilac0011/items/4e3e30bc78db7dd19b6f)
[4-1-3. 実装しよう（③～④まで）](https://qiita.com/lilac0011/items/636f62cff1fadaec47a5)
[4-1-4. 実装しよう（⑤～⑥まで）](https://qiita.com/lilac0011/items/8be388a82fe7b8b7cee0)
[4-1-5. 実装しよう（⑦～最後まで）](https://qiita.com/lilac0011/items/8a75c5ceb7d3f684b737)

   ## 4-2. Windows App SDKでもOpenCVを使用して画像処理
   [4-2-1. Windows App SDKでもOpenCVを使用して画像処理](https://qiita.com/lilac0011/items/092e4e9c2323ff9f8b94)
   [4-2-2. Copilotにコードレビューしてもらおう](https://qiita.com/lilac0011/items/1a13c408c16d64492bbe)