CToolTipCtrl 未显示

Posted

技术标签:

【中文标题】CToolTipCtrl 未显示【英文标题】:CToolTipCtrl is not showing 【发布时间】:2017-08-02 07:04:51 【问题描述】:

我创建了一个从 CWnd 派生的窗口。该窗口有一个图标和一个文本。 使用 DrawIconEx() 和 dc.DrawText() 方法,我在 onPaint() 方法中创建图标和文本。从技术上讲,我在此窗口中没有任何控件(如 CStatic、CButton 等)。

为了创建工具提示,我添加了以下逻辑。

头文件:添加成员变量

CToolTipCtrl    m_toolTipCtrl;

源文件:在 OnCreate() 方法中添加以下内容。

m_toolTipCtrl.Create(this)
m_toolTipCtrl.AddTool(this, _T("Warning Message Tool-Tip"));
m_toolTipCtrl.Activate(TRUE);

在 PreTranslateMessage(MSG* pMsg) 虚拟方法中添加 RelayEvent m_toolTipCtrl.RelayEvent(pMsg);

问题: 当我将鼠标光标放在此窗口上时,未显示工具提示。 我尝试了什么: 我观察到创建了 ToolTip 但是当鼠标悬停在窗口上时 PreTranslateMessage() 方法中的断点没有命中。

注意:这个窗口(A)是另一个窗口(B)的子窗口。 B 是由 CView 派生的。

谁能告诉我这里出了什么问题?

提前致谢!

【问题讨论】:

这可能对experts-exchange.com/questions/10055301/…有帮助 您应该将句柄传递给按钮,而不是 this。例如m_toolTipCtrl.AddTool(ptrButton, _T("text")); 【参考方案1】:

通常,您通过将指针指向父窗口并添加该窗口中的控件来创建工具提示控件。这意味着传递给 create 的窗口指针和传递给 AddTool 的窗口指针通常不一样。

您想在窗口本身中创建工具提示控件,而不是控件。

您可以为矩形区域创建一个工具提示,并将整个窗口作为该区域(或仅窗口的一部分,如果您愿意)。

下面是一个示例,说明如何在不使用 MFC 的情况下使用 Windows API 执行此操作: Create tooltip for whole window area

我还没有在 MFC 中找到一个好的例子;如果我这样做,我会尝试找到一个并更新它。我无法自己测试它,因为我目前无法访问 Visual Studio(抱歉!)。

同时,也许上面的例子,结合these docs 将有足够的信息让您弄清楚。

您可能还需要在窗口上调用 SetToolTips,如 this example

在您的视图中,您是否有在其他地方工作的工具提示?如果没有,您可能需要调用 EnableToolTips(true)。

【讨论】:

【参考方案2】:

经过大量的痛苦和搜索,我发现它会这样工作: 我在 MyPersonalDlg 中有一个复选框控件 IDC_CHECK_MY_BOX。

在 MyPersonalDlg.h 中,我声明了 CToolTipCtrl m_toolTipCtrl。

在 MyPersonalDlg.cpp 的 InitDialog 中:

CButton* control_pointer;
control_pointer= (CButton*)GetDlgItem(IDC_CHECK_MY_BOX);

m_toolTipCtrl.Create(this)
m_toolTipCtrl.AddTool(control_pointer, _T("Warning Message Tool-Tip"));


BOOL MyPersonalDlg::PreTranslateMessage(MSG* pMsg)

    m_ToolTipCtrl.RelayEvent(pMsg);//this is why it didn't worked for me.

    return CDialog::PreTranslateMessage(pMsg);

没有 m_toolTipCtrl.Activate(TRUE); 它对我有用 我想知道,为什么他们不能让它变得简单,就像在 VB 中一样,当它是控制属性的一部分时,它会更容易处理。

【讨论】:

以上是关于CToolTipCtrl 未显示的主要内容,如果未能解决你的问题,请参考以下文章

如何修改 CToolTipCtrl 的工具矩形?

每次显示前如何更新 ToolTip 文本?

MFC:CToolTipCtrl 导致 ASSERT

CGridCtrl某一列增加ToolTip飘窗效果

如何在工具提示中获取新行

我们可以简化这段代码吗?显示 = typeof 显示 == '未定义' ?未定义:!显示