请问:
1.怎么改变Edit控件的背景色/字体颜色和大小?
2.怎么改变对话框的背景色?
3.我在SDI视图窗口中改变了它的背景色(以EditView为基类),发现在输入文本的时候,输入行以上的文本还是白色!
问题是:怎么才能保证背景色全为红色,文本颜色全为兰色?谢谢
1.怎么改变Edit控件的背景色/字体颜色和大小?
2.怎么改变对话框的背景色?
3.我在SDI视图窗口中改变了它的背景色(以EditView为基类),发现在输入文本的时候,输入行以上的文本还是白色!
问题是:怎么才能保证背景色全为红色,文本颜色全为兰色?谢谢
由于控件是也是窗口,用户可以调用CWnd: : SetFont指定新字体。该函数用一个Cfont
指针,要保证在控件撤消之前不能撤消字体对象。下例将下压按钮的字体改为8点Arial
字体:
//Declare font object in class declaration (.H file ).
private :
Cfont m_font ;
// Set font in class implementation (.Cpp file ). Note m_wndButton is a
//member variable added by ClassWizard.DDX routines hook the member
//variable to a dialog button contrlo.
BOOL CSampleDialog : : OnInitDialog ( )
{
…
//Create an 8-point Arial font
m_font . CreateFont (MulDiv (8 , -pDC—> GetDeviceCaps (LOGPIXELSY) , 72).
0 , 0 , 0 , FW_NORMAL , 0 , 0, 0, ANSI_CHARSER, OUT_STROKE_PRECIS ,
CLIP_STROKE _PRECIS , DRAFT _QUALITY
VARIABLE_PITCH |FF_SWISS, _T ("Arial") );
//Set font for push button .
m_wndButton . SetFont (&m _font );
…
}
内容:改变对话框的背景色
方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。
---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下:
---- ① 新建一个基于Dialog的MFC AppWizard应用程序ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中添加如下代码:
BOOL CExampleDlgApp: : InitInstance ( )
{
… CExampleDlgDlg dlg;
m_pMainWnd = &dlg;
//先于DoModal()调用,将对话框设置为蓝色背景、红色文本
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
int nResponse = dlg.DoModal();
…}
---- 编译并运行,此时对话框的背景色和文本色已发生了改变。值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor,且此方法是将改变应用程序中所有的对话框颜色,并不能针对某一个指定的对话框。
---- 方法二:重载OnPaint(),即WM_PAINT消息。有关代码如下(以上例工程为准):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
… else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0)); //设置为绿色背景
CDialog::OnPaint();
}
---- 方法三:重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):
---- ①在CExampleDlgDlg的头文件中,添加一CBrush的成员变量:
class CExampleDlgDlg : public CDialog
{...
protected:
CBrush m_brush;
...
};
---- ②在OnInitDialog()函数中添加如下代码:
BOOL CExampleDlgDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一绿色刷子
...
}
---- ③利用ClassWizard重载OnCtlColor(…),即WM_CTLCOLOR消息:
HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
/*
** 这里不必编写任何代码!
**下行代码要注释掉
** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
*/
return m_brush; //返加绿色刷子
}
---- 方法四:还是重载OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息。具体步骤如下(以上例工程为准):
---- 步骤①、②同上方法三中的步骤①、②。
---- 步骤③利用ClassWizard重载OnCtlColor(…)(即WM_CTLCOLOR消息)时则有些不同:
HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//在这加一条是否为对话框的判断语句
if(nCtlColor ==CTLCOLOR_DLG)
return m_brush; //返加绿色刷子
return hbr;
}
---- 编译并运行即可。
改变控件的背景色/字体颜色
http://expert.csdn.net/Expert/topic/2979/2979336.xml?temp=.4619257
http://expert.csdn.net/Expert/topic/3053/3053840.xml?temp=.2055628
COLORREF m_cbColor; //用于暂存用户选择的颜色值HBRUSH CCviewerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()==IDC_EDITBOX)
{
pDC->SetTextColor(m_crFontColor); //设置字体颜色
if(m_bIsInvalidate)
{
pDC->SetBkColor(m_cbColor); //设置背景颜色
return m_hBrush;
}
}
return hbr;
}
改变颜色
HBRUSH CTest6Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH brush;
COLORREF clr;
switch(nCtlColor)
{
case CTLCOLOR_EDIT:
if(pWnd->GetDlgCtrlID() == IDC_EDIT2)
{
pDC->SetTextColor( RGB(0, 255, 0) );
pDC->SetBkColor(RGB(244,100,100));
brush = ::CreateSolidBrush( RGB(0,255,0) );
return brush;
}
} // TODO: Return a different brush if the default is not desired
return hbr;
}
//设置edit字体
CFont m_Font;
m_Font.CreateFont(-11,0,0,0,100,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_SWISS,"Arial");
CEdit *m_Edit=(CEdit *)GetDlgItem(IDC_EDIT1);
m_Edit->SetFont(&m_Font);
2.
在OnInitDialog()中用SetDialogBKColor函数设置背景
多谢捧场一楼的方法,我好象是在FAQ上看过的,用了一下,没能实现按钮变色,不知道为什么!!请大家发表高见!