Обнаружение изменения состояния стыковки CControlBar

Я использую класс, производный от CControlBar, и я хотел бы определить, когда изменилось состояние стыковки CControlBar (т. е. стыковка с вертикального на горизонтальное или переход в плавающий режим).

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

Может ли кто-нибудь указать мне в правильном направлении?


person fhe    schedule 07.02.2009    source источник


Ответы (1)


Вы можете переопределить виртуальную функцию CControlBar::OnBarStyleChange для обнаружения изменений в стиле панели управления (значения CBRS_XXX — подробности см. в заголовочном файле <afxres.h>).

Чтобы определить, является ли панель управления плавающей или закрепленной, проверьте стиль CBRS_FLOATING. Чтобы проверить горизонтальную/вертикальную ориентацию, используйте стили CBRS_ORIENT_HORZ и CBRS_ORIENT_VERT.

Итак, используя CToolBar (который является производным от CControlBar) в качестве примера:

class CMyToolBar : public CToolBar {
public:
    virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
};

void CMyToolBar::OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle)
{
    // Call base class implementation.
    CToolBar::OnBarStyleChange(dwOldStyle, dwNewStyle);

    // Use exclusive-or to detect changes in style bits.
    DWORD changed = dwOldStyle ^ dwNewStyle;

    if (changed & CBRS_FLOATING) {
        if (dwNewStyle & CBRS_FLOATING) {
            // ToolBar now floating
        }
        else {
            // ToolBar now docked
        }
    }

    if (changed & CBRS_ORIENT_ANY) {
        if (dwNewStyle & CBRS_ORIENT_HORZ) {
            // ToolBar now horizontal
        }
        else if (dwNewStyle & CBRS_ORIENT_VERT) {
            // ToolBar now vertical            
        }
    }
}

Надеюсь, это поможет!

person ChrisN    schedule 07.02.2009
comment
Это очень помогает! Спасибо, что так быстро ответили и за пример - это просто здорово :-) - person fhe; 07.02.2009