Custom control
От: vitagon  
Дата: 15.08.04 12:42
Оценка:
Зовут Виталик,

Помогите начинающему..

в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?

Я теперь долго буду надоедать..

15.08.04 17:29: Перенесено модератором из 'C/C++' — Odi$$ey
Re: Custom control
От: ChipSet2k Россия http://merlinko.com
Дата: 15.08.04 12:48
Оценка:
Здравствуйте, vitagon, Вы писали:

V>Зовут Виталик,


V>Помогите начинающему..


V>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?


V>Я теперь долго буду надоедать..

Можно ловить сообщение WM_PAINT, соотносить его с OnPaint и соотвественно:

void CYourControl::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO: Add your message handler code here
    CRect rect;
    dc.GetClipBox(&rect);//Получаем прямоугольник окна
    CBrush *pBrush;
    pBrush = new CBrush(RGB(255,0,0));//Выбираем цвет кисти
    dc.FillRect(&rect,pBrush); //Собственно заполняется прямоугольник
    
    
    // Do not call CWnd::OnPaint() for painting messages
}

Возможно кто то знает способ побыстрее...
"Всё что не убивает нас, делает нас сильнее..."
от модератора
От: WolfHound  
Дата: 15.08.04 16:16
Оценка:
Здравствуйте, vitagon, Вы писали:

V>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?

Это вопрос не имеет отношения к ни к С ни к С++ по сему является оффтопиком в форуме С/С++. Уточните с помощью чего(инструмент, билиотека...)вы ведете разработку и после этого данная тема будет перенесена в соответствующий форум.
... << RSDN@Home 1.1.4 rev. 142 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Custom control
От: vitagon  
Дата: 15.08.04 21:08
Оценка:
Здравствуйте, vitagon, Вы писали:

V>Зовут Виталик,


V>Помогите начинающему..


V>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?


V>Я теперь долго буду надоедать..



естественно на С++
Re: Custom control
От: eNGy  
Дата: 16.08.04 02:06
Оценка:
Здравствуйте, vitagon, Вы писали:

V>Зовут Виталик,


V>Помогите начинающему..


V>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?


сообщение WM_CTLCOLOR

в .h файле объявляеш переменную
CBrush m_backColor;


задаеш значение
BOOL COneDlg::OnInitDialog()
{
    ………
    m_backColor.CreateSolidBrush(RGB(123,0,123));
    ………
}



возвращаеш свой CBrush, вместо того, что по умолчанию
HBRUSH COneDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    return m_backColor;
}


правда, теперь у всех контролов, находящихся на этом окне, будет установленый тобой цвет фона (у всех оди и тот же), но при желании каждому типу контрола можно будет задать свои цвета.
Re[2]: Custom control
От: vitagon  
Дата: 16.08.04 04:40
Оценка:
Здравствуйте, eNGy, Вы писали:

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


V>>Зовут Виталик,


V>>Помогите начинающему..


V>>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?


NG>сообщение WM_CTLCOLOR


NG>в .h файле объявляеш переменную

NG>
NG>CBrush m_backColor;
NG>


NG>задаеш значение

NG>
NG>BOOL COneDlg::OnInitDialog()
NG>{
NG>    ………
NG>    m_backColor.CreateSolidBrush(RGB(123,0,123));
NG>    ………
NG>}
NG>



NG>возвращаеш свой CBrush, вместо того, что по умолчанию

NG>
NG>HBRUSH COneDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
NG>{
NG>    return m_backColor;
NG>}
NG>


NG>правда, теперь у всех контролов, находящихся на этом окне, будет установленый тобой цвет фона (у всех оди и тот же), но при желании каждому типу контрола можно будет задать свои цвета.



спасибо, брат,
и даже у кнопок и у всех других контролов? а нельзя как-нибудь на UPDATE или INVALIDATE вставить что-нибудь?
или просто брать client rectangle и рисовать bar? а если картинку хочу воткнуть как фон.. какое событие отлавливать? INVALIDATE?
Re[3]: Custom control
От: eNGy  
Дата: 17.08.04 01:00
Оценка:
Здравствуйте, vitagon, Вы писали:

V>спасибо, брат,

V>и даже у кнопок и у всех других контролов? а нельзя как-нибудь на UPDATE или INVALIDATE вставить что-нибудь?
V>или просто брать client rectangle и рисовать bar? а если картинку хочу воткнуть как фон.. какое событие отлавливать? INVALIDATE?

про WM_CTLCOLOR посмотри на Шаг 289 &mdash; Изучаем сообщения на примере WM_CTLCOLOR

про картинку на фоне, можно немного изменить приведенный ранее пример
BOOL COneDlg::OnInitDialog()
{
    ………
    CBitmap* bmp;
    bmp->LoadBitmap(IDB_BITMAP);
    m_backColor.CreatePatternBrush(bmp);
    ………
}

или Как реализовать диалог с фоновым изображением?
Автор(ы): Сергей Пиманов
Дата: 10.06.2001
Re: Custom control
От: Chez Россия  
Дата: 17.08.04 06:48
Оценка:
Здравствуйте, vitagon, Вы писали:
V>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?
Если это CustomControl, то для него надо зарегестрировать класс окна
В МФЦ это Register[Wnd]Class
Вот в этой функции можно указать цвет фона... запросто
Re[2]: Custom control
От: vitagon  
Дата: 18.08.04 03:49
Оценка:
Здравствуйте, Chez, Вы писали:

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

V>>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?
C>Если это CustomControl, то для него надо зарегестрировать класс окна
C>В МФЦ это Register[Wnd]Class
C>Вот в этой функции можно указать цвет фона... запросто

Chez, ты про эту функцию говорил? -> AfxRegisterClass
Re[2]: Custom control
От: Аноним  
Дата: 18.08.04 07:20
Оценка:
Здравствуйте, eNGy, Вы писали:

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


V>>Зовут Виталик,


V>>Помогите начинающему..


V>>в custom control окне хочу поменять цвет background.. Какое событие отловить и как делать фон в окне?


NG>сообщение WM_CTLCOLOR


NG>в .h файле объявляеш переменную

NG>
NG>CBrush m_backColor;
NG>


NG>задаеш значение

NG>
NG>BOOL COneDlg::OnInitDialog()
NG>{
NG>    ………
NG>    m_backColor.CreateSolidBrush(RGB(123,0,123));
NG>    ………
NG>}
NG>



NG>возвращаеш свой CBrush, вместо того, что по умолчанию

NG>
NG>HBRUSH COneDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
NG>{
NG>    return m_backColor;
NG>}
NG>


NG>правда, теперь у всех контролов, находящихся на этом окне, будет установленый тобой цвет фона (у всех оди и тот же), но при желании каждому типу контрола можно будет задать свои цвета.


ага а окрасить кнопку в OnCtlColor не получается!!!
HBRUSH CTestDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (CTLCOLOR_EDIT == nCtlColor)
{
pDC->SetTextColor(RGB(0,0,0));
pDC->SetBkColor(RGB(255,255,255));
return (HBRUSH)::GetStockObject(WHITE_BRUSH);
}

if (CTLCOLOR_STATIC == nCtlColor)
{
pDC->SetBkColor(RGB(255,0,255));
return (HBRUSH)::GetStockObject(GRAY_BRUSH);
}

if (CTLCOLOR_BTN == nCtlColor) //// не пашет!!!!!!!!!!!!!!!!
{
pDC->SetBkColor(RGB(0,0,255));
return (HBRUSH)::GetStockObject(WHITE_BRUSH);
}

pDC->SetBkColor(RGB(127,127,127));

return (HBRUSH)::GetStockObject(GRAY_BRUSH);

}
Re[3]: Custom control
От: Chez Россия  
Дата: 18.08.04 07:28
Оценка:
Здравствуйте, vitagon, Вы писали:

V>Chez, ты про эту функцию говорил? -> AfxRegisterClass

Да
AfxRegisterClass и AfxRegisterWndClass
можно любую использовать
Re[4]: Custom control
От: vitagon  
Дата: 18.08.04 14:51
Оценка:
Здравствуйте, Chez, Вы писали:

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


V>>Chez, ты про эту функцию говорил? -> AfxRegisterClass

C>Да

Спасибо за наколку!
C>AfxRegisterClass и AfxRegisterWndClass
C>можно любую использовать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.