●オーディオプレイヤ開発記 その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;
}
}
これで、ツールバーにツールチップが表示されるようになりました。