引き続きWPFの小ネタです。
WPFウィンドウのアイコンは、System.Windows.Media.ImageSource型です。
プロジェクトのリソースにアイコンを指定すると(プロジェクト右クリック→プロパティ→リソースから追加)、System.Drawing.Icon型になります。
これらは直接変換できないようですが、以下のようにStreamを介せば変換できます。ただ、もっとスマートな方法が欲しいですね・・・
そもそも、WPFではアイコンをこのように指定することが希なのかも知れません。
System.IO.MemoryStream s = new System.IO.MemoryStream();
(Properties.Resources.myicon as System.Drawing.Icon).Save(s);
window.Icon = System.Windows.Media.Imaging.BitmapFrame.Create(s);
WPFはWindowsFormsに比べ、デザインを柔軟に設定できて良いですね。
また、デザインとロジックの分離がとてもやりやすいです。Visual Studio 2008のエディタがこなれていないのと、Bindingマークアップ拡張が分かりにくいのが普及を妨げている感がありますが(?)、おすすめです。
さて、大した内容では無いのですが、WPFで任意のタイミングでシステムメニューを表示させる方法をご紹介します。
WPFでと言いながらWinAPIのお話で、かなり有名な内容ですが、まあ一応。

システムメニュー
[DllImport("user32.dll")]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private void Button_Click(object sender, MouseButtonEventArgs e)
{
//マウス座標を取得し、lParamに加工
int x = System.Windows.Forms.Control.MousePosition.X;
int y = System.Windows.Forms.Control.MousePosition.Y;
IntPtr lParam = new IntPtr(x | y << 16);
//Windowハンドルを取得し、0x313メッセージを送信
IntPtr hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
PostMessage(hwnd, 0x313, IntPtr.Zero, lParam);
}
要するに0×313を送るだけです。これはWinUser.hにも書かれていない隠し定数ですが、いろんなところで紹介されて逆に有名な値です。0×313。
数ヶ月前、「年100冊以上のペースで本を読む」という目標を立てました。
以前は雑誌や技術書など自分の直接興味のある分野しか読んでいなかったのですが、少しずつでも視野を広げ自分を成長させていくには、やはり読書が効果的です。
きっかけは、社長におすすめされた、名著「7つの習慣」を読んだことです。

7つの習慣―成功には原則があった!
著者/訳者:スティーブン・R. コヴィー ジェームス スキナー
出版社:キングベアー出版( 1996-12 )
定価:¥ 2,039
Amazon価格:¥ 2,039
単行本 ( 492 ページ )
ISBN-10 : 4906638015
ISBN-13 : 9784906638017
正直、世界観が変わるほどのインパクトを受けました。
今までのつまらない考え方が恥ずかしくなり、同時に自分を磨いていくモチベーションが生まれました。
まだまだこの偉大な本を100%活用は出来ていませんが、少なくとも出来るところから、と読書を進めています。
今後人生の壁にぶつかることがあったら、「7つの習慣」を思い出して乗り越えていこうと思います。
読書の成果を吸収するために、読んだ本はブログで発信していきます!