Compact Frameworkで非矩形ウインドウ

[id:mkomiya:20070107]からトラックバックを貰っていたので、Compact Frameworkで非矩形ウインドウを使う話です(・∀・)


Compact Frameworkは2.0になっても色々と制限が多いわけですが(´・ω・`)
Control.RegionもForm.TransparencyKeyもサポートしていないので、非矩形ウインドウを作りたかったらAPIを使うことになっちゃいます。
単純にAPI呼び出すだけで済むケースは良いんですが、ビットマップとか構造体を扱うことになると、BinaryReaderでガリガリなんていうことも必要になって(´Д`)


…っということをやっている例がここにあります(・∀・)
http://www.opennetcf.org/PermaLink.aspx?guid=f0abe92f-6e94-4a19-b0e3-11d1bdb3c9f0
ShapedWindow.zip中のShape.csがそれですね。
この記事はCompact Framework 1.0用ですが、もちろん2.0でも動きます。


OpenNETCF.orgのSDF*1を使っているので別途ダウンロードが必要ですが、とりあえず動作確認するだけなら、ちょっとソースを修正すればSDF無しでも動きますね。
SDFの機能で使っているのはApplicationExクラスとWin32Window.GetCapture()だけなので、OpenNETCF.Windows.Forms.ApplicationExはSystem.Windows.Forms.Applicationクラスに変更、Win32Window.GetCapture()の所は直接DllImportするようにすれば大丈夫です(・∀・)


っというか、ウインドウハンドルの取得についてはCF 2.0ならControl.Handleがサポートされているので、それを使えば済みますね(´ω`)

*1:Smart Device Framework