« サイン色紙? | メイン | オーディオプレイヤ開発記 その15 »

2006/02/16(木)

●オーディオプレイヤ開発記 その14


 今回は、ツールバー上に一定時間カーソルがあわせられたときに、ツールチップを出すようにします。ツールチップが必要になった場合、ウィンドウプロシージャには WM_NOTIFY というメッセージが飛んできます。またこのとき、lParam によって指定された、コモンコントロールからの通知メッセージを表す NMHDR 構造体の code 変数には、TTN_NEEDTEXT が入っています。そして、hwndFrom にコントロールのウィンドウハンドル、idFrom にコントロール ID が入っています。

 それではまず、CWnd クラスに、OnNotify 関数

virtual LRESULT OnNotify(int idFrom, NMHDR* pnmhdr) {
    return WindowProc(WM_NOTIFY, (WPARAM)idFrom, (LPARAM)pnmhdr);
}

を追加し、CWnd::WndProc の、

case WM_CREATE:
    return pWnd->OnCreate((LPCREATESTRUCT)lParam);

となっているあたりに、WM_NOTIFY の分岐を追加します。

case WM_CREATE:
    return pWnd->OnCreate((LPCREATESTRUCT)lParam);
case WM_NOTIFY:
    return pWnd->OnNotify((int)wParam, (NMHDR*)lParam);

 そして、CToolBar_MainWnd に、OnNotify, OnNeedText 関数を追加します。

// コモンコントロールからのメッセージ
virtual LRESULT OnNotify(int idFrom, NMHDR* pnmhdr)
{
    switch(pnmhdr->code)
    {
    case TTN_NEEDTEXT:
        OnNeedText(idFrom, (TOOLTIPTEXT*)pnmhdr);
        break;
    }
    return CToolBar::OnNotify(idFrom, pnmhdr);
}

// ツールチップが必要
virtual void OnNeedText(int idFrom, TOOLTIPTEXT* pttt)
{
    switch(idFrom)
    {
    case ID_OPENFILE:
        pttt->lpszText = TEXT("ファイルを開く");
        break;
    case ID_HEAD:
        pttt->lpszText = TEXT("巻き戻し\n頭出し/前へ");
        break;
    case ID_PLAY:
        pttt->lpszText = TEXT("再生");
        break;
    case ID_PAUSE:
        pttt->lpszText = TEXT("一時停止");
        break;
    case ID_STOP:
        pttt->lpszText = TEXT("停止");
        break;
    case ID_NEXT:
        pttt->lpszText = TEXT("早送り\n次へ");
        break;
    case ID_SLOOP:
        pttt->lpszText = TEXT("1曲ループ");
        break;
    case ID_ALOOP:
        pttt->lpszText = TEXT("全曲ループ");
        break;
    case ID_RANDOM:
        pttt->lpszText = TEXT("ランダム再生 ( 重複あり )");
        break;
    case ID_ABLOOP_A:
        pttt->lpszText = TEXT("AB ループ ( A )");
        break;
    case ID_ABLOOP_B:
        pttt->lpszText = TEXT("AB ループ ( B )");
        break;
    case ID_CONTROLBAR:
        pttt->lpszText = TEXT("コントロールバーの表示状態");
        break;
    case ID_LIST:
        pttt->lpszText = TEXT("プレイリストの表示状態");
        break;
    }
}

 これで、ツールバーにツールチップが表示されるようになりました。

トラックバックURL

このエントリーのトラックバックURL:
http://www.edolfzoku.com/diary/mt-tb.cgi/138

コメントする