Поправлено форматирование текста. — SchweinDeBurg
Если в винде стоит настройка "Перетаскивать содержимое окна при перетаскивании", то при перетаскивании окна двигается только рамка, причем она становится серего цвета, с дырочками(этакая имитация полупрозрачности?), или когда перетаскиваешь сплиттеры в VisualStudio — такой же эффект.
Вопрос в следующем — я создал свой сплиттер на основе CStatic, переопределил его отрисовку вот так —
void CSizeSplitter::OnPaint()
{
CPaintDC dc(this);
if(GetCapture() == this)
{
dc.FillSolidRect(0, 0, GetControlRect().Width(), GetControlRect().Height(), ::GetSysColor(COLOR_3DDKSHADOW));
dc.Draw3dRect(0, 0, GetControlRect().Width(), GetControlRect().Height(), ::GetSysColor(COLOR_3DHILIGHT), ::GetSysColor(COLOR_3DDKSHADOW));
}
else
{
dc.FillSolidRect(0, 0, GetControlRect().Width(), GetControlRect().Height(), ::GetSysColor(COLOR_3DFACE));
dc.Draw3dRect(0, 0, GetControlRect().Width(), GetControlRect().Height(), ::GetSysColor(COLOR_3DHILIGHT), ::GetSysColor(COLOR_3DDKSHADOW));
}
}
все прекрасно, рисуется 3D-прямоугольник системными цветами если сплиттер просто висит на форме, и темный(тоже системный), если сплиттер перемещается допустим мышкой(тогда на нем установлен Capture).
Но! Хотелось бы при перетаскивании отображать его в таком же стиле, как описано в начале — как это реализовать?

— может есть способ отрисовки на CDC *dc, что нибудь типо DrawXXXRect, или наоборот, за такую отрисовку отвечает CBrush *br, а потом этот br использовать при отрисовке на dc?
Шарился на гугле — ничего полезного не нашел...может я неправильно вопрос задавал?...
11.03.08 17:48: Перенесено модератором из 'Пользовательский интерфейс: проектирование, usability' — Кодт
Здравствуйте, mitschman, Вы писали:
M>Но! Хотелось бы при перетаскивании отображать его в таком же стиле, как описано в начале — как это реализовать?
— может есть способ отрисовки на CDC *dc, что нибудь типо DrawXXXRect, или наоборот, за такую отрисовку отвечает CBrush *br, а потом этот br использовать при отрисовке на dc?
Посмотри в сторону:
CDC::GetHalftoneBrush(),
CDC::PatBlt().
Например, вот как рисуется линия сплиттера, шириной 4 пиксела, похожая на ту, что рисует студия (в режиме MM_TEXT):
CBrush* pBrush = CDC::GetHalftoneBrush();
CBrush* pBrushOld = pDC->SelectObject( pBrush );
int left = 50;
int top = 0;
int height = 200;
pDC->PatBlt( left, top, 4, height, PATINVERT );
pDC->SelectObject( pBrushOld );
Удалено избыточное цитирование. — SchweinDeBurg
Здравствуйте, Hawk, Вы писали:
H>Посмотри в сторону:
H>CDC::GetHalftoneBrush(), CDC::PatBlt().
— то, что нужно! Спасибо огромное!)