.NET TIPS タイトルバーのないダイアログを作成するには?デジタルアドバンテージ 一色 政彦2005/07/22 |
![]() |
|
|
|
Windowsアプリケーションで現在実行中の処理の概要(例えば、「読み込んでいます……」)などを簡潔にユーザーに提示したい場合に、「タイトルバーのないダイアログ」を用いるケースがある。本稿では、そのようなダイアログの作成方法を紹介する。
具体的には、次のようなダイアログを作成する。
![]() |
||||||
| タイトルバーのないダイアログの表示例 | ||||||
| 実行中の処理概要(この例では「読み込んでいます……」)などを簡潔にユーザーに提示したい場合に、このような「タイトルバーのないダイアログ」を用いるケースがある。 | ||||||
|
このようなダイアログを作成するには、最初に、そのダイアログとなるWindowsフォームの外観を、(通常のウィンドウから)「タイトルバーのないウィンドウ」に変更する。
タイトルバーのないウィンドウを作成する
具体的には、フォームのFormBorderStyleプロパティを「None」(=System.Windows.Forms名前空間のFormBorderStyle列挙体の値)に設定する。次の画面は、この作業をVisual Studio .NET(以降、VS.NET)で行っている例である。
![]() |
||||||
| VS.NETによるタイトルバーのないウィンドウの作成手順 | ||||||
| Windowsフォームをタイトルバーのないウィンドウに変更する。 | ||||||
|
この作業により、フォームはタイトルバーのないウィンドウになった。
しかしこれだけでは、フォームの外側に境界線が存在しないため、ほかのウィンドウと重なったときにその境界が分かりにくいし、第一、このフォームはダイアログには見えない。通常、Windowsのユーザー・インターフェイスでダイアログといえば、ウィンドウの境界が3Dで盛り上がったような形状になっているが、このダイアログにはその3Dの境界線がないためだ。
そこで次に、このタイトルバーのないウィンドウに、3Dの境界線を持たせることにしよう。
タイトルバーのないウィンドウに3Dの境界線を持たせる
これを行うには、フォームのCreateParamsプロパティをオーバーライドし、そのプロパティの中で、基本クラスのCreateParamsオブジェクト(System.Windows.Forms名前空間)を取得して、そのオブジェクトのExStyleプロパティに「WS_EX_DLGMODALFRAME」(=C#では「0x00000001」、VB.NETでは「&H1」という数値と同等)を追加設定すればよい(再設定するのではなくて、設定を追加するだけなので、注意すること)。具体的には、次のようなコードになる。
|
||
| タイトルバーのないウィンドウに3Dの境界線を持たせるコード(上:C#、下:VB.NET) | ||
| フォームのCreateParamsプロパティをオーバーライドして、基本クラスのCreateParamsオブジェクトのExStyleプロパティに「WS_EX_DLGMODALFRAME」を追加設定する(= |演算子(C#)/Or演算子(VB.NET)により、既存のプロパティ値との「ビットごとの論理和」(=OR)を求めて、算出された値をプロパティに代入する)。このWS_EX_DLGMODALFRAMEの追加設定により、3Dの境界線が描かれるようになる。 |
このWS_EX_DLGMODALFRAMEの追加設定により、3Dの境界線が描かれるようになる。これでダイアログのユーザー・インターフェイスの実装については完了だ。
しかしこのままでは、[Alt]+[F4]キーというシステム・ショートカット・キーが押された場合、ダイアログが閉じられてしまう。タイトルバーのないダイアログでは、ユーザーにダイアログを閉じさせたくないケースの方が多いだろう(タイトルバーがないということは、通常のウィンドウの右上にある[×]ボタンもないので、基本的にユーザーが閉じるためのインターフェイスは存在しないことになるのだから)。
そこで最後に、このようにしてダイアログが閉じられるのを阻止するためのコードも実装しておくことにしよう。
システム・ショートカット・キーによりダイアログが閉じられるのを阻止する
これを実装する方法はいくつか考えられるが、ここではごくシンプルに、[Alt]+[F4]キーが押されたときに発行される、Windowsメッセージ(具体的には「WM_SYSCOMMAND」)をハンドルして、さらにその詳細なメッセージ(=システムコマンド・メッセージ)の内容が「ウィンドウを閉じる」というメッセージ(具体的には「SC_CLOSE」)の場合には、その動作をそこでストップするようにしよう(「WM_SYSCOMMAND」と「SC_CLOSE」の2つのメッセージの組み合わせが、[Alt]+[F4]キーが押されたときに発行される)。
実際にこれをコードで記述するには、フォームのWndProcメソッドをオーバーライドして、WndProcメソッドに送られてきたWindowsメッセージが「WM_SYSCOMMAND」で、かつそのシステムコマンド・メッセージの内容が「SC_CLOSE」の場合には何も行わないようすればよい(それ以外のメッセージについては、Windows標準の処理を行うために、基本クラスのWndProcメソッドを呼び出す)。具体的には次のようなコードになる。
|
||
| システム・ショートカット・キーによるダイアログの終了を阻止するコード(上:C#、下:VB.NET) | ||
| フォームのWndProcメソッドをオーバーライドして、Windowsメッセージが「WM_SYSCOMMAND」で、かつそのシステムコマンド・メッセージの内容が「SC_CLOSE」の場合に、基本クラスのWndProcメソッドの処理を呼び出さないようにする。 |
以上でダイアログの実装は完了だ。
ソース・ファイルのダウンロード
ダイアログ全体のソース・コードは次のリンクからダウンロードできる。
後はこのダイアログを(モードレスで)呼び出すためのコードを記述すればよいが、その詳細は(たいして難しくないので)割愛する。冒頭に示したサンプル・プログラムのソース・コードについては、次のリンクからダウンロードできる。
グラフィカルな2D形式のダイアログを実装する場合には
本稿では、通常のウィンドウと同じような境界線が3D表示のダイアログの実装例を示したが、次の画面のような、グラフィカルな(境界線が)2D表示のダイアログを使いたい場合もあるかもしれない。
![]() |
| グラフィカルな2D形式のダイアログの例 |
| Windows XPのコントロール・パネルにある[画面]のプロパティで、テーマを変更すると提示される(境界線が)2D表示のウィンドウ。 |
このようなユーザー・インターフェイスのダイアログを作成する方法については、「TIPS:Windowsアプリケーションでスプラッシュ・スクリーンを表示するには?」が参考になるため、詳しくはそちらを参照してほしい。![]()
| カテゴリ:Windowsフォーム 処理対象:ダイアログ 使用ライブラリ: FormBorderStyle列挙体(System.Windows.Forms名前空間) 使用ライブラリ:CreateParamsクラス(System.Windows.Forms名前空間) 関連TIPS:Windowsアプリケーションでスプラッシュ・スクリーンを表示するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





