Как получить доступ к элементу управления на вкладке ленты, которая еще не была открыта?

У меня есть приложение ленты, которое имеет три вкладки. В событии OnCreate мне нужно проверить флажок, который отсутствует на вкладке, которая отображается при открытии приложения.

Проблема в том, что я не могу проверить этот CheckBox. Когда я открываю вкладку, которая содержит его, флажок снят. Что я знаю, так это то, что поскольку лента создается динамически, элемент управления, к которому я хочу получить доступ, еще не существует.

Есть какой-нибудь способ получить доступ к CheckBox?

0

Решение

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

0

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

В WTL все довольно просто:

  1. Вы должны переопределить OnRibbonQueryState ():

     bool CMainFrame::OnRibbonQueryState(UINT nCmdID, REFPROPERTYKEY key)
    {
    switch (nCmdID)
    {
    case RID_SETTINGS_GUI_SHOWSTATUSBAR:
    if (IsEqualGUID(key.fmtid, UI_PKEY_BooleanValue.fmtid))
    return m_showStatusBarCtrl.IsChecked();
    }
    
    return DefRibbonQueryState(nCmdID, key); //Default WTL behavior
    }
    
  2. Добавьте ваш обработчик:

    COMMAND_ID_HANDLER(RID_SETTINGS_GUI_SHOWSTATUSBAR, OnShowStatusbarChanged)
    
    LRESULT CMainFrame::OnShowStatusbarChanged(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
    {
    m_showStatusBarCtrl.OnCheckboxChanged();
    
    bool currState = m_showStatusBarCtrl.IsChecked();
    ::ShowWindow(m_hWndStatusBar, currState ? SW_SHOW : SW_HIDE);
    UpdateLayout();
    
    return 0;
    }
    

    m_showStatusBarCtrl — просто моя простая оболочка для состояния (bool).

0

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