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


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

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

Обычно при необходимости полосы диалоговой панели быть прозрачными, то необходимо задать минимум расширенный стиль 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)