Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.136.97.64] |
|
Сообщ.
#1
,
|
|
|
Есть кнопка IDC_BUTTON1, которой соответствует переменная m_IDC_BUTTON1 типа CButton.
Для этой кнопки я изменил высоту и ширину текста в функции CMyProgramDlg::OnInitDialog : CMyProgramDlg::OnInitDialog() { //... memset(&lf,0,sizeof(lf); lf.lfHeight = 25; lf.lfWidth = 10; lf.lfWeight = FW_BOLD; lf.lfCharSet = ANSI_CHARSET; lf.lfOutPrecision = OUT_DEFAULT_PRECIS; lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf.lfQuality = PROOF_QUALITY; lf.lfPitchAndFamily = VARIABLE_PITCH|FF_ROMAN; wcscpy(lf.lfFaceName,L"MS sans Serif"); pfont = new FOnt(); pfont->CreateFontIndirect(&lf); m_IDC_BUTTON1.SetFont(pfont); return TRUE; } Это работает--текст в кнопке отображается нужным размером. Но я захотел также изменить цвет фона в этой кнопке--например, на RGB(12,149,210). Цвет текста я оставил прежним--чёрным ( RGB(0,0,0) ). В связи с этим я написал функцию: HBRUSH CMyProgramDlg::OnCtlColor(CDC *pDC, CWnd *pWnd, UITN nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC,pWnd,nCtlColor); if (pWnd->GetDlgCtrlID()==IDC_BUTTON1) { pDC->SetBkColor(RGB(12,149,210)); pDC->SetBkMode(TRANSPARENT); } } Однако у меня не происходит смена цвета фона кнопки--фон остаётся прежним. Как мне решить эту проблему--чтобы у меня изменялся цвет фона кнопки, но при этом цвет текста оставался чёрным и текст был того размера, который я задал? |
Сообщ.
#2
,
|
|
|
Цитата erslgoeirjh @ Как мне решить эту проблему--чтобы у меня изменялся цвет фона кнопки, но при этом цвет текста оставался чёрным и текст был того размера, который я задал? нарисовать кнопку заново ну можно посмотреть еще в сторону CBitmapButton... |
Сообщ.
#3
,
|
|
|
С изменением цвета кнопки я разобрался:
void CMyButton::OnPaint() { CString strText; LOGFONT lf; memset(&lf,0,sizeof(lf)); lf.lfHeight = 25; lf.lfWidth = 10; lf.lfWeight = FW_BOLD; lf.lfCharSet = ANSI_CHARSET; lf.lfOutPrecision = OUT_DEFAULT_PRECIS; lf.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf.lfQuality = PROOF_QUALITY; lf.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; wcscpy(lf.lfFaceName,L"MS Sans Serif"); CFont *pfont = new CFont(); pfont->CreateFontIndirect(&lf); CDC *pDC = this->GetDC(); RECT rect; GetClientRect(&rect); GetWindowText(strText); HBRUSH hBrush = CreateSolidBrush(RGB(141,179,226)); pDC->SelectObject(hBrush); pDC->Rectangle(rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top); pDC->SetBkColor(RGB(141,179,226)); pDC->SetTextColor(RGB(255,255,255)); pDC->SelectObject(pfont); pDC->DrawText(strText,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER); } Но я решил пойти дальше--при нажатии на эту кнопку (то есть при нажатии левой кнопки "мыши") граница этой кнопки должна выделяться жирной линией, а при отпускании левой кнопки "мыши" граница кнопки должна восстанавливаться. Для этого я написал: void CMyButton::OnLButtonDown(UINT nFlags, CPoint point) { CButton::OnLButtonDown(nFlags,point); HPEN hPen = CreatePen(PS_SOLID,2,RGB(0,0,0)); // жирная чёрная сплошная линия RECT rect; GetClientRect(&rect); pDC->MoveTo(rect.left,rect.top); pDC->LineTo(rect.right,rect.top); pDC->LineTo(rect.right,rect.bottom); pDC->LineTo(rect.left,rect.bottom); pDC->LineTo(rect.left,rect.top); pDC->SetBkColor(RGB(255,255,255)); pDC->SetTextColor(RGB(255,255,255)); RedrawWindow(); } При нажатии левой кнопки "мыши" это работает--граница кнопки выделяется чёрной жирной сплошной линией. Но как сделать так, чтобы при отпускании левой кнопки "мыши" восстанавливалась бы граница кнопки в первоначальном виде? |
Сообщ.
#4
,
|
|
|
Думаю, тебе достаточно в обработчике WM_LBUTTONUP, OnLButtonUp, просто сделать Invalidate() и UpdateWindow(), тогда будет вызвана OnPaint() и твоя кнопка перерисуется.
|