请问:
1.怎么改变Edit控件的背景色/字体颜色和大小?
2.怎么改变对话框的背景色?
3.我在SDI视图窗口中改变了它的背景色(以EditView为基类),发现在输入文本的时候,输入行以上的文本还是白色!
问题是:怎么才能保证背景色全为红色,文本颜色全为兰色?谢谢

解决方案 »

  1.   

    1  改变控件的字体
    由于控件是也是窗口,用户可以调用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 );

    }
      

  2.   

    2  
    内容:改变对话框的背景色
    方法一:调用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;
    }
    ---- 编译并运行即可。
      

  3.   


    改变控件的背景色/字体颜色
    http://expert.csdn.net/Expert/topic/2979/2979336.xml?temp=.4619257
    http://expert.csdn.net/Expert/topic/3053/3053840.xml?temp=.2055628
      

  4.   

    晚了,就剩最后一个问题了在输出文本的时候,把DC变为透明^_^dc->SetBkMode(TRANSPARENT);
      

  5.   

    HBRUSH m_hBrush; //用于文本框初试化的刷子
    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;
    }
      

  6.   

    呵呵 laiyiling(最熟悉的陌生人)最近很猛啊!
      

  7.   

    1.
    改变颜色
    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函数设置背景
      

  8.   

    laiyiling(最熟悉的陌生人) ( ) 
    多谢捧场一楼的方法,我好象是在FAQ上看过的,用了一下,没能实现按钮变色,不知道为什么!!请大家发表高见!
      

  9.   

    按钮是不能用OnCtlColor改变颜色的
      

  10.   

    可以重载cbutton 然后实现颜色
      

  11.   

    http://www.codeguru.com/Cpp/controls/buttonctrl/article.php/c5169/