1. 程式人生 > >vs2008 動態設定Edit Control控制元件的背景及字型顏色

vs2008 動態設定Edit Control控制元件的背景及字型顏色

1.新建一個基於對話方塊的應用程式,在對話方塊上新增一個Edit控制元件和三個Radio控制元件
2.修改Radio控制元件的ID分別為:IDC_RAD_RED、IDC_RAD_GREED、IDC_RAD_BLUE,名稱對應修改為red、green、blue
3.向對話方塊對應的類中新增如下成員變數:
public:
COLORREF m_colorEditText; // edit控制元件的字型顏色
COLORREF m_colorEditBK; // edit控制元件的背景顏色
CBrush* m_pEditBkBrush;
並在建構函式中初始化:
CColorEditDlgDlg::CColorEditDlgDlg(CWnd* pParent )
: CDialog(CColorEditDlgDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CColorEditDlgDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

m_colorEditText = RGB(255,255,255);
m_colorEditBK = RGB(0,0,0);
m_pEditBkBrush

= new CBrush(RGB(0,0,0));
}
4.向對話方塊新增WM_CTLCOLOR和WM_DESTORY訊息的響應函式如下:
HBRUSH CColorEditDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor) {

case CTLCOLOR_EDIT:
case CTLCOLOR_MSGBOX:
// Set color to green on black and return the background brush.
pDC->SetTextColor(m_colorEditText);
pDC->SetBkColor(m_colorEditBK);
return (HBRUSH)(m_pEditBkBrush
->GetSafeHandle());

default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}


}

void CColorEditDlgDlg::OnDestroy()
{
CDialog::OnDestroy();

// TODO: Add your message handler code here
delete m_pEditBkBrush;

}
5.分別向三個Radio控制元件新增BN_CLICKED訊息響應函式如下:
void CColorEditDlgDlg::OnRadRed()
{
// TODO: Add your control notification handler code here

m_colorEditText = RGB(255,0,0);

// redraw edit control
((CEdit *)GetDlgItem(IDC_EDIT1))->SetRedraw(TRUE);

// invalidate the entire control, force painting
((CEdit *)GetDlgItem(IDC_EDIT1))->Invalidate();
((CEdit *)GetDlgItem(IDC_EDIT1))->UpdateWindow();

}

void CColorEditDlgDlg::OnRadBlue()
{
// TODO: Add your control notification handler code here
m_colorEditText = RGB(0,0,255);

// redraw edit control
((CEdit *)GetDlgItem(IDC_EDIT1))->SetRedraw(TRUE);

// invalidate the entire control, force painting
((CEdit *)GetDlgItem(IDC_EDIT1))->Invalidate();
((CEdit *)GetDlgItem(IDC_EDIT1))->UpdateWindow();

}

void CColorEditDlgDlg::OnRadGreen()
{
// TODO: Add your control notification handler code here
m_colorEditText = RGB(0,255,0);

// redraw edit control
((CEdit *)GetDlgItem(IDC_EDIT1))->SetRedraw(TRUE);

// invalidate the entire control, force painting
((CEdit *)GetDlgItem(IDC_EDIT1))->Invalidate();
((CEdit *)GetDlgItem(IDC_EDIT1))->UpdateWindow();

}

完成後執行程式,點選Radio控制元件可以動態改變編輯框中字型的顏色,如果想改變edit框背景的顏色,可以修改成員變數m_colorEditBK的值並重繪控制元件。