Использование диалоговую панель с элементом управления " Главная панель
Как упоминалось в Элементы управления "Главная панель "и ", каждый диапазон может содержать только одно дочернее окно (элемент управления).Это может быть ограничением, если необходимо предоставить большее, чем одно дочернее окно в диапазон.Удобное решение создать ресурс диалоговой панели с несколькими элементами управления, а затем добавить диапазон, содержащий область главной панели (диалоговую) к элементу управления " Главная панель.
Обычно при необходимости полосы диалоговой панели быть прозрачными, то необходимо задать минимум расширенный стиль WS_EX_TRANSPARENT для объекта диалоговой панели.Однако поскольку WS_EX_TRANSPARENT имеет некоторые проблемы с правильно рисования фона диалоговой панели, потребуется внести меньшее дополнительную работу, чтобы добиться.
Следующие сведения процедуры шаги, необходимые для достигл прозрачности без использования WS_EX_TRANSPARENT дополнения стиль.
Реализовать прозрачная диалоговую область в полосе главной панели
Использование Диалоговое окно Добавление класса добавьте новый класс (например, CMyDlgBar), который реализует объект диалоговой панели.
Добавьте обработчик для сообщения WM_ERASEBKGND.
В новом обработчике, измените существующий код следующим образом:
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; }
Добавьте обработчик для сообщения WM_MOVE.
В новом обработчике, измените существующий код следующим образом:
void CMyDlgBar::OnMove(int x, int y) { UNREFERENCED_PARAMETER(x); UNREFERENCED_PARAMETER(y); Invalidate(); }
Новые обработчики имитируют прозрачность диалоговой панели, переадресованы сообщение WM_ERASEBKGND родительского окна и принудительное обновление при каждом перемещении объекта диалоговой панели.