Поделиться через


Использование диалоговой панели с элементом управления главной панели

Как упомянуто в Элементы управления "Главная панель" и полосы, каждая полоса может содержать только одно дочернее окно (или элемент управления). Это может быть ограничением, если требуется наличие более чем одно дочернее окно на полосу. Ошибка удобной создать ресурс диалоговой панели с несколькими элементами управления, а затем добавить полоса главной панели (с диалоговую панель) к элементу управления "Главная панель".

Обычно при необходимости полосу диалоговой панели быть прозрачными, необходимо установить для расширенный стиль WS_EX_TRANSPARENT для объекта диалоговой панели. Однако поскольку WS_EX_TRANSPARENT имеет некоторые проблемы с правильно рисование фон диалоговой панели, потребуется дополнительная работа нижняя для достижения желательного результата.

Следующая процедура подробно шаги, которые достигл прозрачности без использования расширенных стилей WS_EX_TRANSPARENT.

Реализовать прозрачную диалоговую столбец на полосе главной панели

  1. С помощью Добавьте диалоговое окно класса, добавьте новый класс (например, CMyDlgBar), реализует этот объект диалоговой панели.

  2. Добавьте обработчик для сообщения WM_ERASEBKGND.

  3. В новый обработчик измените существующий код в соответствии с следующим образом:

    BOOL CMyDlgBar::OnEraseBkgnd(CDC* pDC)
    {
        CWnd* pParent = GetParent();
        ASSERT_VALID(pParent);
        CPoint pt(0, 0);
        MapWindowPoints(pParent, &pt, 1);
        pt = pDC->OffsetWindowOrg(pt.x, pt.y);
        LRESULT lResult = pParent->SendMessage(WM_ERASEBKGND,
            (WPARAM)pDC->m_hDC, 0L);
        pDC->SetWindowOrg(pt.x, pt.y);
        return (BOOL)lResult;
    }
    
  4. Добавьте обработчик для сообщения WM_MOVE.

  5. В новый обработчик измените существующий код в соответствии с следующим образом:

    void CMyDlgBar::OnMove(int x, int y)
    {
       UNREFERENCED_PARAMETER(x);
       UNREFERENCED_PARAMETER(y);
    
       Invalidate();
    }
    

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

См. также

Ссылки

Использование CReBarCtrl

Основные понятия

Элементы управления (MFC)