net アプリを vista 化しよう 中 博俊

62
わわわわわわ わわわわわ #8 .NET わわわわ Vista わわわわ わ わわ

Upload: axel

Post on 05-Feb-2016

98 views

Category:

Documents


0 download

DESCRIPTION

.NET アプリを Vista 化しよう 中 博俊. こんなだいそれた タイトルで どうしましょう !?. Vista の目玉は何だ. Windows Vista の目玉は なんやろか?. Vista の目玉は何だ. .NET Framework 3.0 でしょうか?. Vista の目玉は何だ. 否. Vista の目玉は何だ. アプリケーション プラットフォーム としての着実な進化 こそ 目玉に相応しい!!. 今回取り上げる機能は ボタン IFileDialog System.IO.Log (CLFS) XPS. ボタン. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

.NET アプリを Vista 化しよう

中 博俊

Page 2: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

こんなだいそれたタイトルで

どうしましょう !?

Page 3: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Vista の目玉は何だ

Windows Vista の目玉はなんやろか?

Page 4: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Vista の目玉は何だ

.NET Framework 3.0でしょうか?

Page 5: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Vista の目玉は何だ

Page 6: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Vista の目玉は何だ

アプリケーションプラットフォーム

としての着実な進化こそ目玉に相応しい!!

Page 7: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

今回取り上げる機能は•ボタン• IFileDialog•System.IO.Log(CLFS)•XPS

Page 8: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

ボタン

Windows XP のボタンは

Windows Vista のボタンは

Page 9: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

DEMO1

Page 10: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

違いは明滅対応するためにはFlatStyle を System にそう .NET 1.1+XP と同じ

Page 11: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

WPF アプリの場合

WPF アプリのエントリポイントは App.Xaml の

<Application x:Class="WindowsApplication1.App"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

StartupUri="Window1.xaml" >

</Application>

Page 12: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

DEMO2

Page 13: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

WPF アプリの場合

WPF + Windows Forms 混在アプリを作る場合にはApp クラスのコンストラクタで、 EnableVisualStyles す

る。

public partial class App : System.Windows.Application

{

public App()

{

System.Windows.Forms.

⇒ Application.EnableVisualStyles();

}

}

Page 14: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Command Link Button

選択肢を表すには Command Link 形式のボタンを使いましょう。

Page 15: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Command Link Button

実現するにはボタンを継承したコントロールで、 CreateParams を上書きしちゃいます。

const int BS_COMMANDLINK = 0x0000000E;

protected override CreateParams CreateParams {

get {

if (System.Environment.OSVersion.Version.Major >= 6) {

CreateParams cParams = base.CreateParams;

cParams.Style |= BS_COMMANDLINK;

return cParams;

} else {

return base.CreateParams;

}

} }

Page 16: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Command Link Button

さらに Note 部という部分が増えています。

これにはメッセージです。const int BCM_SETNOTE = 0x1609;

SendMessage(new HandleRef(this, this.Handle), BCM_SETNOTE, IntPtr.Zero, value);

Get は面倒なので割愛

Page 17: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Shield アイコン

通常のボタンでも、 Command Link Button でも UAC に関係して、昇格が必要な処理のボタンにはシールドアイコンを設定しましょう。

SendMessage(new HandleRef(this, this.Handle), BCM_SETSHIELD, IntPtr.Zero, true);

Page 18: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

他には

const int BS_SPLITBUTTON = 0x0000000C;

LiveSerach で検索すると、このボタンのサンプルがないって本家 MSDNF にかかれているだけ。

謎機能です。

Page 19: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

そして

これらすべてを簡単に使える

WankumaButton

Demo3

Page 20: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

今回取り上げる機能は•ボタン• IFileDialog•System.IO.Log(CLFS)•XPS

Page 21: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

IFileDialog って?

いままで使ってきた OpenFileDialog

はもう古い

Page 22: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

古いの

Page 23: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

新しいの

Page 24: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

IFileDialog って?

.NET3.0 ではサポートされてません。(XP でも動くしね3.0 は )

Page 25: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

IFileDialog って?

COM で実装されていますが、 IDispatch はなく、 IUnknown だけです。

CreateObject(“Shell32.FileDialog”) は無理ってこと

Page 26: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

C++/CLI の出番じゃないか

Page 27: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

使うためには

• Windows SDK 6.1 をインストールhttp://www.microsoft.com/downloads/details.aspx?FamilyID=ff6467e6-5bba-4bf5-b562-9199be864d29&DisplayLang=en

• プロジェクトメニュー→プロパティ→構成プロパティ→ C/C++→ 全般→追加のインクルードディレクトリにSDK の Include フォルダを追加

• #define 設定– #define WINVER 0x0600– #define _WIN32_WINNT 0x0600

Page 28: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

ミニマムコード (ATL 版 )

::CoInitialize(NULL);

CComPtr<IFileOpenDialog> ifd;

ifd.CoCreateInstance(__uuidof(FileOpenDialog));

ifd->Show(NULL);

::CoUninitialize();

# もちろん開くだけ

Page 29: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

DEMO4(ifd2)

Page 30: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

今回取り上げる機能は•ボタン• IFileDialog•System.IO.Log(CLFS)•XPS

Page 31: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

ログを取る場合の問題点

• http://blogs.wankuma.com/naka/archive/2007/03/15/66950.aspx• http://blogs.wankuma.com/naka/archive/2007/03/16/67146.aspx• http://blogs.wankuma.com/naka/archive/2007/03/19/67563.aspx• http://blogs.wankuma.com/naka/archive/2007/03/27/69201.aspx• http://blogs.wankuma.com/naka/archive/2007/03/28/69340.aspx

こっそりあおり連載でした。

• 時系列に取れない (Mix される )• 遅い• 大きい• 排他待ち• バラバラ

Page 32: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

CLFS をあなたは知っているか?

• Common Log File System という• Windows Server 2003 R2 から採用• Windows SDK にいつまでも情報が載らず• やっと使える SDK が出たと思うと。• .NET 3.0 でこっそりと System.IO.Log と

して実装されていた。• 確かに当初から WinFX として提供予定

だったけど。

Page 33: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

CLFS とは

•高速である•柔軟である•排他処理しなくてよい

Page 34: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

利用するには

System.IO.Log.Dll を参照設定するだけ。

Page 35: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

DEMO5(clfs3)

Page 36: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

CLFS の使い方 1

開くusing (LogRecordSequence sequence

= new LogRecordSequence(

LOG_PATH,

System.IO.FileMode.OpenOrCreate,

System.IO.FileAccess.ReadWrite,

FileShare.ReadWrite))

ポイントFileShare.ReadWrite で開く !! でないと排他がかかっちゃ

うよ

Page 37: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

CLFS の使い方 2

初回だけポリシー設定をif (sequence.LogStore.Extents.Count == 0) {

sequence.LogStore.Policy.AutoGrow = true;

sequence.LogStore.Policy.GrowthRate = new PolicyUnit(1, PolicyUnitType.Extents);

sequence.LogStore.Policy.Commit();

sequence.LogStore.Policy.Refresh();

ポイントCommit と Refresh を実行する。ほかにもファイルプレフィックス、サフィックスなどを

設定する。組み合わせで動かない場合もあるので、テストしましょ

う。

Page 38: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

CLFS の使い方 3

初回エクステントの設定sequence.LogStore.Extents.Add(EXTENT_NAME +

sequence.LogStore.Extents.Count, EXTENT_SIZE);

ポイント初回だけしかしない。以後はポリシーの AutoGrow にまかせる。最小サイズは 512KB

でもそれなりのサイズにしましょう

Page 39: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

CLFS の使い方 4

ログ出力sequence.Append(

segment,

SequenceNumber.Invalid,

SequenceNumber.Invalid,

RecordAppendOptions.None);

ポイントRecordAppendOptions は None にすること。でないとパフォーマンスはでない

Page 40: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Vista 以外の場合どうする?

LogRecordSequence

をFileRecordSequence

にかえる。複数書き込みできないポリシーベースの自動拡張できない普通のファイルベース出力をしてくれ

る。

Page 41: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

今回取り上げる機能は•ボタン• IFileDialog•System.IO.Log(CLFS)•XPS

Page 42: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS ?

XML Paper Specification

•PDF キラー•Xaml のサブセットであり、内部は .docx と似た感じ

Page 43: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS はどうやったら使えるの?

• 作る方–Windows Vista–2007 Office Systems+ 保存アドイン– .NET Framework 3.0

• 見る方– Windows Vista– Windows XP or Windows Server 2003

&XPS Essentials Pack + MSXML6.0

Page 44: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS って従来の印刷とどう違うの? (Windows SDK より )

Page 45: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS って従来の印刷とどう違うの?

従来のWindows + GDI の印刷

( 含Windows Forms)

Page 46: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS って従来の印刷とどう違うの?

Microsoft Document Writer

の担当している部分

Page 47: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS って従来の印刷とどう違うの?

今後出る予定のXPS Native Printer

(Post Script Printer のように、 XPS の場合にはネイティブ対応です

よとなる。 )

Page 48: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS って従来の印刷とどう違うの?

今日の範囲

Page 49: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

まずは出してみましょう

DEMO6

Page 50: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS ってどうなっているの?

– ZIP 圧縮されたXML の集合体

–各ページ情報は/Documents/1/Pages/1.fpage に格納

– リソースはフォントと、イメージ

– /Documents/1/Resourcesや、 /Resourcesに格納

Page 51: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

ページ情報はどうなっているの? (抜粋 )

• <FixedPage Width="793.76" Height="1122.56" xmlns="http://schemas.microsoft.com/xps/2005/06" xml:lang="und">

• <Path Data="F1 M 75.52,75.52 L 165.28,75.52 165.28,86.08 75.52,86.08 z" Fill="#ffffffff" />

• <Glyphs Fill="#ff000000" FontUri="/Documents/1/Resources/Fonts/1ED08800-1D11-4DEE-9484-91F85C6F520A.odttf" FontRenderingEmSize="10.5604" StyleSimulations="None" OriginX="75.52" OriginY="84.64" Indices="2102;2104;2106;2108;2110;59;51;54;11764;11754" UnicodeString=" あいうえお XPS薔薇 " />

• </FixedPage>

ページ情報

ブラシ

文字

フォント指定

サイズ、位置

文字列

Page 52: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

それでは XPS を作ってみましょう。

関連する名前空間は

System.Windows

.Xps

.Xps.Packaging

.Xps.Serialization

System.Printing

Page 53: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

それでは XPS を作ってみましょう。

XPS を作ってみましょう。

WPF 関係の参照設定がされている前提

System.Printing.dll

ReachFramework.dll

の 2 つがコアになるコンポーネント

Page 54: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

作ってみましょう

DEMO7(xps1)

Page 55: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

XPS を作るポイント

• 日本語を扱うならフォントサブセットは必須!!

• 縦書きは頼るな。 ( 使えない )• 仕様書をよく読む。

–結局出力するのは XML

Page 56: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

Page 57: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

参考文献

★CommandLink と SETNOTE とシールドアイコンknom's developer corner(en)

http://blogs.msdn.com/knom/archive/2007/03/12/command_5F00_link.aspx

WindowsSDK の位置Win32 and COM Development→User Interface →Windows Controls

→Individual Control Information →Button Controls

Page 58: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

参考文献

★IFileDialog についてWindows Vista for Developers – Part 6 – The New File Dialogs(en)

http://weblogs.asp.net/kennykerr/archive/2006/11/10/Windows-Vista-for-Developers-_1320_-Part-6-_1320_-The-New-File-Dialogs.aspx

Kkamegawa さんの codeseek での発表資料 (ja)

http://mist.clueup.org/files/default.aspx

WindowsSDK の位置Win32 and COM Development→User Interface →Windows

Shell→Shell Reference→Shell Interfaces →IFileDialog

Page 59: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

参考文献

★System.IO.Log(CLFS) についてFast and Flexible Logging with Vista's Common Log File

System(en)

http://www.devx.com/VistaSpecialReport/Article/33848/0/page/1

Windows Server 2003 R2 の新機能http://technet2.microsoft.com/WindowsServer/ja/Library/f9d70026-ae8b-4969-8755-1ea1edc4e38e1041.mspx?mfr=true

Windows SDK の位置Win32 and COM Development →System Services→File

Systems→Common Log File System

.NET Framework Development→.NET Framework Technologies→Core Development Technologies→Logging Support in System.IO.Log

Page 60: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

参考文献

★XPS について 1

Printing Overview

ms-help://MS.MSSDK.1033/MS.NETFX30SDK.1033/wpf_conceptual/html/0de8ac41-9aa6-413d-a121-7aa6f41539b1.htm

2007 Microsoft Office プログラム用 Microsoft PDF/XPS 保存アドイン

http://www.microsoft.com/downloads/details.aspx?FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041&DisplayLang=ja

Microsoft XML Paper Specification Essentials Pack Version 1.0

http://www.microsoft.com/downloads/details.aspx?FamilyId=B8DCFFDD-E3A5-44CC-8021-7649FD37FFEE&displaylang=en

Microsoft Core XML Services (MSXML) 6.0

http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=993c0bcf-3bcf-4009-be21-27e85e1857b1

Page 61: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

参考文献

★XPS について 2

Windows HardwareDeveloper Central

http://www.microsoft.com/whdc/xps/default.mspx

XPS for Application Developers

http://www.microsoft.com/whdc/xps/xpsappdevs.mspx

XML Paper Specification (Spec)

http://www.microsoft.com/whdc/xps/xpsspec.mspx

XPS Team Blog

http://blogs.msdn.com/xps/

Feng Yuan (袁峰)

http://blogs.msdn.com/fyuan/

Page 62: NET アプリを Vista 化しよう 中 博俊

わんくま同盟 大阪勉強会 #8

参考文献

★XPS について 3

Optimize XPS markup( パフォーマンスの注意点 )

http://blogs.msdn.com/fyuan/archive/2006/01/18/514450.aspx

Query regarding CreateFontPackage API used for Font Subsetting

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=222335&SiteID=1

Insertion of an adendum to the intro to font embedding

http://blogs.msdn.com/michkap/archive/2006/08/02/686538.aspx

Creating an XPS Document Sample

ms-help://MS.MSSDK.1033/MS.NETFX30SDK.1033/wpf_samples/html/a7736471-4322-40ea-8580-34c8eb0dbb3e.htm