Как отобразить всплывающую подсказку для CMFCRibbonButton в строке состояния?

У меня есть CMFCRibbonStatusBar в моем мэйнфрейме, к которому я добавляю CMFCRibbonButtonsGroup, который снова имеет CMFCRibbonButton. Эта кнопка имеет тот же идентификатор, что и запись в меню.

Создание кнопки происходит следующим образом:

CMFCRibbonButtonsGroup* pBGroup = new CMFCRibbonButtonsGroup();

CMFCToolBarImages images;
images.SetImageSize(CSize(32, 16)); // Non-square bitmaps
if (images.Load(IDB_STATUSBAR_IMAGES))
{
    pBGroup->SetImages(&images, NULL, NULL);
}

m_pStatusButton = new CMFCRibbonButton(ID_STATUS_SHOWSTATUS,
                                       _T(""),
                                       IMAGEINDEX_DEFAULTSTATUS);

pBGroup->AddButton(m_pStatusButton);

m_wndStatusBar.AddExtendedElement(pBGroup, _T(""));

Я хочу использовать эту кнопку как индикатор состояния.

Я хочу отображать всплывающую подсказку в следующих двух случаях:

  • когда статус меняется и
  • когда пользователь наводит указатель мыши на кнопку.

Я вообще понятия не имею, с чего начать. Я просмотрел образцы проектов ToolTipDemo и DlgToolTips, но не мог понять, как это сделать, поскольку все, что они делают, - это отображение всплывающих подсказок для элементов панели инструментов или кнопок диалога (производных от CWnd вместо CMFCRibbonButton).

Если вы знакомы с примером проекта ToolTipDemo: поскольку кажется, что существует несколько способов сделать что-то, я бы предпочел, чтобы всплывающая подсказка выглядела как подсказка «на основе расширенного визуального менеджера» как показано на этом скриншоте.

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
3 418
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не думаю, что можно показать всплывающую подсказку, если курсор мыши не находится над элементом управления. Все это делается автоматически.

Однако, если вы хотите иметь красивую всплывающую подсказку, как на скриншоте, вам нужно вызвать SetToolTipText и SetDescription, например:

CMFCRibbonButton* pBtn = new CMFCRibbonButton(12345, _T(""), 1);
pBtn->SetToolTipText("This is the bold Title");
pBtn->SetDescription("This is the not-so-bold Description");
pGroup->AddButton(pBtn);

Я использую элементы управления CMFCRibbonButton в CMFCRibbonButtonGroup, который добавлен к CMFCRibbonStatusBar. Обратите внимание на четвертый параметр в конструкторе CMFCRibbonButton(), bAlwaysShowDescription, поскольку он, кажется, влияет на поведение в зависимости от того, был ли вызван SetDescription().

В частности, если SetDescription() не был вызван, не имеет значения, является ли bAlwaysShowDescription ИСТИННЫМ или ЛОЖНЫМ - отображается всплывающая подсказка (как я и ожидал). Если SetDescription() установлен, а bAlwaysShowDescription - ЛОЖЬ, при наведении курсора на кнопку отображается всплывающая подсказка с описанием под ней.

Что кажется нелогичным с учетом имени этого параметра bAlwaysShowDescription, так это то, что, когда он имеет значение ИСТИНА и установлен SetDescription(), появляется НИ ОДИН всплывающая подсказка или описание. Интересно, связано ли это с этим сообщением: https://connect.microsoft.com/VisualStudio/feedback/details/399646/cmfcribbonbutton-wont-show-tooltip-if-balwaysshowdescription-1

Надеюсь, это поможет, и вы сможете добиться того, что вам нужно, с помощью различных комбинаций параметра bAlwaysShowDescription и того, установлен ли SetDescription().

Другие вопросы по теме