今更始める win32 + directwrite #pronamaclrhsapporocpp
DESCRIPTION
2014/7/12 プログラミング生放送+CLR/H+Sapporo.cpp 勉強会@札幌 ユビキタス協創広場 U-cala における発表資料です。TRANSCRIPT
[1]
hiyohiyoTwitter: @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のフォントが耐えられないので解決してみた|Machttp://weekly.ascii.jp/elem/000/000/206/206833/
やっぱりMacだよね Windowsのフォントは○ソ
高品質なフォントレンダリングエンジンさえあれば・・・
[13]
PDC2008
出典:Windows 7: Introducing Direct2D and DirectWritehttp://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とDirectWritehttp://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]
• 週アス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
参考文献
[39]
ご清聴ありがとうございました