我有一个带有三个标签的功能区应用程序。在OnCreate事件中,我需要检查应用程序打开时显示的选项卡上没有的CheckBox。
问题是我无法检查CheckBox。当我打开包含它的选项卡时,取消选中CheckBox。我所知道的是,因为功能区是动态创建的,我想要访问的控件还不存在。
有一些方法可以访问CheckBox吗?
答案 0 :(得分:0)
尝试在创建控件后检查控件,(例如)创建控件的事件。创建后,您可以分配单击时将触发的过程,并且将进行检查。希望这会有所帮助。
答案 1 :(得分:0)
在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)的简单包装。