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

и. т.д.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.