如何修改 CToolTipCtrl 的工具矩形?

Posted

技术标签:

【中文标题】如何修改 CToolTipCtrl 的工具矩形?【英文标题】:How to modify the tool rect of a CToolTipCtrl? 【发布时间】:2009-05-15 09:23:57 【问题描述】:

这个问题是related to this one。

在 CDockablePane 派生类中,我有一个 CTreeCtrl 成员,我在 OnCreate() 中为其添加了 ToolTip:

int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)

    if (CDockablePane::OnCreate(lpCreateStruct) == -1)
        return -1;

    const DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
        TVS_CHECKBOXES | TVS_DISABLEDRAGDROP | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
        TVS_INFOTIP | TVS_NOHSCROLL | TVS_SHOWSELALWAYS;

    if(!m_tree.Create(dwStyle, m_treeRect, this, TREECTRL_ID) )  return -1; 

    m_pToolTip->AddTool(&m_tree, LPSTR_TEXTCALLBACK, &m_treeRect, TREECTRL_ID);
    m_tree.SetToolTips(m_pToolTip);


    return 0;

我必须使用所有可选参数调用 AddTool(),因为默认值不适用于 CDockablePane。m_treeRect 是 CTor 中设置为 (0, 0, 10000, 10000)CRect 成员。这真的很丑。

我想在m_tree 的大小发生变化时调整工具的矩形。 所以我在CMyPane::OnSize() 中尝试了一些东西,但都没有奏效:

调用m_pToolTip->GetToolInfo()然后修改CToolInfo的rect成员,然后调用SetToolInfo() 致电m_pToolTip->SetToolRect()

这意味着什么?

【问题讨论】:

【参考方案1】:

除了在您的 OnSize 处理程序中再次调用 DelTool 然后 AddTool 之外,我没有其他方法可以做到这一点:

void CMyPane::OnSize(UINT nType, int cx, int cy)

    CDockablePane::OnSize(nType, cx, cy);

    if (m_pToolTip != NULL)
    
        m_pToolTip->DelTool(&m_tree, TREECTRL_ID);

        CRect treeRect;
        m_tree.GetClientRect(treeRect);

        m_pToolTip->AddTool(&m_tree, LPSTR_TEXTCALLBACK, &treeRect, TREECTRL_ID);
    

【讨论】:

【参考方案2】:
int CMyPane::OnCreate(LPCREATESTRUCT lpCreateStruct)

    if (CDockablePane::OnCreate(lpCreateStruct) == -1)
        return -1;

    const DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN |
        TVS_CHECKBOXES | TVS_DISABLEDRAGDROP | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
        TVS_INFOTIP | TVS_NOHSCROLL | TVS_SHOWSELALWAYS;

    if(!m_tree.Create(dwStyle, m_treeRect, this, TREECTRL_ID) )  return -1; 

    m_pToolTip->AddTool(&m_tree, LPSTR_TEXTCALLBACK, &m_treeRect, TREECTRL_ID);
    m_tree.SetToolTips(m_pToolTip);


    return 0;

【讨论】:

以上是关于如何修改 CToolTipCtrl 的工具矩形?的主要内容,如果未能解决你的问题,请参考以下文章

CToolTipCtrl 未显示

MFC:CToolTipCtrl 导致 ASSERT

CToolTipCtrl用法

AI中使用矩形网格工具画好表格了,要怎么修改它的行数和列数

如何制作可调整大小的矩形选择工具?

Android:如下关于绘制圆角矩形边框问题,怎么解决?