CMFCToolbar の CMFCToolBarComboBoxButton にカスタム ツールチップを追加することは可能ですか?
リソース ファイルで定義されている「デフォルト」のツールチップ テキストを使用できるようになりましたが、ツールバーのコンボ ボックスのツールチップ テキストを動的に変更する方法が見つかりません。
資力 :
IDR_TOOLBAR1 TOOLBAR 16, 15
BEGIN
BUTTON ID_BUTTON32771
BUTTON ID_BUTTON32772
BUTTON ID_BUTTON32773
END
STRINGTABLE
BEGIN
ID_BUTTON32771 "Button 1\nButton 1"
ID_BUTTON32772 "Button 2\nButton 2"
ID_BUTTON32773 "Button 3\nButton 3"
END
ツールバーは正常に作成され、適切に表示されています。ボタンを OnToolbarReset ( AFX_WM_RESETTOOLBAR のハンドラー) の CMFCToolBarComboBoxButtoncsCombo に「置き換え」ます。
LRESULT CMainFrame::OnToolbarReset(WPARAM wp,LPARAM)
{
UINT uiToolBarId = (UINT) wp;
if (uiToolBarId == IDR_TOOLBAR1 )
{
CMFCToolBarComboBoxButtoncsCombo(ID_BUTTON32772, GetCmdMgr()->GetCmdImage(ID_BUTTON32772, FALSE), CBS_DROPDOWNLIST);
m_MyToolbar.ReplaceButton(ID_BUTTON32772, csCombo);
m_MyToolbar.AddItem( _T("un") );
m_MyToolbar.AddItem( _T("deux") );
m_MyToolbar.AddItem( _T("trois") );
}
return 0;
}
これは正常に機能し、ボタンはコンボボックスに置き換えられ、デフォルトのツールチップ テキストが表示されます。
ここで、ツールチップのテキストを動的に変更できるようにしたいと考えています。
メイン フレーム (および派生ツールバー クラス) で TTN_NEEDTEXT (および TTN_NEEDTEXTA と TTN_NEEDTEXTW) を処理しようとしましたが、ツールバーに対して呼び出されません。
私は独自の CMFCToolBarComboBoxButton クラスを派生させようとし、私が期待したことをしているはずの2つの仮想メソッドをオーバーライドしました:
class MyComboBox : public CMFCToolBarComboBoxButton
{
public:
MyComboBox ();
MyComboBox (UINT uiID, int iImage, DWORD dwStyle = CBS_DROPDOWNLIST, int iWidth = 0);
virtual BOOL OnGetCustomToolTipText(CString& );
virtual BOOL OnUpdateToolTip(CWnd* , int , CToolTipCtrl& , CString& );
virtual ~MyComboBox ();
DECLARE_SERIAL(MyComboBox )
};
と
IMPLEMENT_SERIAL(MyComboBox , CMFCToolBarComboBoxButton,0)
MyComboBox ::MyComboBox (UINT uiID, int iImage, DWORD dwStyle , int iWidth ) : CMFCToolBarComboBoxButton(uiID, iImage,dwStyle, iWidth )
{
}
MyComboBox ::MyComboBox ()
{
}
MyComboBox ::~MyComboBox ()
{
}
BOOL MyComboBox ::OnGetCustomToolTipText(CString& strToolTip)
{
strToolTip = "bonjour";
return TRUE;
}
BOOL MyComboBox ::OnUpdateToolTip(CWnd* /*pWndParent*/, int /*iButtonIndex*/, CToolTipCtrl& /*wndToolTip*/, CString& str)
{
str = "allo";
return TRUE;
}
2 つの仮想メソッドが呼び出されることはありません。アプリケーションを開くときとアプリケーションを閉じるときに呼び出されます。ただし、ユーザーがツールバーのコンボボックスの上にマウスを移動/ホバーしたときに、アプリケーションが正常に実行されている場合は決してありません。
ツールチップ マネージャー (CTooltipManager) を調べて、InitTooltipManager を呼び出すかどうかによってツールチップ マネージャーを有効にするかどうかを調べてみました。
(VS2012でこれをすぐに試してみましたが、同じ「機能しない」結果が得られました)。
それを行うために欠けている手順はありますか?
ありがとう。
最大。