Обнаружение, когда изменилось состояние стыковки CControlBar - PullRequest
1 голос
/ 07 февраля 2009

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

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

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

1 Ответ

3 голосов
/ 07 февраля 2009

Вы можете переопределить виртуальную функцию 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            
        }
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...