Как получить указатель на цветную кнопку

У меня есть цветная кнопка на панели инструментов, она была создана в CMainFrame, как я могу получить указатель на цветную кнопку, которая CMFCColorMenuButton производный класс от View, как и в приведенном ниже коде (часть примера MSOffice2007Demo)? :

CMFCRibbonBar* pRibbon = ((CMainFrame*) GetTopLevelFrame())->GetRibbonBar();
ASSERT_VALID(pRibbon);

CMFCRibbonColorButton* pFontColorBtn = DYNAMIC_DOWNCAST(CMFCRibbonColorButton, pRibbon->FindByID(ID_FONT_COLOR));

0

Решение

Процесс доступа к элементам управления на панели инструментов требует нескольких шагов для перехода к соответствующему элементу управления. Следующий список иллюстрирует это:

  1. Получить указатель на фрейм, в котором размещена панель инструментов.
  2. Получить указатель на панель инструментов управления.
  3. [необязательный] Получить индекс кнопки для определенного идентификатора команды.
  4. Получить указатель на кнопку по указанному индексу.
  5. Преобразовать тип кнопки базового класса в производный класс.

    // Get pointer to mainframe window
    CMainFrame* pFrameWnd = DYNAMIC_DOWNCAST( CMainFrame, AfxGetMainWnd() );
    
    // Get pointer to the toolbar
    CBasePane* pPane = pFrameWnd->GetPane( AFX_IDW_TOOLBAR );
    CMFCToolBar* pToolBar = DYNAMIC_DOWNCAST( CMFCToolBar, pPane );
    
    // Find button index for command ID
    int index = pToolBar->CommandToIndex( ID_COLOR_PICKER );
    
    // Retrieve button
    CMFCToolBarButton* pButton = pToolBar->GetButton( index );
    
    // Convert button to appropriate type
    CMFCColorMenuButton* pColorButton = DYNAMIC_DOWNCAST( CMFCColorMenuButton,
    pButton );
    

Несколько замечаний по реализации:

Обработка ошибок была опущена для краткости. Всякий раз, когда есть DYNAMIC_DOWNCAST возвращаемое значение может быть NULL и должен быть проверен. Аналогично, призыв к CommandToIndex может потерпеть неудачу и требует обработки ошибок.

DYNAMIC_DOWNCAST похож на C ++ dynamic_cast тем, что он оценивает, может ли тип времени выполнения быть преобразован в другой тип. Хотя не все отношения управления Windows могут быть смоделированы как иерархия классов C ++, MFC предоставляет собственный инструмент преобразования: DYNAMIC_DOWNCAST,

Идентификатор передан на звонок CommandToIndex идентификатор команды, назначенный CMFCColorMenuButton либо через скрипт ресурса, либо во время выполнения, в зависимости от того, как создается элемент управления.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]