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