У меня есть приложение ленты, которое имеет три вкладки. В событии OnCreate мне нужно проверить флажок, который отсутствует на вкладке, которая отображается при открытии приложения.
Проблема в том, что я не могу проверить этот CheckBox. Когда я открываю вкладку, которая содержит его, флажок снят. Что я знаю, так это то, что поскольку лента создается динамически, элемент управления, к которому я хочу получить доступ, еще не существует.
Есть какой-нибудь способ получить доступ к CheckBox?
Попробуйте проверить элемент управления после его создания (например, событие, в котором вы создали элемент управления). После того, как вы его создадите, вы можете назначить процедуру, которая будет запускаться при нажатии и будет проверяться или нет. Надеюсь это поможет.
В WTL все довольно просто:
Вы должны переопределить 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
}
Добавьте ваш обработчик:
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).