1

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

下面的代码会生成一个空白工具提示。尽管如果我将 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 放在我希望在其上显示工具提示的控件上,它会起作用并将控件描述显示为文本。如果我在控件所在的资源文件中添加字符串资源,则字符串资源不会作为工具提示出现。

所以看起来这只是字符串资源的问题?

4

1 回答 1

1

在下面的代码部分

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

看起来IDC_BUTTON1您的资源文件中有一个 ID 为 的按钮,其 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);
    }
于 2013-04-08T15:23:12.960 回答