MFC   VC++   Visual Studio   Visual Studio   プログラミング

ステータスバーにコントロールの説明を表示

 ダイアログなどにステータスバーを設置し、コントロールの説明をツールチップ表示と同時にステータスバーにも表示させる方法です。

 まず、「CToolTipCtrl」から派生させたツールチップコントロール(ここでは「CMyToolTipCtrl」)を作成し、通常通り各コントロールに対応する文字列を「AddTool」で作成する。

 次に、派生させたクラスで「TTN_SHOW」と「TTN_POP」のメッセージを処理するようにする。
 ここで、「TTN_SHOW」はツールチップを表示するとき、「TTN_POP」はツールチップが非表示になるときに呼ばれるメッセージです。

 ツールチップが表示されるとき、ステータスバーにも説明などの文字列を表示させるには、あらかじめリソースのString Tableで、該当コントロールIDに文字列を設定しておく。
void CMyToolTipCtrl::OnTtnTooltipShow(NMHDR *pNMHDR, LRESULT *pResult)
{
    UINT nID = ::GetDlgCtrlID((HWND)pNMHDR->idFrom);    // ウインドウハンドルからコントロールIDを取得

    CXXXDlg* pDlg = (CXXXDlg*)GetParent();    // 親ダイアログへのポインタを取得

    CString str;
    if(str.LoadString(nID))        // コントロールIDに対応する文字列をリソースから読み取る
        pDlg->m_wndStatus.SetPaneText(0, str);
       // ステータスバーの表示したい位置にテキストをセットする

     *pResult = 0;
}
 以上のようにすると、ツールチップが表示されるとと同時にステータスバーにも説明が表示されるようになります。

 しかし、このままではツールチップが消えても、元の説明が残ったままになるので、ツールチップが消えるタイミングでこの文字列を変更・削除するために、
void CMyToolTipCtrl::OnTtnTooltipPop(NMHDR *pNMHDR, LRESULT *pResult)
{
    CXXXDlg* pDlg = (CXXXDlg*)GetParent();
    pDlg->m_wndStatus.SetPaneText(0, _T("レディ"));        // ここでは「レディ」に戻します。

    *pResult = 0;
}
 とします。

 以上のような感じになるのですが、わかりやすくするため、ここではステータスバーに直接文字列をセットしていますが、ステータスバーをpublic以外にして、文字列セット用の関数を用意した方がよいでしょう。

 ちなみに、最初に「AddTool」するとき、文字列を空文字にすると「TTN_SHOW」は呼ばれません。

 別の方法を次に掲載します。
ランキングへ     posted by 遠雷 | Comment(0) | MFC
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。