Как изменить инструмент прямоугольник CToolTipCtrl? - PullRequest
3 голосов
/ 15 мая 2009

Этот вопрос связан с этим .

В производном классе CDockablePane у меня есть член CTreeCtrl, для которого я добавляю всплывающую подсказку в OnCreate ():

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 - это CRect элемент, установленный в (0, 0, 10000, 10000) в CTor. Это действительно безобразно.

Я хотел бы настроить прямоугольник инструмента всякий раз, когда изменяется размер m_tree.
Поэтому я попробовал кое-что в CMyPane::OnSize(), но ничего из этого не сработало:

  • Вызов m_pToolTip->GetToolInfo(), затем изменение прямоугольного члена CToolInfo, затем вызов SetToolInfo()
  • Звонок m_pToolTip->SetToolRect()

Как это должно быть сделано?

Ответы [ 2 ]

3 голосов
/ 19 сентября 2009

Я не знаю другого способа сделать это, кроме как снова вызвать DelTool затем AddTool в вашем обработчике OnSize:

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);
    }
}
0 голосов
/ 07 марта 2012
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;
}
...