13

ツールチップを CStatic (および CLed) コントロールに追加/表示できるコードの簡潔なチャンクを見つけることができませんでした。明らかに、これを行うための標準コードは、このタイプのコントロールには適用されません。誰かがコード スニペットを投稿できますか?

4

5 に答える 5

10

このコードがあなたの問題を解決してくれることを願っています。重要なことの 1 つは、CStatic の NOTIFY プロパティを TRUE にすることです。

if( !m_ToolTip.Create(this))
{
    TRACE0("Unable to create the ToolTip!");
}
else
{
    CWnd* pWnd = GetDlgItem(IDC_STATIC_MASTER_PWD);
    m_ToolTip.AddTool(pWnd,"Ok");
    m_ToolTip.Activate(TRUE);
}

問題があればお知らせください。

于 2014-01-16T08:23:55.320 に答える
3

これがまだ必要かどうかはわかりませんが、問題を解決するために使用した方法は次のとおりです。静的ラベルを作成するときに dwStyle に SS_NOTIFY を追加するだけです。(または単にプロパティで「Nofity」「True」を設定します)。それは私にとってはうまくいきました。

于 2016-09-23T06:10:37.283 に答える
2

この単純なクラスを使用して、複数行のツールチップで成功しました:

ツールヒントのクラスを作成します。

class ToolTip
{
public:
    static HWND CreateToolTip(int toolID, HWND hDlg, UINT id);
};

次に、ツールチップ作成関数を実装します。

HWND ToolTip::CreateToolTip(int toolID, HWND hDlg, UINT id)
{
    if (!toolID || !hDlg || !id)
    {
        return FALSE;
    }

    CString strTTText;
    strTTText.LoadString( id );

    // Get the window handle of the control to attach the TT to.
    HWND hwndTool = ::GetDlgItem(hDlg, toolID);

    // Create the tooltip window
    HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                              WS_POPUP |TTS_ALWAYSTIP,// | TTS_BALLOON,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              hDlg, NULL, 
                              AfxGetInstanceHandle() , NULL);

   if (!hwndTool || !hwndTip)
   {
       return (HWND)NULL;
   }                              

    // Associate the tooltip with the tool.
    TOOLINFO toolInfo = { 0 };
    toolInfo.cbSize = sizeof(toolInfo);
    toolInfo.hwnd = hDlg;
    toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
    toolInfo.uId = (UINT_PTR)hwndTool;
    toolInfo.lpszText = (char*)(LPCTSTR)strTTText;
    ::SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
    ::SendMessageA(hwndTip, TTM_SETMAXTIPWIDTH, 0, 40); // force multi-line

    return hwndTip;
}

InitDialog のどこかで呼び出します。

CMyDialog::InitDialog()
{
    ToolTip::CreateToolTip( PickAUniqueNumber, m_hWnd, IDS_MY_RESOURCE_STRING );
}
于 2014-05-20T15:11:06.520 に答える
2

ダイアログ ベースの自動作成された mfc アプリケーションに CStatic を追加すると、翻訳前のダイアログ メッセージに RelayEvent を追加するまでツールチップが表示されない

BOOL CTooltipStaticDlg::PreTranslateMessage(MSG* pMsg)
{
    m_ToolTip.RelayEvent(pMsg); 
    return CDialog::PreTranslateMessage(pMsg);
}
于 2015-11-18T05:23:49.093 に答える