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



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

下面的代码生成一个空白的工具提示。虽然如果我将tmpStr替换为真正的字符串,如[_T("工具提示文本")],它工作得很好。

代码:

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资源,则该字符串资源将不会作为工具提示显示。

所以这似乎只是字符串资源的问题?

在下面的代码中

    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(),除非你想要按钮控件的文本,然后你需要使用它的IDC_BUTTON1的ID代替。所以,像这样做

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

最新更新