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
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
What's New in Android 2026
veronikapj
0
260
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
Google Apps Script で Ruby を動かす
kawahara
0
240
数百円から始めるRuby電子工作
tarosay
0
160
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
600
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
510
リアルな遅延を測る仕様
kota_yata
1
110
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
4.5k
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
190
Featured
See All Featured
From π to Pie charts
rasagy
0
280
YesSQL, Process and Tooling at Scale
rocio
174
15k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
430
Measuring & Analyzing Core Web Vitals
bluesmoon
9
960
Deep Space Network (abreviated)
tonyrice
0
260
We Have a Design System, Now What?
morganepeng
55
8.3k
My Coaching Mixtape
mlcsv
0
230
The Cost Of JavaScript in 2023
addyosmani
55
10k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
240
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
460
KATA
mclloyd
PRO
35
15k
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