Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > как изменить цвет из своего класса


Автор: Coocky 9.3.2004, 17:31
Подскажите как изменить цвет диалогового окна из своего
класса.? А кнопки отдельно?Можно ли это? confused.gif ( любителей SetDialogBkColor() в InitInstance()!! просьба не беспокоить)

Автор: Nastya 9.3.2004, 17:56
1. Можно в классе порожденном от WinApp написать метод, котрый вызывает
SetDialogBkColor() -
2. При мпомощи SetWindowLong, поменять кисть которой закрашивается окно
3. Че-то еще наверняка можно придумать smile.gif

Автор: mr.DUDA 10.3.2004, 11:48
OnPaint переопределить smile.gif

Автор: Step 10.3.2004, 11:49
1. обявить нужные кисти, например
Код
CBrush a;

2. создать кисть в OnInitialDiliog, например
Код
a.CreateSolidBrush(RGB(0, 255, 155));

3. создать обработчик сообщени WM_CTLCOLOR
4. наполнить обработчик
Код
HBRUSH CFdsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (nCtlColor==CTLCOLOR_STATIC){ // раскрашивает статики
 return  a;
}
if (nCtlColor==CTLCOLOR_EDIT){  // раскрашивает поля ввода
 return  a;
}
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);;
}

CTLCOLOR_ можно посмотреть в мсдн по OnCtlColor

Внимание
1. если вам необходимо раскрашивать каждый отдельное поле ввода то необходимо создать столько кистей сколько будет вариантов раскрасски после чего
Код
if (nCtlColor==CTLCOLOR_EDIT){  // раскрашивает поля ввода
вот сюда вставить проверку окна т.е. сравнить pWnd с тем объектом который хотите раскрашивать и возвращать соответсвующии кисти
Код

 return  a;
}

2. многи элементы раскрашиваються по своим методам, так например кнопку так раскрасить трудно, для раскраски таких элементов, нужно либо по возиться с элементом, либо установить свойство ownerdraw, тогда раскрасска элемента ляжет на эту функцию, но и все моменты разрисовки элементов тоже ляжет на вас

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)