Здравствуйте 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
и. т.д.
Здравствуйте AlexRb, Вы писали что можете привести пример.
очень хотелось-бы на примерах которые работают всегда лучше учиться
Здравствуйте JC, Вы писали:
JC>Здравствуйте AlexRb, Вы писали что можете привести пример.
JC>очень хотелось-бы на примерах которые работают всегда лучше учиться
JC>
Извиняюсь за долгое молчание, в командировку отослали.
Лучше поздно чем никогда.
Я тут на досуге один пример в MSDN намыл CtrlTest называется.
По поисковику в MSDN легко находится. Там описано использование bitmap button.
идея такова: натянуть мапу с рамкой на кнопку и не зниматься отрисовкой
поведения кнопки. Может подойдет... Надеюсь не сильно припоздал.