![]() ![]() ![]() ![]() カスタマイズ可能なアラートウィンドウこの記事のURLhttp://japan.internet.com/developer/20081219/26.html
著者:Marius Bancila
海外internet.com発の記事
はじめに最近あるプロジェクトで、Outlookで新しい電子メールを受信したときに表示されるような通知を、ユーザーに表示する必要が出てきました。ところが、Visual Studio 2003やVisual Studio 2005では、ちょうど良い方法が見つかりませんでした。もちろん、Visual Studio 2008を使用している場合は、(Visual Studio 2008 SP1に統合された)Feature Packリリースで、このための一連のクラスが提供されているので、MFCから無償で入手できます。ただし、Visual Studio 2008を使用しないときは、著者の場合と同じようにつまずく可能性があります。そこで、この問題に関して対応策を練ることにしました。その結果でき上がったのが、さまざまなスタイルの通知ウィンドウを作成できる一連のクラスです。今回のミニフレームワークで作成した、カスタマイズ済みアラートウィンドウの例を以下に示します。 シンプルなメール通知
![]() Office 2003ライクなメール通知
![]() Firefox 3のダウンロード完了通知
![]() Winampの新規トラック通知
![]() フレームワークの解説今回のミニフレームワークを構成するクラスは、次の3つのカテゴリに分類されます。アラートダイアログ表示されるすべてのアラートダイアログの基本クラスです。スタイルを使用して外観をカスタマイズできます。![]() ※注
上記のクラス図で、CMailAlert、CFirefoxAlertおよびCWinampAlertの各クラスはフレームワークの一部ではなく、本稿で作成するデモアプリケーションに含まれるアラートダイアログの例です。
アラートスタイルアラートダイアログの背景と非クライアント領域の描画を処理するクラスの階層です。![]() アラートコントロールアラートダイアログで使用する各種カスタムコントロール(ラベル、ハイパーリンク、画像コントロール、ボタン)です。![]() CAlertDialogCDialogから派生したクラスで、表示されるすべてのアラートウィンドウの基本クラスです。次のような機能があります。
OnNcPaint()はスタイルオブジェクトのHandleNcPaint()を呼び出し、OnEraseBkgnd()はHandleEraseBkgnd()を呼び出します。これらのメソッドのいずれかがFALSEを返すと、イベントの処理は基本クラス(CDialog)に委任されます。CAlertStyleすべてのアラートスタイルの基本クラスで、アラートウィンドウのカスタマイズに使用します。以下の仮想メソッドがあります。
CAlertStyleDefault基本のスタイル実装です。背景の消去を処理せず、アラートウィンドウの周りにシンプルな境界線を描画します。CAlertStyleOffice2003Office 2003ライクなアラートスタイルです。青いグラデーションのかかった背景と、境界線の黒い四角形のウィンドウを表示します。ウィンドウの最上部に濃い青の小さなバーがあります。CAlertStyleFirefoxFirefoxのダウンロード通知ウィンドウに似た外観のウィンドウを生成します。周囲は青い四角形で、背景にはシステムカラーCOLOR_BTNFACEを使用します。CAlertStyleWinampWinampの新規トラック通知ウィンドウに似た外観のウィンドウを生成します。縁は黒くて丸みがあり、背景にはグレースケールのグラデーションがかかっています。CAlertLabel背景が透明なスタティックコントロールです。テキストにはカスタムカラーを設定できます。デフォルトでは、この色には黒が設定されます。背景の描画にはキャッシュ済みのビットマップを使用します。コントロールの背景を変更した場合は、InvalidateCachedBitmapを呼び出してキャッシュを無効にする必要があります。CAlertHyperlinkアラートハイパーリンクはCAlertLabelから派生します。次の追加機能を提供します。
CAlertPictureCtrlアラート画像コントロール(CAlertLabelから派生)は、透明化できる画像を表示します。以下のような機能があります。
CAlertButtonアラートボタンは、以下のような機能を持つボタンです。
CAlertButtonCloseクローズアラートボタンは、ウィンドウを閉じるX印を表示するアラートボタンです(このボタン用のアイコンリソースやビットマップリソースは不要です)。フレームワークの使い方下図に、電子メールのアラートウィンドウ作成に使用したコントロールを示します。![]()
void CDemoAlert::OnInvalidate()
{
m_ctrlTitle.InvalidateCachedBitmap();
}
デモアプリケーション本稿では、3種類のアラートウィンドウを生成するデモアプリケーションを作成します。それぞれ、電子メール通知、FirefoxライクなアラートおよびWinampライクなアラートです(スクリーンショットは、本稿の最初にあります)。![]()
注意事項本稿で紹介したコードは、著作権表示を明記する場合に限り、(営利、非営利に関わらず)どのような種類のアプリケーションでも利用、改変または拡張することができます。新たにコントロールや機能を作成して第三者に公開する場合は、既存のコードと統合するときにお気軽にご連絡ください。謝辞一部のコードについては、以下の記事と投稿より、コードを引用または参考とさせていただきました。著者紹介Marius Bancila(Marius Bancila)
VC++の分野でMicrosoft MVPを受賞。ノルウェー企業でソフトウェア開発者として勤務。主にMFCとVC#を使ったデスクトップアプリケーションの構築に従事。ブログ(www.mariusbancila.ro/blog)の内容はWindowsプログラミングが中心。2007年7月に、ルーマニア人のMVP受賞者2人と一緒に、ルーマニアのC++/VC++プログラマのコミュニティであるodexpert.roを設立した。
japan.internet.comのウエブサイトの内容は全て、国際法、日本国内法の定める著作権法並びに商標法の規定によって保護されており、その知的財産権、著作権、商標の所有者はインターネットコム株式会社、インターネットコム株式会社の関連会社または第三者にあたる権利者となっています。
本サイトの全てのコンテンツ、テキスト、グラフィック、写真、表、グラフ、音声、動画などに関して、その一部または全部を、japan.internet.comの許諾なしに、変更、複製、再出版、アップロード、掲示、転送、配布、さらには、社内LAN、メーリングリストなどにおいて共有することはできません。 ただし、コンテンツの著作権又は所有権情報を変更あるいは削除せず、利用者自身の個人的かつ非商業的な利用目的に限ってのみ、本サイトのコンテンツをプリント、ダウンロードすることは認められています。 |