Formの見た目をカスタマイズする
2017年頃、Microsoft様の以下サイトに
「ソフトウェアのブランド化にはオリジナルデザインがイイヨ」
という内容が(たしか)載っておりまして、仕事中「どうです、フルドロー導入しませんか」と提案ネタにしておりました。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511284.aspx
今、上記URLを叩くと別ページに飛びます。
これは個人的にですが、おそらく、情報が"古く"なったからなのだと思います。
私が C# + WinForms に出会ったのは10年前で「これできればご飯食べていけるだろ」と思い取り組んだものが、技術発展の中で表舞台から少しずつ姿を消していくという現実に「他の食い扶持探さねば」と思い改める日々です。
ともあれ、利用者の目を惹くには画面デザインへの配慮は不可欠です。というわけで、WinFormsにおけるFormのカスタマイズを行うサンプルをGitHubにアップしました。
https://github.com/hatarabo/owner-draw-form
任意の Form に FormBase というクラスを継承することで
こんな画面が
こんな画面になります。
私のセンスはともかく、見た目が変わっていることはお分かりいただけるかと思います。
処理的にはおおまかに
①WndProc()で非クライアント領域を 0 に
②WM_NCHITTEST で 非クライアント領域への操作に応答(※1)
③非クライアント領域の機能を実装(※2)
という方法で機能を実現しています。
ご参考まで。
(※1)
非クライアント領域への操作に対する応答の網羅率は 100% ではありません。タイトルを左クリックでコンテキストメニューが出ない等、未対応な箇所があります。
(※2)
たとえば、画面タイトルのFontは本来アプリケーション管理ではなくシステム設定(テーマとか)の担当なのですが、今回は自作なので機能として補う必要がありました。