• 【VS开发】修改窗口背景颜色大全


    如何修改frame窗口的背景颜色?   

    MDI窗口的客户区是由frame窗口拥有的另一个窗口覆盖的。为了改变frame窗口背景的颜色,只需要这个客户区的背景颜色就可以了。你必须自己处理WM_ERASEBKND消息。下面是工作步骤:

      创建一个从CWnd类继承的类,就叫它CMDIClient吧; 

    在CMDIFrameWnd中加入CMDIClient变量;(具体情况看下面的代码) 

    #include "MDIClient.h"
    class CMainFrame : public CMDIFrameWnd
    {
    ...
    protected:
    CMDIClient m_wndMDIClient;
    }

      重载CMDIFrameWnd::OnCreateClient,下面是这段代码,请注意其中的SubclassWindow();

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
    {
    m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
    return TRUE;
    }
    else
    return FALSE;
    }

      最后要在CMDIClient中加入处理WM_ERASEBKGND的函数。

     

    如何改变view的背景颜色? 

    若要改变CView,CFrameWnd或CWnd对象的背景颜色需要处理WM_ERASEBKGND消息,下面就是一个范例代码:

    BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
    {

    //设置brush为希望的背景颜色
    CBrush backBrush(#ff8080);

    //保存旧的brush
    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;

    }

     

    若要改变CFromView继承类的背景颜色

    下面是一个范例代码:

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

     switch (nCtlColor)
    {

      case CTLCOLOR_BTN:
    case CTLCOLOR_STATIC:
    {

       pDC->SetBkMode(TRANSPARENT);
    //不加任何处理或设置背景为透明

      }
    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));

    }

     

    如何修改frame窗口的背景颜色?

      MDI窗口的客户区是由frame窗口拥有的另一个窗口覆盖的。为了改变frame窗口背景的颜色,只需要这个客户区的背景颜色就可以了。你必须自己处理WM_ERASEBKND消息。下面是工作步骤:

      创建一个从CWnd类继承的类,就叫它CMDIClient吧; 

    在CMDIFrameWnd中加入CMDIClient变量;(具体情况看下面的代码) 

    #include "MDIClient.h"
    class CMainFrame : public CMDIFrameWnd
    {
    ...
    protected:
    CMDIClient m_wndMDIClient;
    }

      重载CMDIFrameWnd::OnCreateClient,下面是这段代码,请注意其中的SubclassWindow();

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    {
    if ( CMDIFrameWnd::OnCreateClient(lpcs, pContext) )
    {
    m_wndMDIClient.SubclassWindow(m_hWndMDIClient);
    return TRUE;
    }
    else
    return FALSE;
    }

      最后要在CMDIClient中加入处理WM_ERASEBKGND的函数。

     

    如何改变view的背景颜色? 

    若要改变CView,CFrameWnd或CWnd对象的背景颜色需要处理WM_ERASEBKGND消息,下面就是一个范例代码:

    BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
    {

    //设置brush为希望的背景颜色
    CBrush backBrush(#ff8080);

    //保存旧的brush
    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;

    }

     

    若要改变CFromView继承类的背景颜色

    下面是一个范例代码:

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

     switch (nCtlColor)
    {

      case CTLCOLOR_BTN:
    case CTLCOLOR_STATIC:
    {

       pDC->SetBkMode(TRANSPARENT);
    //不加任何处理或设置背景为透明

      }
    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));

    }

  • 相关阅读:
    Java代码输出是“father”还是“child”(二)
    Java代码输出是“father”还是“child”(一)
    “var arr = []; ”和 “var arr = {};” 的区别
    Servlet页面间对象传递的方法
    利用OWI优化SQL
    Oracle 12c 12.1.0.1.0管理控制文件官方文档说明
    计算工资
    检测本地网络连接状态断开以及恢复的方法
    linux 批量创建用户
    比较两表数据
  • 原文地址:https://www.cnblogs.com/huty/p/8518698.html
Copyright © 2020-2023  润新知