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

问题描述 投票:1回答:1

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

我创建了一个MFC Dialog Application,执行了相同的操作,并且工作正常,但是当它放在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,但是上面显示的这段代码可以,但是对我来说不起作用。

感谢您的任何帮助!

c# .net mfc com activex
1个回答
0
投票

我不知道这是否正是您所需要的。在需要工具提示的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控件环境。

© www.soinside.com 2019 - 2024. All rights reserved.