ボタンのツールチップ

解決


ひる  2012-01-23 18:12:23  No: 73152  IP: 192.*.*.*

ダイアログにCMFCButtonのメンバを追加してボタンに関連付け、
OnInitDialogで m_button.SetTooltip(_T("テスト")); と記述したところ、
簡単にボタン上にツールチップを出せたのですが、
ツールチップが出ている状態でしばらく放置し、勝手に表示が消えてしまうと、
再度ボタン上にマウスカーソルを置き直しても出てこなくなってしまいます。

ボタンを一度押すと再び出るようになるようなので、
なにか内部の状態がリセットされていないのではと思っているのですが、
これを回避できる方法はありませんでしょうか。

編集 削除
名前なし  2012-01-25 00:00:50  No: 73153  IP: 192.*.*.*

http://dobon.net/vb/dotnet/control/showtooltip.html
で似たようなのが見つかりましたが
PreTranslateMessageで、WM_MOUSEMOVEでm_hWndが変わった時に
EnableToolTipsで無効&有効を切り替えればうまくいくのでは
ないでしょうか。

環境がないので試していません。

編集 削除
ひる  2012-01-27 14:52:42  No: 73154  IP: 192.*.*.*

ヒントをいただきありがとうございます。
PreTranslateMessageの方法はうまくいきませんでしたが、
CMFCButtonがマウスカーソルの追跡をWM_MOUSELEAVEではなく、
マウスキャプチャで行っているようなので、CMFCButtonの派生クラスを作り、

void CMFCButtonEx::OnCaptureChanged(CWnd *pWnd)
{
    if (pWnd->GetSafeHwnd() != m_hWnd) {
        if (m_pToolTip->GetSafeHwnd() != NULL) {
            m_pToolTip->Pop();
        }
    }

    CMFCButton::OnCaptureChanged(pWnd);
}

としてみたところ、当初の操作をした際も再表示されるようになりました。

編集 削除