Рисование на кнопке
От: JC  
Дата: 21.07.02 20:03
Оценка:
Как нарисовать прямоугольник на кнопке?
— Если только OwnerDraw, то ещё несколько вопросов:
— Как присвоить функцию событию OnPaint(или другой)
— Как узнать системные цвета(BtnFace,BtnLight,BtnShadow и др.)
Re: Рисование на кнопке
От: AlexRb  
Дата: 22.07.02 04:07
Оценка:
Здравствуйте JC, Вы писали:

JC>Как нарисовать прямоугольник на кнопке?


В НУЖНОМ МЕСТЕ получить CDC кнопки и рисовать...
Есть ли это место и/или как это делается пока не знаю, может кто другой поможет.

JC> — Если только OwnerDraw, то ещё несколько вопросов:


если без него никак, то:

JC> — Как присвоить функцию событию OnPaint(или другой)


1. Если кнопка лежит на диалоге и ей выставлено свойство Owner Draw, то в диалоге:

void CTestDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS) 
{
    // TODO: Add your message handler code here and/or call default
    if (nIDCtl == IDC_BT_TEST) // IDC_BT_TEST - идентификатор кнопки
    {
          ::FrameRect(lpDIS->hDC, lpDIS->rcItem, (HBRUSH)::GetStockObject(BLACK_BRUSH));
    }
    
    CDialog::OnDrawItem(nIDCtl, lpDIS);
}


2. В случае собственного класса кнопки и динамического создания:

void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
        ::FrameRect(lpDIS->hDC, lpDIS->rcItem, (HBRUSH)::GetStockObject(BLACK_BRUSH));
}


Так же, если необходимо, придется рисовать самому и Focus Rect, и состояние нажатия...
тут поможет:
lpDIS->itemState;

Для рисования объема:
Draw3dRect(...);


Если нужен будет код, то обращайтесь.

JC> — Как узнать системные цвета(BtnFace,BtnLight,BtnShadow и др.)


Функция:

DWORD GetSysColor(
  int nIndex   // display element
);

где nIndex:

COLOR_BTNFACE
COLOR_BTNHILIGHT
COLOR_BTNHIGHLIGHT
COLOR_BTNSHADOW

и. т.д.
Re[2]: Рисование на кнопке
От: JC  
Дата: 22.07.02 08:04
Оценка:
Здравствуйте AlexRb, Вы писали что можете привести пример.
очень хотелось-бы на примерах которые работают всегда лучше учиться

Re[3]: Рисование на кнопке
От: AlexRb  
Дата: 01.08.02 09:45
Оценка:
Здравствуйте JC, Вы писали:

JC>Здравствуйте AlexRb, Вы писали что можете привести пример.

JC>очень хотелось-бы на примерах которые работают всегда лучше учиться

JC>


Извиняюсь за долгое молчание, в командировку отослали.
Лучше поздно чем никогда.
Я тут на досуге один пример в MSDN намыл CtrlTest называется.
По поисковику в MSDN легко находится. Там описано использование bitmap button.
идея такова: натянуть мапу с рамкой на кнопку и не зниматься отрисовкой
поведения кнопки. Может подойдет... Надеюсь не сильно припоздал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.