无法获得工具提示以显示在MFC ActiveX Com控件对话框上

我创建了一个MFC activeX控件,并在其中创建了一个子对话框,该子对话框将在.NET环境中使用。在对话框中,我有一个按钮,当您将鼠标悬停在鼠标上时,会放置一个工具提示,它应该显示该工具提示。由于某种原因,当我在.NET环境中使用对话框时,它将无法正常工作。

我创建了一个MFC对话框应用程序,并执行了相同的操作,并且工作正常,但是当它放在C#.NET环境中时却无法通过activeX。

这是我的代码:

MainDialog.h

CToolTipCtrl m_tooltip;






MainDialog.cpp

CButton *PlayButton = (CButton*)GetDlgItem(IDC_PLAY_BUTTON);

m_tooltip.Create(this);
m_tooltip.AddTool(PlayButton,L"Play");
m_tooltip.activate(TRUE);

BOOL OnWndMsg(UINT message,WPARAM wParam,LPARAM lParam,LRESULT* pResult)
 {
  MSG msg;
  msg.wParam = wParam;
  msg.lParam = lParam;
  msg.message = message;
  msg.hwnd = m_hWnd;
  getcursorPos(&msg.pt);

  // Tooltips notification.
  FilterToolTipMessage(&msg);

  return CWnd::OnWndMsg(message,wParam,lParam,pResult);
 } 

我第一次使用PreTranslateMessage,但我读了http://forum.codejock.com/forum_posts.asp?TID=1361&title=task-panel-tooltips-in-activex-control

在这里它不适用于MFC,但是上面显示的这段代码可以,但对我来说不起作用。

感谢您的帮助!

koko89 回答:无法获得工具提示以显示在MFC ActiveX Com控件对话框上

我不知道这是否正是您所需要的。在需要工具提示的MFC对话框中,首先将其添加到标题中:

using ToolTipMap = std::map<UINT,UINT>;

然后,我添加此函数(在OnInitDialog中调用):

void COptionsDlg::InitToolTips()
{
    int         i = 0;
    CString     strText = _T("");
    ToolTipMap  mapToolTips;

    mapToolTips.emplace(IDC_COMBO_WATCHTOWER_DAY,IDS_COMBO_WATCHTOWER_DAY);
    mapToolTips.emplace(IDC_COMBO_SCHOOL_DAY,IDS_COMBO_SCHOOL_DAY);
    mapToolTips.emplace(IDC_EDIT_DATE_FORMAT,IDS_EDIT_DATE_FORMAT);
    mapToolTips.emplace(IDC_CHECK_USE_CUSTOM_DATE,IDS_CHECK_USE_CUSTOM_DATE);
    mapToolTips.emplace(IDC_CHECK_PLATFORM,IDS_CHECK_PLATFORM);
    mapToolTips.emplace(IDC_CHECK_PLATFORM_MIKE,IDS_CHECK_PLATFORM_MIKE);
    mapToolTips.emplace(IDC_COMBO_NUM_MIKE_USERS,IDS_COMBO_NUM_MIKE_USERS);
    mapToolTips.emplace(IDC_COMBO_NUM_SOUND_USERS,IDS_COMBO_NUM_SOUND_USERS);
    mapToolTips.emplace(IDC_COMBO_NUM_ATTEND,IDS_COMBO_NUM_ATTEND);
    mapToolTips.emplace(IDC_BUTTON_HELP,IDS_BUTTON_HELP);
    mapToolTips.emplace(IDC_COMBO_REPORT_MODE,IDS_COMBO_REPORT_MODE);
    mapToolTips.emplace(IDC_COMBO_WEEKLY_DAY,IDS_COMBO_WEEKLY_DAY);

    for (auto& kv : mapToolTips) 
    {
        strText.LoadString(kv.second);

        m_tooltip[i].Create(this,TTS_BALLOON);
        m_tooltip[i].Activate(DisplayToolTips());
        m_tooltip[i].AddTool(GetDlgItem(kv.first),strText);

        i++;
    }
}

上面的函数为每个元素创建一个工具提示控件,我需要一个工具提示来显示它并将其与STRINGTABLE条目相关联。

最后,我有您提到的PreTranslateMessage,但我是这样的:

BOOL COptionsDlg::PreTranslateMessage(MSG* pMsg)
{
    for(int i = 0; i < NUM_OPTION_TOOLTIPS; i++ )
            m_tooltip[i].RelayEvent(pMsg);

    return CDialog::PreTranslateMessage(pMsg);  // CG: This was added by the ToolTips component.
}

在Visual C ++ 6中,以前是一个组件库,您可以在任何对话框类中插入工具提示支持。那些日子!

我不知道以上内容是否适合您的MFC ActiveX控件上下文。

本文链接:https://www.f2er.com/3077166.html

大家都在问