UpdateLayeredWindowを使って縁取りも鮮やかに(祥鳳撃沈編)

艦これ秘書官 ver.0.1 – Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/5077

の縁取りは、フォームに TransparencyKey を設定する方法で縁取りがあまりきれいではありません。これは、元画像にアルファチャンネル(透明度)が設定しているためでそこのところにフォームの色が重なっているので…ってな感じです。this.TransparencyKey = this.BackColor と設定すればお手軽に透過ができるのですが、今となってはいまいち綺麗ではないかなと。Region を使っても似たことができるのですが、不定形の場合大変なのと Region 自体の数が多いとスタックオーバーフローで落ちる、という欠陥があります。このあたりの話はまた別の記事にでも。

■レイヤーウィンドウを使って縁取りをきれいにする

UpdateLayeredWindow 関数
http://msdn.microsoft.com/ja-jp/library/cc364847.aspx

のあたりを読んでも、さっぱりわからないので先達のサンプルを探します。

半通過ウィンドウの作り方講座
http://www.inasoft.org/wpt/ulw.html
[VB, C#] レイヤード ウィンドウを使用する
http://youryella.wankuma.com/Library/Extensions/Form/LayeredWindow.aspx

のソースを丸ごと持ってきてコピーして使っています。便利なレイヤーウィンドウのライブラリを作るのは大変なのですが、ひとまず、

  • 秘書艦の縁取りができればOK
  • 定期的に書き換える遠征と入渠の残り時間が表示できればOK

ということにしておきます。こんな感じに、榛名の切り取りと遠征/入渠の残り時間がうまく切り取れています。ソースを見るとわかるのですが、文字のところを含めて1秒間に1回 bitmap を書き換えるという荒業をしているので、パフォーマンス的にどうかなというわけなのですが…「ええ、榛名なら大丈夫でしょう」…というか、1コマ/秒ならば動画よりも少ないので大丈夫でしょう。

image

■Windows 8 のトーストを付ける

ついでに Windows 8 の場合はトースト≒通知機能を付けてみました。トースト自体は Windows 8 の機能ですが、それを利用するには WinRT API を使わないと駄目、というジレンマがあります。が、Outlook 2013 でも実装されているので普通に許容範囲ですね。

デスクトップアプリからWinRT APIを使用する – 酢ろぐ!
http://ch3cooh.hatenablog.jp/entry/20121204/1354596483
Windows Sending toast notifications from desktop apps sample in C#, C++ for Visual Studio 2012
http://code.msdn.microsoft.com/windowsdesktop/Sending-toast-notifications-71e230a2
Windows® API Code Pack for Microsoft® .NET Framework – Home
http://archive.msdn.microsoft.com/WindowsAPICodePack

から Toast の処理を丸ごと持ってきています。ややこしい AppUserModelId の設定もサンプルの中に入っているので、それも持ってきてあります。まあ、デスクトップアプリからスタート画面にピン止めをするので、スタート画面のアイコンが変なのですが(KcHisyo8のアイコン)…まあ、これは後で直しましょう。Windows 7 以前は、トーストの機能はないので、別プロジェクトにしてあります。

image

■サンプルコード

KcHisyo-v0.2-src.zip 艦これ秘書官 ver.0.2
http://sdrv.ms/1aaZDXK

からソースがダウンロードできます。バイナリのほうは、バージョン番号と終了方法を付けたら再びアップということで。いまのところ、終了方法はタスクバーから「閉じる」を選択しないとだめなので…ちょっとアレですね。

■祥鳳撃沈

そんな訳で、長らく愛用しておりました祥鳳さんが沖ノ島海域で撃沈です orz あまりレベル上げに専念していないので、ちと敷波さんといい気を付けないと。しかもクリアできていないし。

imageimage

プロジェクトでも、ひとり弱いと割りを喰うわけで、他が戦艦だとちょっと装甲の弱い祥鳳では無理ですね。TOC のレバレッジの考え方とか、構造力学の応力集中の考え方とか(切込みを丸くして応力を分散する方法とか)そういう物理原則が入ってくる(あるいはそんな感じがする)のが、面白いところです。このあたり、1チーム6艦船しかないという制限のなかで、どのような配艦をすれば良いのか?とか考えたりすると更に楽しめるかも。まあ、ゲームとしてはある程度レベル上げをしないとうまくいかないのですが「新人をどのように育てるのか?」っていう感じで。

# ううう、祥鳳は、数隻持っていたけど先日、まとめてた(祥鳳自身に近代改装した)ので1隻しかないのが仇に。というか、そういうシビアさ≒縛りもまた宜しということで。

カテゴリー: C#, WinRT, 艦これ パーマリンク