Как определить текущее состояние кнопки в CToolbar
|
Хотя MFC и предоставляет полезный и простой способ хранения состояния меню и/или кнопок панели инструментов совместно в CControlBar, однако, простого способа определения текущего состояния кнопок не существует.
Для нахождения текущего состояния команд меню или кнопок панели интструментов в классе, наследованном от CControlBar, можно использовать следующий кусок кода: UINT iButtonID; UINT iButtonStyle; int iButtonImage;
// Если Toolbar не основан на значении константы по умолчанию // "AFX_IDW_TOOLBAR", то замените константу Toolbar на нужное // значение.
// Если следующая строка вызывается из фреймового окна (Frame Window) // то удалите "GetParentFrame()->": CToolBar* pBar = (CToolBar*)GetParentFrame()->GetDescendantWindow(AFX_IDW_TOOLBAR);
// Если данная часть кода вызывается из сгенерированной визардом // (AppWizard) функции фреймового окна (Frame Window) в Visual C++ 4.0, // то замените предыдущую строку на следующую. Повторно вызовите, // чтобы фреймовое окно, наследованное от CMDIFrameWnd и // сгенерированное визардом (AppWizard) имело переменную-член // m_wndToolBar для CToolBar. CToolBar* pBar = &m_wndToolBar;
if (pBar != NULL) {
// в следующей строке используйте нужный ID кнопки: int iButtonIndex = pBar->CommandToIndex(ID_MY_BUTTON);
pBar->GetButtonInfo(iButtonIndex, iButtonID, iButtonStyle, iButtonImage);
// Следующий код проверяет все возможные состояния. // На практике, проверяйте только те состояния, которые нужны.
if (iButtonStyle & TBBS_PRESSED) // Кнопка нажата else if (iButtonStyle & (TBBS_CHECKED & TBBS_DISABLED)) // Кнопка нажата и недоступна else if (iButtonStyle & TBBS_DISABLED) // Кнопка запрещена else if (iButtonStyle & TBBS_INDETERMINATE) // Неопределённое состояние кнопки else if (iButtonStyle & TBBS_CHECKED) // Кнопка отмечена (Checked) else // Кнопка отпущена и доступна
} |