工具提示不适用于控件

时间:2015-10-19 13:13:56

标签: c++ mfc

我的一个应用程序从Windows Xp移植到WIN7。对于这个应用程序,工具提示控件在win7中不起作用,而它适用于XP。

代码逻辑:

  

我们在const字符串中设置工具提示。 aToolTipText =anImageTypeStr;   并传入一个调用SetToolTipText(LPCTSTR tooltiptext, long Id)的函数ActivateToolTipText(int Id, bool activateFlag),该函数实际上是根据id处理Tooltip。

bool ActivateToolTipText(int Id, bool activateFlag)
{

CSA_TRY
{   
    // struct specifying info about tool in ToolTip control
    TOOLINFO ti;
    unsigned int uid = Id;       // for ti initialization

    LPTSTR lptstr = (LPTSTR)(LPCTSTR)m_strToolTipText[Id]; 

    // CREATE A TOOLTIP WINDOW 
    if(activateFlag)
    {
        m_ToolTipHWND[Id] = CreateWindowEx(WS_EX_TOPMOST,
            TOOLTIPS_CLASS,
            NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,        
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            m_hWnd,
            NULL,
            0, 
            NULL
            );
    }

    // INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE 
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS ;
    ti.hwnd = m_hWnd;
    ti.hinst = 0;
    ti.uId = uid;
    ti.lpszText = lptstr;  
    // ToolTip control will cover the rect of Id
    CRect rect_out;
    GetIdArea(Id, &rect_out);
    ti.rect = rect_out;

    if( activateFlag )

        ::SendMessage(m_ToolTipHWND[Id], TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO)&ti);

    }
    else
    {
        ::SendMessage(m_ToolTipHWND[Id], TTM_DELTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
    }


    return TRUE;
}
}

1 个答案:

答案 0 :(得分:0)

问题在于通用控件版本6.对于xp +,头文件CommCtrl.h假设我们将使用comctl版本6,但如果我们不使用清单文件明确启用它,我们仍将使用旧的comctl版本5 。X。问题从这里开始,版本5.x的TOOLINFO的大小与版本6.x不同。因此,如果你需要在windows xp +下使用comctl版本5,你应该使用以下代码TOOLINFO ti初始化TOOLINFO; ti.cbSize = sizeof(TOOLINFO) - 4;