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 というクラスを継承することで

 

f:id:hatarabo:20200607020105p:plain

 

こんな画面が

 

f:id:hatarabo:20200607020318p:plain

 

こんな画面になります。

私のセンスはともかく、見た目が変わっていることはお分かりいただけるかと思います。

処理的にはおおまかに

  ①WndProc()で非クライアント領域を 0 に

  ②WM_NCHITTEST で 非クライアント領域への操作に応答(※1)

  ③非クライアント領域の機能を実装(※2)

という方法で機能を実現しています。

ご参考まで。

 

(※1)

非クライアント領域への操作に対する応答の網羅率は 100% ではありません。タイトルを左クリックでコンテキストメニューが出ない等、未対応な箇所があります。

 

(※2)

たとえば、画面タイトルのFontは本来アプリケーション管理ではなくシステム設定(テーマとか)の担当なのですが、今回は自作なので機能として補う必要がありました。