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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
390
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
35
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
25
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
310
Build 2021 プレイバック
step63r
0
38
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
54
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
130
Other Decks in Programming
See All in Programming
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
320
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
490
Building a Meta Ray-Ban display app
akkeylab
0
150
AIが無かった頃の素敵な出会いの話
codmoninc
1
430
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
120
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
160
VibeCodingからAgenticWorkflowへ
starfish719
0
490
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
210
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
600
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.5k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
190
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
510
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
260
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Documentation Writing (for coders)
carmenintech
77
5.4k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Building Applications with DynamoDB
mza
96
7.2k
Technical Leadership for Architectural Decision Making
baasie
3
480
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
How to Ace a Technical Interview
jacobian
281
24k
A better future with KSS
kneath
240
18k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The SEO Collaboration Effect
kristinabergwall1
1
520
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