Использование диалоговой панели с элементом управления главной панели
Как упоминание в элементах управления rebar и Bands, каждая группа может содержать только одно дочернее окно (или элемент управления). Это может быть ограничением, если вы хотите иметь несколько дочерних окон на группу. Удобное решение — создать ресурс панели диалоговых окон с несколькими элементами управления, а затем добавить полосу перестроения (содержащую панель диалоговых окон) в элемент управления перестроения.
Как правило, если вы хотите, чтобы полоса диалоговых строк отображалась прозрачно, вы задали бы 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 в родительское окно и заставляя перенаправку при каждом перемещении объекта панели диалоговых окон.