MFC 工具提示,GetDlgItemText 不返回用于工具提示的文本

Posted

技术标签:

【中文标题】MFC 工具提示,GetDlgItemText 不返回用于工具提示的文本【英文标题】:MFC tooltips, GetDlgItemText does not return the text to use for tooltip 【发布时间】:2013-04-08 15:17:53 【问题描述】:

我最近一直在为我的应用程序中的每个对话框项添加工具提示。在将每个添加到字符串资源之前,我想在硬编码文本中执行它,以便在编写它们时可以轻松更改它。现在是时候从资源文件中提取字符串了,似乎我无法将字符串显示为工具提示。

下面的代码会生成一个空白工具提示。虽然如果我将 tmpStr 替换为真正的字符串,例如 [_T("Tool Tip Text")] 它工作正常。

代码:

BOOL CCustomDialog::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )

    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    UINT nID = pNMHDR->idFrom;

    if (pTTT->uFlags & TTF_IDISHWND)
    
        nID = ::GetDlgCtrlID((HWND)nID);
    
    if(nID)
    

        CString tmpStr;
        if( nID == IDC_BUTTON1)
        
            GetDlgItemText(IDS_BUTTON1_TT, tmpStr);
            _tcsncpy_s(pTTT->szText, tmpStr, _TRUNCATE);
        
        *pResult = 0;
        return TRUE;
    
    return FALSE;

这可能是什么原因?

编辑:如果我将控件的控件 ID 放在我希望在其上显示工具提示的控件上,它会起作用并将控件描述显示为文本。如果我在控件所在的资源文件中添加字符串资源,字符串资源将不会作为工具提示出现。

看来这只是String资源的问题?

【问题讨论】:

【参考方案1】:

在下面这段代码中

    if( nID == IDC_BUTTON1)
    
        GetDlgItemText(IDS_BUTTON1_TT, tmpStr);
        _tcsncpy_s(pTTT->szText, tmpStr, _TRUNCATE);
    

您的资源文件中似乎有一个 ID 为 IDC_BUTTON1 的按钮,以及 ID 为 IDS_BUTTON1_TT 的关联文本字符串。

如果是这样,那么您需要使用tmpStr.LoadString(IDS_BUTTON1_TT) 来获取文本。不要使用GetDlgItemText(),除非您想要按钮控件的文本,否则您需要使用它的ID IDC_BUTTON1。所以,就这样吧

    if( nID == IDC_BUTTON1)
    
        tmpStr.LoadString(IDS_BUTTON1_TT);
        _tcsncpy_s(pTTT->szText, tmpStr, _TRUNCATE);
    

【讨论】:

以上是关于MFC 工具提示,GetDlgItemText 不返回用于工具提示的文本的主要内容,如果未能解决你的问题,请参考以下文章

MFC 中的 Unicode strlen 等效项

MFC 工具提示仅在特殊场合出现

无法更改工具提示坐标 MFC

如何在 MFC 中获得多行工具提示

Visual Studio 2008中MFC程序cstring转成char??急!!!大家帮下啊

MFC入门示例之树控件(CTreeControl)