Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WPFで実践アプリ開発! 第一章 Windowsアプリの歴史
Search
Ryosuke Uchiyama
January 27, 2021
Programming
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WPFで実践アプリ開発! 第一章 Windowsアプリの歴史
Ryosuke Uchiyama
January 27, 2021
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
58
PythonでSlack通知botを作る
step63r
0
22
ChatGPT実践
step63r
1
380
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
31
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
25
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
300
Build 2021 プレイバック
step63r
0
38
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
53
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
130
Other Decks in Programming
See All in Programming
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
840
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
140
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
140
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
330
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
610
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
390
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.7k
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
540
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
180
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
140
act2-costs.pdf
sumedhbala
0
120
Featured
See All Featured
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
430
Git: the NoSQL Database
bkeepers
PRO
432
67k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
840
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
470
Embracing the Ebb and Flow
colly
88
5.1k
Transcript
WPFで実践アプリ開発! 第一章 Windowsアプリの歴史 Ryosuke Uchiyama step63r
"PC操作を監視するツール" をかいくぐるツール
こういうアプリを 簡単に作りたくない……?
Windowsプログラミング
Windowsプログラミングの変遷 • Win32 API • C/C++向けのWindows GUI開発ライブラリ • 大規模なアプリケーション開発は大変で、難易度も高い •
Microsoft Foundation Class(MFC) • C++向けのWin32 APIラッパークラス群 • 依然として仕様が難解で、あんまり知名度が上がらなかった(らしい) • Microsoft .NET Framework • WindowsアプリやWebアプリの開発・実行環境 • 共通言語基盤(Common Language Interface: CLI)の、MS自身の実装(Common Language Runtime: CLR)を保証 • WinForms, WPF, UWP(WinRT)など多くのUIライブラリ、プログラミングモデルを確立 • .NET Core • クロスプラットフォームマネージソフトウェアフレームワーク(長い) C++ C++ VB C# VB C# 時代はネイティブからマネージへ
Win32 APIは もういらないの?
Windowsアプリの歴史はWin APIと共に――
これからどうなる?Windowsプログラミング
これからどうなる?Windowsプログラミング
今からWindowsプログラミングするなら? 37591 12157 91365 160208 20053 44835 0 20000 40000
60000 80000 100000 120000 140000 160000 180000 winapi mfc winforms wpf uwp xamarin Stack Overflowのタグ別QA数 (2021年1月24日時点)
Win32 API
アプリケーション エントリポイント • すべてのアプリケーションにはスタート地点(エントリポイント)がある • C/C++でいう main 関数 • Windowsアプリにおけるエントリポイントは
WinMain 関数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); hInstance インスタンスハンドル hPrevInstance 他のインスタンスハンドル lpCmdLine コマンドライン引数 nCmdShow ウィンドウの初期表示方法
ウィンドウ プロシージャ • Windowsアプリは、ユーザやプログラムが発生させたイベントを契機として処理を行うイベント 駆動型プログラムである • イベントを処理する専用の関数をイベントハンドラと呼ぶ • Windowsアプリにおけるイベントハンドラをウィンドウプロシージャという •
ウィンドウプロシージャはウィンドウクラスを生成する時にコールバックとして設定する LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam); hWnd ウィンドウハンドル uMessage ウィンドウメッセージ wParam パラメータその1 lParam パラメータその2
メッセージ ループ • Windowsアプリはそのメインスレッド内でメッセージの受け取り待ちを無限に行うことになる • while句でメッセージを受け取る処理をメッセージループという • メッセージループにはウィンドウを維持する役割とメッセージをディスパッチする役割がある while (::GetMessage(&msg,
NULL, 0, 0) != 0) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); }
Demo Win32 APIでウィンドウを表示させてみる
ソースコード step63r/CreateWindowSample https://github.com/step63r/CreateWindowSample
Demo Spy++でウィンドウメッセージを監視する
Spy++のインストール方法
Spy++の起動方法 ※表示されないときは「外部ツール」から設定するか %ProgramFiles(x86)%¥Microsoft Visual Studio¥2019¥Professional¥Common7¥Tools¥spyxx.exe を直接起動する
MFC (Microsoft Foundation Class)
Document/Viewアーキテクチャ • MFCが既定で採用している、データと見た目を分離する設計モデル • Documentオブジェクトが永続データを管理、Viewオブジェクトがデータの表示方法を管理 • スプレッドシートとグラフビューなど、同じデータに複数の見た目が紐付く場合に適している
None
None
None
Demo MFCではじめてのアプリを作ろう!
None
None
None
None
Windows Forms
デスクトップアプリのUIフレームワーク フォームデザイナー コードビハインド ←Buttonのプロパティ
WPF (Windows Presentation Foundation)
データバインドに特化したUIフレームワーク XAMLデザイナー コードビハインド
Demo WPFではじめてのアプリを作ろう!
None
None
None
Appendix
参考文献 • API Index - Win32 apps | Microsoft Docs
• [Microsoft] Windowsデスクトップ向け業務アプリ開発には何を採用すべきか? - 2018年9月版 – Qiita • 「.NET Core 3.0」の後継は「.NET 5」 ~2020年11月にリリースへ - 窓の杜 • What's new in .NET 5 | Microsoft Docs • ウィンドウプロシージャ - Windows API 入門 • MFCから.NETへの実践的移行計画(2/5) - @IT • 階層図 | Microsoft Docs • MVCの流れを簡単にまとめてみる - Qiita