Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 252
от 08.05.2003, 22:50

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 756
Отправлено ответов: 1653
Активность: 218.6 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Morgion
Статус: Начальный
Общий рейтинг: 110.22
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108
[Подробней >>]
Avl2k
Статус: Опытный
Общий рейтинг: 123.98
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 752. Здравствуйте, эксперты ! Как сделать, чтоб на кнопке одновременно были и картинка и текст. Использую... (ответов: 3)

Вопросов: 1, ответов: 3


 Вопрос № 752

Здравствуйте, эксперты !
Как сделать, чтоб на кнопке одновременно были и
картинка и текст. Использую VC++ c MFC.
(Пользуясь случаем хочу поблагодарить всех экспертов за
их бескорыстную помощь. Я уже второй год задаю вопросы.
Ответы мне очень помогают. Спасибо что вы есть.)



Вопрос отправлен: 05.05.2003, 22:40
Отправитель: IceWINteR (brothers@atnet.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Morgion

Приветствую Вас, IceWINteR!
Способов много. Используй стиль owner draw. Или наследуй CButton. В порождённом классе добавляещь обработку сообщения WM_PAINT (может и другого) и рисуй что тебе хочется. А потом вызываешь SubclassDlgItem- и всё будёт работать!


Приложение:

Ответ отправлен: 06.05.2003, 11:45
Отправитель: Morgion


Отвечает vitya

Доброе время суток, IceWINteR!
Наследуй класс от CButton. Храни в нем картинку, текст сам по себе будет в кнопке.
И надо Overload - OnDrawItem - там рисуешь картинку и текст. Потом когда ставишь контрол на диалог - создаешь переменную для него - и тип ставишь в свой класс. и еще в ее пропетисах поставь галочку owner draw.

Ответ отправлен: 06.05.2003, 09:15
Отправитель: vitya


Отвечает Avl2k

Доброе время суток, IceWINteR!
Поскольку стандартный контрол Microsoft'а может рисовать либо картинку, либо текст, уже который год программисты всего мира решают эту нетривиальную задачу :)))
С применением MFC действовать надо примерно так:
1. Нарисовать в диалоге PushButton, проставить нужный текст и флажок OwnerDraw.
2. Добавить ClassWizard'ом переменную типа CButton, а затем исправить тип на CMyButton:
class CMyButton: public CButton
{
public:
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
};
Простейшая отрисовка (если нужно отрисовывать состояние Disabled, то можно использовать функцию DrawState):
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
ASSERT(!(lpDrawItemStruct->itemState & ODS_DISABLED));
bool bIsPushed = lpDrawItemStruct->itemState & ODS_SELECTED;
UINT ustyle="DFCS_BUTTONPUSH;"
if (bIsPushed)
uStyle |= DFCS_PUSHED;
CRect rc = lpDrawItemStruct->rcItem;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->DrawFrameControl(rc, DFC_BUTTON, uStyle|DFCS_ADJUSTRECT);
pDC->SaveDC();
if( bIsPushed ) { rc.left += 2; rc.top += 2; }
pDC->IntersectClipRect(rc);
// Get the button's text.
CString strText;
GetWindowText(strText);
pDC->DrawIcon(rc.TopLeft(), AfxGetApp()->LoadStandardIcon(IDI_EXCLAMATION));
rc.left += GetSystemMetrics( SM_CXICON ) + 5;
pDC->SetTextColor(RGB(0,0,0));
pDC->DrawText(strText, rc, DT_SINGLELINE|DT_VCENTER|DT_CENTER|DT_NOCLIP);
pDC->RestoreDC(-1);
}
С уважением, Avl2k.

Ответ отправлен: 06.05.2003, 11:43
Отправитель: Avl2k



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (38)
C / C++ (29)
Perl (7)
Delphi (15)
Pascal (27)
Basic / VBA (12)
Java / JavaScript (10)
PHP (6)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (28)
"Железо" (26)
Поиск информации (12)
Администратору
Windows NT/2000/XP (16)
Linux / Unix (9)
Юристу
Гражданское право (8)
Семейное право (4)
Трудовое право (5)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2003 Россия, Москва. Авторское право: RusFAQ.ru

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное