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