HBRUSH CWidth::OnCtlColor(CDC* pDC,CWnd *pWnd,UINT nCtlColor)
{
//k->CreateSolidBrush(RGB(0,0,0));
if (nCtlColor==CTLCOLOR_EDIT)
{
pDC->SetBkColor(m_R);
// return k;
}
return CWidth::OnCtlColor(pDC,pWnd,nCtlColor);
}
Изменение фона Edit-ов, как сделать
Код:
В обработчике нажатия кнопки посылаем
сообщение:
Код:
void CWidth::OnButton1()
{
CColorDialog dlg;
if(dlg.DoModal() == IDOK)
{
COLORREF rgb = dlg.GetColor();
m_R=rgb;
SendMessage(WM_CTLCOLOR,NULL,NULL);
}
// TODO: Add your control notification handler code here
}
{
CColorDialog dlg;
if(dlg.DoModal() == IDOK)
{
COLORREF rgb = dlg.GetColor();
m_R=rgb;
SendMessage(WM_CTLCOLOR,NULL,NULL);
}
// TODO: Add your control notification handler code here
}
и прога вылетает,в чем дело, прогеры сжальтесь.
Код:
#pragma comment(lib, "gdi32.lib")
...
case WM_CTLCOLOREDIT:{
//lParam - HWND, wParam - HDC
if(lParam == hEdit){
SetTextColor(wParam, RGB(255,0,0);
SetBkColor(wParam, RGB(0,0,255));
}
break;
}
...
case WM_CTLCOLOREDIT:{
//lParam - HWND, wParam - HDC
if(lParam == hEdit){
SetTextColor(wParam, RGB(255,0,0);
SetBkColor(wParam, RGB(0,0,255));
}
break;
}
А так не пойдет?
Код:
#pragma comment(lib, "gdi32.lib")
...
case WM_CTLCOLOREDIT:{
//lParam - HWND, wParam - HDC
if(lParam == hEdit){
SetTextColor(wParam, RGB(255,0,0);
SetBkColor(wParam, RGB(0,0,255));
}
break;
}
...
case WM_CTLCOLOREDIT:{
//lParam - HWND, wParam - HDC
if(lParam == hEdit){
SetTextColor(wParam, RGB(255,0,0);
SetBkColor(wParam, RGB(0,0,255));
}
break;
}
Где этот код писать? (можно поподробней)
Код:
HBRUSH Симя_диалога::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// Если текущий элемент текстовое поле редактора
if(nCtlColor == CTLCOLOR_EDIT && pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
delete brush;
// Создание новой кисти
brush = new CBrush;
brush->CreateSolidBrush(bkColor);
// Установка цвета фона "под буквами"
pDC->SetBkColor(bkColor);
// Установка цвета текста
pDC->SetTextColor(textColor);
// "Подменяем" кисть (возвращаем свою)
return *brush;
}
return hbr;
}
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// Если текущий элемент текстовое поле редактора
if(nCtlColor == CTLCOLOR_EDIT && pWnd->GetDlgCtrlID() == IDC_EDIT1)
{
delete brush;
// Создание новой кисти
brush = new CBrush;
brush->CreateSolidBrush(bkColor);
// Установка цвета фона "под буквами"
pDC->SetBkColor(bkColor);
// Установка цвета текста
pDC->SetTextColor(textColor);
// "Подменяем" кисть (возвращаем свою)
return *brush;
}
return hbr;
}
В обработчике нажатия кнопки
Код:
void Cимя_диалога::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
CColorDialog colDlg;
if(colDlg.DoModal() == IDOK)
{
// Изменение цвета фона
bkColor = colDlg.GetColor();
// Перерисовка текстового поля со стиранием фона
Invalidate(true);
}
}
{
// TODO: Add your control notification handler code here
CColorDialog colDlg;
if(colDlg.DoModal() == IDOK)
{
// Изменение цвета фона
bkColor = colDlg.GetColor();
// Перерисовка текстового поля со стиранием фона
Invalidate(true);
}
}
В хидер-файле добавляешь переменные
Код:
...
CBrush* brush;
COLORREF textColor, bkColor;
...
CBrush* brush;
COLORREF textColor, bkColor;
...
В конструкторе пишешь
Код:
Cимя_диалога::CHelloWorldDlg(CWnd* pParent /*=NULL*/)
: CDialog(CHelloWorldDlg::IDD, pParent)
, brush(NULL)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// Начальная инициализация
brush = new CBrush;
textColor = 0; // Черный цвет
bkColor = RGB(127, 127, 127); // Белый цвет
// Создание "сплошной" кисти
brush->CreateSolidBrush(bkColor);
}
: CDialog(CHelloWorldDlg::IDD, pParent)
, brush(NULL)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// Начальная инициализация
brush = new CBrush;
textColor = 0; // Черный цвет
bkColor = RGB(127, 127, 127); // Белый цвет
// Создание "сплошной" кисти
brush->CreateSolidBrush(bkColor);
}
По умолчанию стоит серый цвет фона тектового поля,после нажатия кнопки,выбираешь цвет и он устанавливается для фона текстового поля.