стиль сплиттера как рамка окна
От: mitschman  
Дата: 07.03.08 13:45
Оценка:
Поправлено форматирование текста. — 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' — Кодт
Re: стиль сплиттера как рамка окна
От: Hawk Россия  
Дата: 11.03.08 18:02
Оценка: 3 (1)
Здравствуйте, 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 );
Re[2]: стиль сплиттера как рамка окна
От: mitschman  
Дата: 12.03.08 18:07
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, Hawk, Вы писали:

H>Посмотри в сторону:

H>CDC::GetHalftoneBrush(), CDC::PatBlt().

— то, что нужно! Спасибо огромное!)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.