CFromView中窗体的美化

来源:互联网 发布:网络是一把双刃剑英语 编辑:程序博客网 时间:2024/06/17 18:15

 

更改颜色常需调用的消息:

更改对话框的的控件的颜色:

afx_msg hbrush onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor);

更改对话框背景:

afx_msg BOOL OnEraseBkgnd(CDC* pDC);//对话框背景


BEGIN_MESSAGE_MAP(CButtonDlg, CDialog)

ON_WM_CTLCOLOR() //建立消息映射 *.cpp
ON_WM_ERASEBKGND() //设置对话框图片背景

END_MESSAGE_MAP()

 

一、设置整个窗体的背景色

   调用WM_ERASEBKGND消息来设置除了控件以外的窗体的背景色。

代码如下:

BOOL Cyonghu1::OnEraseBkgnd(CDC* pDC)

{

    // TODO: 在此添加消息处理程序代码和/或调用默认值

    CBrush backBrush(RGB(104, 221, 154));  //要设置的颜色

    // 保存旧画刷

    CBrush* pOldBrush = pDC->SelectObject(&backBrush);

    CRect rect;

    pDC->GetClipBox(&rect);     // 擦掉所要画的区域

    pDC->PatBlt(rect.left, rect.top, rect.Width(),

    rect.Height(), PATCOPY);

    pDC->SelectObject(pOldBrush);

    return TRUE;

    //return CFormView::OnEraseBkgnd(pDC);

}

二、设置控件的背景色和字体颜色

改变对话框背景颜色后,如何使控件的背景颜色和对话框背景颜色统一?

调用WM_OnCtlColor消息,代码如下:主要是设置static text控件的颜色。

HBRUSH Cyonghu1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

     HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);   

switch (nCtlColor)

    {   case CTLCOLOR_BTN://按钮?

        case CTLCOLOR_STATIC://我们所需要改画的静态

        {  static   HBRUSH   hbrEdit = ::CreateSolidBrush(RGB(104, 221, 154));   //设置背景色

             //设置文字的背景色,否则与最初的相同,注意不是和背景色相同

pDC->SetBkColor(RGB(104,221,154));         

 pDC->SetTextColor(RGB(0, 0, 255));   //设置文字的颜色

           return   hbrEdit;        

        }

        case CTLCOLOR_DLG:

        {

            CBrush*     back_brush;

            COLORREF    color;

            color = (COLORREF) GetSysColor(COLOR_BTNFACE);

            back_brush = new CBrush(color);

            return (HBRUSH) (back_brush->m_hObject);

        }

}

//return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));

     return hbr;

}

三、修改控件的背景色和底色相同

 

pDC->SetBkMode(TRANSPARENT);//设置字体的背景色和控件的背景色相同

hbr= (HBRUSH)::GetStockObject(HOLLOW_BRUSH); //设置控件的背景色和窗体的色相同

return hbr;

四、改变背景色的同时改变字体的大小

如果我们的程序上这样的:

HBRUSH Cyonghu1::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{  //设置字体大小

     HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);

    CFont * cFont=new CFont;

     cFont->CreateFont(30,0,0,0,FW_SEMIBOLD,TRUE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"黑体");

       switch(pWnd->GetDlgCtrlID())

   {

     case IDC_STATIC3:   //针对“注册用户”几个字进行放大

      pWnd->SetFont(cFont);

   }

  //设置背景色和窗体的颜色相同

     switch (nCtlColor)

    {

        case CTLCOLOR_BTN://按钮?

        case CTLCOLOR_STATIC://我们所需要改画的静态

        {  pDC->SetTextColor(RGB(0, 0, 255));   //设置文字的颜色

          pDC->SetBkMode(TRANSPARENT);             //设置文字的背景色和文本框体的背景色相同

          return   (HBRUSH)::GetStockObject(HOLLOW_BRUSH);    //设置文本框体的背景色和窗体颜色相同 

        }

        case CTLCOLOR_DLG:

        {

            CBrush*     back_brush;

            COLORREF    color;

            color = (COLORREF) GetSysColor(COLOR_BTNFACE);

            back_brush = new CBrush(color);

            return (HBRUSH) (back_brush->m_hObject);

        }

    }

     return hbr;

}

注:如果在OnCtlColor消息中同时添加来处理字体大小和处理背景的程序,则得到的结果会使改变字体的静态文本的背景变为白色,如下图所示:

可见窗体中没有改变字体(比如用户名等)大小的背景色与窗体的颜色相同,但是改变类字体大小的用户注册的背景色为白色。

五、改变控件的字体大小

同样也是在OnCtlColor消息函数中,进行字体的设置,可以针对固定的某个ID号进行设置。程序如下:

CFont * cFont=new CFont;

cFont->CreateFont(30,0,0,0,FW_SEMIBOLD,TRUE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"黑体");

   switch(pWnd->GetDlgCtrlID())

   {

    case IDC_STATIC3:

     pWnd->SetFont(cFont);

   }

 

六、修改窗体的背景图片

调用OnPaint()消息。首先通过添加资源,选择导入要显示的图片。

在该消息下添加如下代码:

void CshiyanView::OnPaint()

{

     CPaintDC dc(this); // device context for painting

    CRect rect;

    GetClientRect(&rect);

    CDC dcMem;

    dcMem.CreateCompatibleDC(&dc);

    CBitmap bmpBackground;

  bmpBackground.LoadBitmap(IDB_BITMAP2);   //位图的ID号

//IDB_BITMAP是你自己的图对应的ID

  BITMAP bitmap;

  bmpBackground.GetBitmap(&bitmap);

  CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);

  dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,

  bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

}

原创粉丝点击