SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

カスタマイズ可能なアラートウィンドウ

さまざまなアラートウィンドウを作成するためのミニフレームワーク

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード demo (218.6 KB)
ダウンロード NotificationDemo (57.8 KB)
ダウンロード src (24.4 KB)

フレームワークの使い方

 下図に、電子メールのアラートウィンドウ作成に使用したコントロールを示します。

 次の作業を実行してください。

  • ダイアログテンプレート(境界なし)を作成し、必要に応じてラベルまたはハイパーリンクを表示するためのスタティックコントロールや、ボタン、画像コントロールを追加します。
  • ダイアログテンプレートからクラス(CDialogから派生したもの)を追加します。
  • クラスヘッダーに「AlertDialog.h」をインクルードし、基本クラスをCDialogからCAlertDialogに変更します。
  • アラートダイアログに使用するカスタマイズ済みの各コントロール(アラートコントロール)に対して、DDX機能を使用して変数を追加します。例えば、タイトルを表示するラベルに対して、以下を実行します。
    • ダイアログクラスのヘッダーに「AlertLabel.h」をインクルードします。
    • CAlertLabel型の変数をクラスに追加します。
    • CAlertLabel m_ctrlTitle;
      
    • 次のように、DoDataExchangeで変数をコントロールに関連付けます。
    • void CDemoAlert::DoDataExchange(CDataExchange* pDX)
      {
         CAlertDialog::DoDataExchange(pDX);
      
         DDX_Control(pDX, IDC_STATIC_TITLE, m_ctrlTitle);
      }
      
  • アラートウィンドウの背景を変更する場合は、OnInvalidateをオーバーライドして、すべてのラベル、ハイパーリンク、画像コントロールおよびボタンについてInvalidateCachedBitmap()を呼び出す必要があります。
  • void CDemoAlert::OnInvalidate()
    {
       m_ctrlTitle.InvalidateCachedBitmap();
    }
    
  • ハイパーリンクまたはボタンがクリックされたときに通知が必要な場合は、「AlertMessages.h」内に定義されている適切なメッセージを処理します。
    • クラスにメッセージハンドラを追加します。
    •    afx_msg LRESULT OnHyperlinkedClicked(WPARAM wParam,
                                              LPARAM lParam);
         afx_msg LRESULT OnButtonClicked(WPARAM wParam,
                                         LPARAM lParam);
      
    • 適切なハンドラをメッセージマップに追加します。
    • BEGIN_MESSAGE_MAP(CDemoAlert, CAlertDialog)
         ON_MESSAGE(WMA_HYPERLINKCLICKED,
                    &CDemoAlert::OnHyperlinkedClicked)
         ON_MESSAGE(WMA_BUTTONCLICKED,
                    &CDemoAlert::OnButtonClicked)
      END_MESSAGE_MAP()
      
    • ハンドラを実装します。通常は、親ウィンドウにメッセージを送信して、特定のボタンまたはコントロールがクリックされたことを通知します。以下のコードでは、アラートウィンドウのみを非表示にします。
    • LRESULT CDemoAlert::OnHyperlinkedClicked(WPARAM wParam,
                                               LPARAM lParam)
      {
         Hide();
      
         return 0;
      }
      
      LRESULT CDemoAlert::OnButtonClicked(WPARAM wParam,
                                          LPARAM lParam)
      {
         Hide();
      
         return 0;
      }
      
  • デフォルトでは、CAlertDialogWM_LBUTTONDOWNWM_LBUTTONUPを処理すると、マウスを使ってウィンドウを移動できます。この動作が不要な場合(例えばユーザーがウィンドウをクリックしたら、ウィンドウを閉じるような場合)は、派生したダイアログクラスでこれらのメッセージを処理し、適切なアクションを実行してください。例については、デモアプリケーションのCWinampAlertをご覧ください。

 これらのクラスの使用例については、デモアプリケーションを参照ください。

デモアプリケーション

 本稿では、3種類のアラートウィンドウを生成するデモアプリケーションを作成します。それぞれ、電子メール通知、FirefoxライクなアラートおよびWinampライクなアラートです(スクリーンショットは、本稿の最初にあります)。

 このデモアプリケーションでは、以下の設定をカスタマイズできます。

  • アニメーション時間(表示するときと通常閉じるとき)。ミリ秒単位で指定します。
  • 表示時間(表示アニメーションが終了してから閉じるアニメーションが始まるまでの間隔)。ミリ秒単位で指定します。
  • 表示アニメーションが終了した後の最大不透明度。0~100のパーセント単位で指定します。100を指定すると、ウィンドウが完全に不透明になります。
  • マウスがウィンドウ上にあるときに(不透明でなければ)ウィンドウを完全に不透明にして、マウスがウィンドウから離れるまで表示し続けるかどうか。この場合、マウスがウィンドウから離れると、表示タイマが再開されます。

注意事項

 本稿で紹介したコードは、著作権表示を明記する場合に限り、(営利、非営利に関わらず)どのような種類のアプリケーションでも利用、改変または拡張することができます。新たにコントロールや機能を作成して第三者に公開する場合は、既存のコードと統合するときにお気軽にご連絡ください。

謝辞

 一部のコードについては、以下の記事と投稿より、コードを引用または参考とさせていただきました。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Marius Bancila(Marius Bancila)

VC++の分野でMicrosoft MVPを受賞。ノルウェー企業でソフトウェア開発者として勤務。主にMFCとVC#を使ったデスクトップアプリケーションの構築に従事。ブログ(www.mariusbancila.ro/blog)の内容はWindowsプログラミングが中心。2007年7月に、ルーマニア人の...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3302 2008/12/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング