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

标签 c++ windows mfc tooltip

我的任务是为配置菜单中的每个项目分配工具提示。我已经完成了将工具提示“添加”到页面上的每个控件,但似乎有时会显示工具提示,有时不会显示,具体取决于控件在屏幕上的位置。

工具提示-erize我首先页面

EnableToolTips(TRUE);

在每个 CPropertyPage 的 OnInitDialog 方法中。 然后我添加通知 map

ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText)

OnToolTipText 函数看起来是这样的

BOOL CCfgPrefPage::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)
        {
            if( nID == GetDlgItem(IDC_PICKDIST_EDIT)->GetDlgCtrlID())  
                _tcsncpy_s(pTTT->szText, _T("Tool Tip Text"), _TRUNCATE);
            else if( nID == GetDlgItem(IDC_ENDPTTOL_EDIT)->GetDlgCtrlID())  
                _tcsncpy_s(pTTT->szText, _T("Tool Tip Text"), _TRUNCATE);

            pTTT->lpszText = pTTT->szText; // Sanity Check
            pTTT->hinst = AfxGetResourceHandle(); // Don't think this is needed at all
            return TRUE;
        }
    }
    return FALSE;
}

对于我的某些控件,工具提示似乎不会显示。对于大多数复选框控件,工具提示会显示,但对于少数控件,它们只是不显示。没有其他控件覆盖它们,它们没有被禁用。

另一件事,如果我使用非标准光标窗口反复闪烁工具提示,以至于在某些情况下无法阅读。我怎样才能解决这个问题?这在 CEdit 控件上不是问题,那么为什么在其他地方会出现问题?

编辑:更新,多年来一直在页面上的控件似乎显示工具提示。我现在/今天尝试添加的任何控件都不会显示工具提示。无论位置、控件类型、设置如何,我都无法在新插入的控件上显示一个工具提示。

最佳答案

如果您不想使用我建议的辅助类,请修复您的代码中的问题。 首先,在映射偶数处理程序时使用 ON_NOTIFY_EX_RANGE 宏,如下所示(这将覆盖所有 ID):

ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)

接下来,您需要修复您的函数。我在这里看到了一些问题。首先,在测试 TTF_IDISHWND 标志时,您只需要重新初始化 nID。您不需要将此应用于整个函数。其次,在所有操作之后,您的 nID 将是实际的对话框 ID。不需要 GetDlgItem() 函数

BOOL CCfgPrefPage::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)
    {
        if( nID == IDC_PICKDIST_EDIT)  
            _tcsncpy_s(pTTT->szText, _T("Tool Tip Text"), _TRUNCATE);
        else if( nID == IDC_ENDPTTOL_EDIT)  
            _tcsncpy_s(pTTT->szText, _T("Tool Tip Text"), _TRUNCATE);

        //pTTT->lpszText = pTTT->szText; // Sanity Check
        *pResult = 0;
        return TRUE;
    }
    return FALSE;
}

关于c++ - MFC 工具提示仅在特殊场合出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15640780/

相关文章:

c++ - 在 c++/MFC 中读取 key 并从 .ini 文件中获取部分

c++ - com: pDispatch->invoke() 时参数数量无效

c++ - 在 C++ 中转换字符编码

c++ - 在 Qt 应用程序中诊断段错误时遇到问题

windows - 包刷新内容卡在联系主机 : elpa. gnu.org:80

windows - 可执行文件的名称对用户帐户控制对话框有影响吗?

c++ - 当我打开 visual studio 时,MFC 日期时间选择器格式发生变化

c++ - std::访问带有重载自由函数而不是函数对象的 std::variant

C++ 指针使用 Visual Studio 更改地址,而不是使用 OsX 中的 Xcode 或 Linux 中的 gcc

windows - Ansible:无法在 Windows 节点上执行 ping [SSL:CERTIFICATE_VERIFY_FAILED]