如何访问尚未打开的功能区选项卡上的控件?

时间:2014-01-03 12:58:11

标签: c++ ribbon wtl

我有一个带有三个标签的功能区应用程序。在OnCreate事件中,我需要检查应用程序打开时显示的选项卡上没有的CheckBox。

问题是我无法检查CheckBox。当我打开包含它的选项卡时,取消选中CheckBox。我所知道的是,因为功能区是动态创建的,我想要访问的控件还不存在。

有一些方法可以访问CheckBox吗?

2 个答案:

答案 0 :(得分:0)

尝试在创建控件后检查控件,(例如)创建控件的事件。创建后,您可以分配单击时将触发的过程,并且将进行检查。希望这会有所帮助。

答案 1 :(得分: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)的简单包装。