Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Help! Помогите изменить цвет контрола? 
V
    Опции темы
Aids
Дата 29.9.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



не могу поменять цвет кнопки.
Код

    CDC *dc;
    dc=Bt1.GetDC();
    CPen *pPen=new CPen(PS_DASH,10,RGB(0,0,255));
    CBrush *pBrush=new CBrush(RGB(0,0,255));
    dc->SelectObject(pPen);
    dc->SelectObject(pBrush);


не работает. Что сделал не так?
PM MAIL   Вверх
Earnest
Дата 29.9.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



А где ты это делаешь? И что за кнопка?


--------------------
...
PM   Вверх
Aids
Дата 29.9.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Это событие на кнопку Bt0, должна поменять цвет Bt1.
Кнопка из ресурсов:
Код

public:
    CButton Bt0;
public:
    CButton Bt1;


Код

void CCalcDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_BUTTON30, Bt0);
    DDX_Control(pDX, IDC_BUTTON23, Bt1);
    DDX_Control(pDX, IDC_BUTTON22, Bt2);
    DDX_Control(pDX, IDC_BUTTON21, Bt3);
    DDX_Control(pDX, IDC_BUTTON16, Bt4);
    DDX_Control(pDX, IDC_BUTTON15, Bt5);
    DDX_Control(pDX, IDC_BUTTON14, Bt6);
    DDX_Control(pDX, IDC_BUTTON9, Bt7);
    DDX_Control(pDX, IDC_BUTTON8, Bt8);
    DDX_Control(pDX, IDC_BUTTON7, Bt9);
}



PM MAIL   Вверх
Earnest
Дата 29.9.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Тогда все не так. Делаешь, в смысле.
В приведенном коде ты создаешь кисть и выбираешь ее в контекст, вот и все. С чего ты взял, что это заменит цвет кнопки? Откуда система о твоей кисти узнает? Более того, кисть накроется сразу по выходу из функции, где ты ее создаешь.
Чтобы сделать кнопку нестандартного цвета, нужно сделать ее owner-draw, иначе никак. Вот в коде рисования кнопки ты можешь создать кисть, выбрать ее в контекст и нарисовать кнопку. Вроде недавно была тема по поводу рисования owner-draw кнопок, поищи.



--------------------
...
PM   Вверх
Alca
Дата 29.9.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



http://www.codeproject.com/KB/buttons/oddbutton.aspx

Добавлено через 52 секунды
http://www.codeproject.com/KB/buttons/nati...32xpthemes.aspx

Добавлено через 1 минуту и 4 секунды
http://www.codeproject.com/info/search.asp...tton&sbo=kw


--------------------
PM WWW ICQ Skype Jabber   Вверх
Aids
Дата 29.9.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Earnest
Цитата

Откуда система о твоей кисти узнает? 

Какое событие надо вызвать, чтобы система узнала о новом контексте? Или какое обработать?
Цитата

Более того, кисть накроется сразу по выходу из функции, где ты ее создаешь.


почему накроется. я ведь память выделяю из кучи, а не из стека.
Код

CPen *pPen=new CPen(PS_DASH,10,RGB(0,0,255));

я лиш потеляю указатель на pPen

Это сообщение отредактировал(а) Aids - 29.9.2009, 14:33
PM MAIL   Вверх
Earnest
Дата 29.9.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Aids @  29.9.2009,  15:30 Найти цитируемый пост)
Какое событие надо вызвать, чтобы система узнала о новом контексте? Или какое обработать?

Никакое. В смысле нет такого способа.
Цитата(Aids @  29.9.2009,  15:30 Найти цитируемый пост)
почему накроется. я ведь память выделяю из кучи, а не из стека.

Да, верно, не заметила.

Но суть это не меняет. Тебе нужно самому рисовать кнопку, that's it. 
Alca, кстати, тебе примеров накидал. Так что изучай.


--------------------
...
PM   Вверх
Aids
Дата 29.9.2009, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



ничего не пойму. мне что придётся на подобии CBitmapButton класса использовать и прорисовывать как минимум два состояния нажатия и отжатия? Можно же как то подругому наверное? Ведь на форме же можно рисовать! так и на кнопке можно!
PM MAIL   Вверх
Earnest
Дата 29.9.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(Aids @  29.9.2009,  15:57 Найти цитируемый пост)
мне что придётся на подобии CBitmapButton класса использовать и прорисовывать как минимум два состояния нажатия и отжатия

Именно.

Цитата(Aids @  29.9.2009,  15:57 Найти цитируемый пост)
 Ведь на форме же можно рисовать! так и на кнопке можно! 

Можно, для этого и придуман стиль OwnerDraw. А ты думаешь в OnPaint рисовать будет проще? Ничего подобного. DrawItem тебе все расскажет: в каком состоянии кнопка (нажата\отжата, в фокусе или нет). А в OnPaint тебе самому этим заниматься придется. Ну не поддерживает стандартная кнопка изменение фона, всегда рисует стандартной кистью, наплевав на все. MSDN читай.

В принципе, если используется манифест и темы, то вроде кнопка реагирует на CUSMOMDRAW, тогда чуть-чуть меньше самому рисовать - можно писать только то, что нестандартно. Но точно не знаю - вроде где-то недавно промелькивало.
Но поскольку кнопка - один из самых простых для рисования контролов, то я бы не стала париться. Все рисование - фон, рамка и текст. 




--------------------
...
PM   Вверх
Aids
Дата 1.10.2009, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 25.8.2009

Репутация: нет
Всего: нет



Earnest
А если мне надо поменять цвет шрифта у надписи кнопки, то её тоже придётся рисовать.
PM MAIL   Вверх
Earnest
Дата 1.10.2009, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Да, нажимаемые кнопки поддаются только owner-draw. Но это очень просто, как уже было сказано.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.