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

MFC工具提示,GetDlgItemText不返回用于工具提示的文本,mfc,tooltip,Mfc,Tooltip,我最近一直在向应用程序中的每个对话框项添加工具提示。在将它们添加到字符串资源之前,我想在硬编码文本中进行操作,以便在编写它们时可以轻松地进行更改。现在是从资源文件中提取字符串的时候了,我似乎无法将其显示为工具提示 下面的代码生成一个空白的工具提示。不过,如果我用真正的字符串(如[\u T(“工具提示文本”))替换tmpStr,它就可以正常工作 代码: BOOL CCustomDialog::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pRe

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

下面的代码生成一个空白的工具提示。不过,如果我用真正的字符串(如[\u T(“工具提示文本”))替换tmpStr,它就可以正常工作

代码:

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放在要在其上显示工具提示的控件上,则该控件将工作并将控件描述显示为文本。如果在控件所在的资源文件中添加字符串资源,字符串资源将不会显示为工具提示


因此,这似乎只是字符串资源的问题?

在下面的代码部分中

    if( nID == IDC_BUTTON1)
    {
        GetDlgItemText(IDS_BUTTON1_TT, tmpStr);
        _tcsncpy_s(pTTT->szText, tmpStr, _TRUNCATE);
    }
看起来您有一个ID为
IDC\u BUTTON1
的按钮,资源文件中有一个ID为
IDS\u BUTTON1\u TT
的关联文本字符串

如果这是真的,那么您需要使用
tmpStr.LoadString(IDS\u BUTTON1\u TT)
来获取文本。不要使用
GetDlgItemText()
除非您想要按钮控件的文本,否则您需要使用它的ID
IDC\u BUTTON1
。那么,就这样做吧

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

在代码的以下部分中

    if( nID == IDC_BUTTON1)
    {
        GetDlgItemText(IDS_BUTTON1_TT, tmpStr);
        _tcsncpy_s(pTTT->szText, tmpStr, _TRUNCATE);
    }
看起来您有一个ID为
IDC\u BUTTON1
的按钮,资源文件中有一个ID为
IDS\u BUTTON1\u TT
的关联文本字符串

如果这是真的,那么您需要使用
tmpStr.LoadString(IDS\u BUTTON1\u TT)
来获取文本。不要使用
GetDlgItemText()
除非您想要按钮控件的文本,否则您需要使用它的ID
IDC\u BUTTON1
。那么,就这样做吧

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