[1]
hiyohiyo
Twitter: @openlibsys
http://crystalmark.info/
プログラミング生放送
+CLR/H+Sapporo.cpp 勉強会
@札幌 ユビキタス協創広場 U-cala
[2]
本日のお品書き
自己紹介
DirectWrite
DirectWrite活用例
Win32+DirectWrite
まとめ
[3]
自己紹介
[4]
自己紹介
名前:hiyohiyo/ひよひよ
年齢:35歳
家族:妻, 愛娘, 愛息子
趣味:フリーソフト開発 (約16年)
住所:北海道札幌市
□代表作: CrystalDiskInfo, CrystalDiskMark 他(通称 Crystal シリーズ)
パソコンがもっと好きになるフリーソフトを一貫して開発しています
Microsoft MVP for Visual C++
Jan 2014 – Dec 2014
[5]
CrystalMark 2004
ランキング対応ベンチマーク
[6]
CrystalCPUID
CPU情報ツール
[7]
CrystalDiskMark 3 Shizuku Edition
新世代ディスクベンチマーク
ベンチマーク結果なんておまけですwww
通常版
[8]
CrystalDiskInfo 6 Shizuku Edition
HDDやSSDの健康状態を音声で教えてくれる!!
新世代ディスク情報ツール
通常版
[9]
Crystal Dew World 公式応援キャラクター
水晶雫
[10]
【宣伝】第二世代萌え駆動開発
http://www.slideshare.net/hiyohiyo/mddwin32
ソフトウェア開発で一番大切
なことを紹介しています!!
[11]
DirectWrite
[12]
何とも言えない劣等感・・・
出典:Macに慣れたらWindowsのフォントが耐えられないので解決してみた|Mac
http://weekly.ascii.jp/elem/000/000/206/206833/
やっぱりMacだよね Windowsのフォントは○ソ
高品質なフォントレンダリングエンジン
さえあれば・・・
[13]
PDC2008
出典:Windows 7: Introducing Direct2D and DirectWrite
http://channel9.msdn.com/Blogs/pdc2008/PC18
DirectWrite キタァァァァァΣ(*゚д゚ノ)ノァァァァァ!!
[14]
DirectWrite の位置づけ
出典:Windows グラフィックス アーキテクチャの概要
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ff684176(v=vs.85).aspx
[15]
さらに煽りが・・・
出典:Windowsの画面表示を変えるDirect2DとDirectWrite
http://ascii.jp/elem/000/000/491/491463/index-3.html
こっ、これは期待するしかねぇ!!!!
[16]
理想
旧アプリも自動で DirectWrite !!
DirectWrite 描画 GDI/GDI+ 描画
DirectWrite 描画に置換
[17]
Win8 メモ帳
ギッ、ギザギザしてる~~~orz
[18]
現実
それぞれ独立した形で画面に表示
DirectWrite 描画 GDI/GDI+ 描画
[19]
DirectWrite 活用例
[20]
対応ソフトは多数?登場中!!
Web ブラウザ
• Internet Explorer 9 以降
• Firefox
• Google Chrome (Beta)
など
テキストエディタ
• 秀丸
• Sublime Text
など
出典:秀丸エディタ Ver8.10 新機能の紹介(DirectWrite対応)
http://hide.maruo.co.jp/software/hidemaru810/
[21]
Google Chrome の DirectWrite 有効化
Google Chrome は未だに DirectWrite に正式対応していないため、最新 Beta 版
にて下記設定を行う必要があります。
1) 窓に「Chrome://flags」
2) 「Disable DirectWrite」
を無効にする
3) 再起動
1
2
3
[22]
DirectWrite は簡単に利用できます
Windows Store App WPF 4.x
IEコンポーネント (IE9以降)
ただし
Win32は除く
[23]
Win32+DirectWrite
[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 実装中)
フォント
品質は劣化
[25]
GDI/GDI+フォントはやっぱり不評…
Ver. 6 にしたらフォントが滲んで読みづらい!!
Ver. 5 に戻そうっと
GDI+ だと文字が表示されないぞ?
※OpenTypeフォント非対応のため…
ユーザーの声
大正浪漫壁紙可愛いな。
いやいや、明治水着も捨てがたい。
[26]
DirectWrite に対応したい!!
俺嫁
最近フォント、フォント言ってるけど、
私は全然そんなの気にしないよ?
そんなに気にしてる人はいないんじゃない?
読めれば一緒だよ。
おっ、お前何年俺の嫁やってるんだよorz
美しいフォントに憧れるのは人類普遍の原理だろ!!
やっぱり、フォントのGDI/GDI+化は劣化だよなぁ。
何とかしないと…
DirectWrite 対応しましょう!!
[27]
Win32 コントロールの DirectWrite 化
ボタン
コントロール
スタティック
コントロール
エディット
コントロール
[28]
Win32 コントロールの DirectWrite 化
どっ、どうしたら・・・
まだ慌てるような時間じゃない
先行事例を調べよう
[29]
ネットで見かけた参考にならない事例
DirectWrite 対応した MFC
コントロールはありませんか?
たとえば、CEditDW とか。
ない
[30]
なければ作る!!
実装例が見つかりません!!
仕方あるまい
自分で作ろう!
[31]
GDI + DirectWrite 相互運用
一般的に DirectWrite は Direct2D と組み合わせて使用され
ますが、IDWriteGdiInterop を介して従来の GDI と組み
合わせて使用することも可能です。
既存の資産(負債?)を生かしつつ、最新?テクノロジーを
利用できるわけです。
DirectWrite
Direct2D GDI
IDWriteGdiInterop
[32]
DirectWrite 対応ボタンコントロール
GDIで描画
GDI+で描画
DirectWrite
で描画
オーナードローで実装中…
[33]
オーナードローの流れ
背景を描画
ボタン画像を描画
文字列を描画
GDI/GDI+/DirectWrite
ダイアログに表示
全ての描画処理を自前で実装します!!
1) 背景画像描画
2) アクアボタン描画 (透過PNG)
3) 文字列描画
[34]
今日という日には間に合いませんでした…
まだ完成してません!!
漏れてはいけない何かが漏れてる…
[35]
まとめ
[36]
まとめ
Win32 + DirectWrite
は茨の道orz
素直に WPF かストアアプリ
で作りましょう♪
[37]
参考文献
[38]
• 週アスPLUS
Macに慣れたらWindowsのフォントが耐えられないので解決してみた|Mac
http://weekly.ascii.jp/elem/000/000/206/206833/
• ASCII.jp
Windowsの画面表示を変えるDirect2DとDirectWrite
http://ascii.jp/elem/000/000/491/491463/index-3.html
• PDC2008
Introducing Direct2D and DirectWrite
http://channel9.msdn.com/Blogs/pdc2008/PC18
参考文献
[39]
ご清聴ありがとうございました

今更始める Win32 + DirectWrite #pronamaclrhsapporocpp