今更始める win32 + directwrite #pronamaclrhsapporocpp

39
[1] hiyohiyo Twitter: @openlibsys http://crystalmark.info/ プログラミング生放送 +CLR/H+Sapporo.cpp 勉強会 @札幌 ユビキタス協創広場 U-cala

Upload: hiyohiyo

Post on 28-May-2015

13.900 views

Category:

Software


3 download

DESCRIPTION

2014/7/12 プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 ユビキタス協創広場 U-cala における発表資料です。

TRANSCRIPT

Page 1: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[1]

hiyohiyoTwitter: @openlibsys

http://crystalmark.info/

プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌ユビキタス協創広場 U-cala

Page 2: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[2]

本日のお品書き

自己紹介

DirectWrite

DirectWrite活用例

Win32+DirectWrite

まとめ

Page 3: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[3]

自己紹介

Page 4: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[4]

自己紹介

名前:hiyohiyo/ひよひよ

年齢:35歳

家族:妻, 愛娘, 愛息子

趣味:フリーソフト開発 (約16年)

住所:北海道札幌市

□代表作: CrystalDiskInfo, CrystalDiskMark 他(通称 Crystal シリーズ)

パソコンがもっと好きになるフリーソフトを一貫して開発しています

Microsoft MVP for Visual C++Jan 2014 – Dec 2014

Page 5: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[5]

CrystalMark 2004

ランキング対応ベンチマーク

Page 6: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[6]

CrystalCPUID

CPU情報ツール

Page 7: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[7]

CrystalDiskMark 3 Shizuku Edition

新世代ディスクベンチマーク

ベンチマーク結果なんておまけですwww

通常版

Page 8: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[8]

CrystalDiskInfo 6 Shizuku Edition

HDDやSSDの健康状態を音声で教えてくれる!!

新世代ディスク情報ツール

通常版

Page 9: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[9]

Crystal Dew World 公式応援キャラクター

水晶雫

Page 10: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[10]

【宣伝】第二世代萌え駆動開発

http://www.slideshare.net/hiyohiyo/mddwin32

ソフトウェア開発で一番大切なことを紹介しています!!

Page 11: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[11]

DirectWrite

Page 12: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[12]

何とも言えない劣等感・・・

出典:Macに慣れたらWindowsのフォントが耐えられないので解決してみた|Machttp://weekly.ascii.jp/elem/000/000/206/206833/

やっぱりMacだよね Windowsのフォントは○ソ

高品質なフォントレンダリングエンジンさえあれば・・・

Page 13: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[13]

PDC2008

出典:Windows 7: Introducing Direct2D and DirectWritehttp://channel9.msdn.com/Blogs/pdc2008/PC18

DirectWrite キタァァァァァΣ(*゚д゚ノ)ノァァァァァ!!

Page 14: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[14]

DirectWrite の位置づけ

出典:Windows グラフィックス アーキテクチャの概要http://msdn.microsoft.com/ja-jp/library/windows/desktop/ff684176(v=vs.85).aspx

Page 15: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[15]

さらに煽りが・・・

出典:Windowsの画面表示を変えるDirect2DとDirectWritehttp://ascii.jp/elem/000/000/491/491463/index-3.html

こっ、これは期待するしかねぇ!!!!

Page 16: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[16]

理想

旧アプリも自動で DirectWrite !!

DirectWrite 描画 GDI/GDI+ 描画

DirectWrite 描画に置換

Page 17: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[17]

Win8 メモ帳

ギッ、ギザギザしてる~~~orz

Page 18: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[18]

現実

それぞれ独立した形で画面に表示

DirectWrite 描画 GDI/GDI+ 描画

Page 19: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[19]

DirectWrite 活用例

Page 20: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[20]

対応ソフトは多数?登場中!!

Web ブラウザ• Internet Explorer 9 以降• Firefox• Google Chrome (Beta)など

テキストエディタ• 秀丸• Sublime Textなど

出典:秀丸エディタ Ver8.10 新機能の紹介(DirectWrite対応)http://hide.maruo.co.jp/software/hidemaru810/

Page 21: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[21]

Google Chrome の DirectWrite 有効化

Google Chrome は未だに DirectWrite に正式対応していないため、最新 Beta 版にて下記設定を行う必要があります。

1) 窓に「Chrome://flags」2) 「Disable DirectWrite」を無効にする

3) 再起動

1

2

3

Page 22: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[22]

DirectWrite は簡単に利用できます

Windows Store App WPF 4.x

IEコンポーネント (IE9以降)

ただしWin32は除く

Page 23: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[23]

Win32+DirectWrite

Page 24: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[24]

Visual C++/Win32 における UI 構築

CrystalDiskInfo 1~5 CrystalDiskInfo 6

開発環境 Visual C++/MFC Visual C++/MFC

ベースクラス CDHtmlDialog ベース独自拡張 CDialogEx ベース独自拡張

レイアウト HTML + CSS + JavaScript ピクセル固定

HiDPI 対応 OpticalZoom (IE8 以降) 自前拡大 (Per-Monitor DPI 対応)

文字列描画 DirectWrite (IE9 以降)GDI/GDI+(DirectWrite 実装中)

フォント品質は劣化

Page 25: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[25]

GDI/GDI+フォントはやっぱり不評…

Ver. 6 にしたらフォントが滲んで読みづらい!!Ver. 5 に戻そうっと

GDI+ だと文字が表示されないぞ?※OpenTypeフォント非対応のため…

ユーザーの声

大正浪漫壁紙可愛いな。

いやいや、明治水着も捨てがたい。

Page 26: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[26]

DirectWrite に対応したい!!

俺嫁

最近フォント、フォント言ってるけど、私は全然そんなの気にしないよ?そんなに気にしてる人はいないんじゃない?読めれば一緒だよ。

おっ、お前何年俺の嫁やってるんだよorz美しいフォントに憧れるのは人類普遍の原理だろ!!

やっぱり、フォントのGDI/GDI+化は劣化だよなぁ。何とかしないと…

DirectWrite 対応しましょう!!

Page 27: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[27]

Win32 コントロールの DirectWrite 化

ボタンコントロール

スタティックコントロール

エディットコントロール

Page 28: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[28]

Win32 コントロールの DirectWrite 化

どっ、どうしたら・・・

まだ慌てるような時間じゃない先行事例を調べよう

Page 29: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[29]

ネットで見かけた参考にならない事例

DirectWrite 対応した MFCコントロールはありませんか?たとえば、CEditDW とか。

ない

Page 30: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[30]

なければ作る!!

実装例が見つかりません!!

仕方あるまい自分で作ろう!

Page 31: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[31]

GDI + DirectWrite 相互運用

一般的に DirectWrite は Direct2D と組み合わせて使用されますが、IDWriteGdiInterop を介して従来の GDI と組み合わせて使用することも可能です。

既存の資産(負債?)を生かしつつ、最新?テクノロジーを利用できるわけです。

DirectWrite

Direct2D GDI

IDWriteGdiInterop

Page 32: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[32]

DirectWrite 対応ボタンコントロール

GDIで描画

GDI+で描画

DirectWriteで描画

オーナードローで実装中…

Page 33: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[33]

オーナードローの流れ

背景を描画

ボタン画像を描画

文字列を描画GDI/GDI+/DirectWrite

ダイアログに表示

全ての描画処理を自前で実装します!!

1) 背景画像描画2) アクアボタン描画 (透過PNG)3) 文字列描画

Page 34: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[34]

今日という日には間に合いませんでした…

まだ完成してません!!

漏れてはいけない何かが漏れてる…

Page 35: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[35]

まとめ

Page 36: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[36]

まとめ

Win32 + DirectWriteは茨の道orz

素直に WPF かストアアプリで作りましょう♪

Page 37: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[37]

参考文献

Page 38: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[38]

• 週アスPLUSMacに慣れたらWindowsのフォントが耐えられないので解決してみた|Machttp://weekly.ascii.jp/elem/000/000/206/206833/

• ASCII.jpWindowsの画面表示を変えるDirect2DとDirectWritehttp://ascii.jp/elem/000/000/491/491463/index-3.html

• PDC2008Introducing Direct2D and DirectWritehttp://channel9.msdn.com/Blogs/pdc2008/PC18

参考文献

Page 39: 今更始める Win32 + DirectWrite #pronamaclrhsapporocpp

[39]

ご清聴ありがとうございました