Условно установите курсор мыши на элементе управления CMFCMenuButon.
У меня есть стандартный элемент управления в моем диалоге:
CONTROL "Congregation Link",IDC_MFCMENUBUTTON_CONGREGATION_LINK,
"MfcMenuButton",WS_TABSTOP,257,60,159,14
Это меню:
IDR_MENU_HYPERLINK_POPUP MENU
BEGIN
POPUP "__HYPERLINK__"
BEGIN
MENUITEM "Add Hyperlink", ID_ADD_HYPERLINK
MENUITEM "Edit Hyperlink", ID_EDIT_HYPERLINK
MENUITEM "Remove Hyperlink", ID_REMOVE_HYPERLINK
END
END
Я использую стандартный подход для инициализации элемента управления:
void CCongregationDlg::InitCongregationLinkMenuButton()
{
m_menuCongregationLink.LoadMenu(IDR_MENU_HYPERLINK_POPUP);
m_menuBtnCongregationLink.m_hMenu = m_menuCongregationLink.GetSubMenu(0)->GetSafeHmenu();
m_menuBtnCongregationLink.m_nFlatStyle = CMFCButton::BUTTONSTYLE_SEMIFLAT;
// Resize (if required)
CRect rctButton;
m_menuBtnCongregationLink.GetWindowRect(&rctButton);
const auto nOrigWidth = rctButton.Width(); // Store the original width
const auto sizNewButton = m_menuBtnCongregationLink.SizeToContent(true); // This resizes the control!!!
if (sizNewButton.cx > nOrigWidth) // Compare to the original width rather than the new one
{
m_menuBtnCongregationLink.SizeToContent();
}
else // Restore original width
{
m_menuBtnCongregationLink.SetWindowPos(nullptr, -1, -1,
nOrigWidth, sizNewButton.cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
}
}
Я хотел бы имитировать гиперссылку:
- Когда указатель мыши находится над текстом, он показывает курсор в виде руки.
- Когда указатель мыши наводится на стрелку раскрывающегося списка для отображения меню, она превращается в обычный курсор.
Возможно ли это сCMFCMenuButton
контроль?
ПС. В идеале ссылка должна быть подчеркнута (так же, как кнопка управления гиперссылкой).
2 ответа
Вам нужно только реализовать обработчик WM_SETCURSOR. Это должно работать для области кнопок.
Я искал документацию дляCMFCMenuButton
и я понял, что это происходит отCMFCButton
.
И этот класс имеет этот метод:CMFCButton::SetMouseCursorHand
. Процитируем документацию:
Используйте этот метод, чтобы связать изображение руки курсора с кнопкой. Курсор загружается из ресурсов приложения.
Поэтому я обновил свойInitCongregationLinkMenuButton
метод включения:
m_menuBtnCongregationLink.SetMouseCursorHand();
И это работает:
Теперь у меня есть курсор в виде руки, и мне не нужно создавать новый класс. Но он остается курсором в виде руки, даже когда указатель мыши находится над стрелкой.