zoukankan      html  css  js  c++  java
  • MFC如何修改窗口背景色

    如何修改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(RGB(255, 128, 128));

    //保存旧的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(RGB(255, 128, 128));

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

    }

    转自:http://blogold.chinaunix.net/u1/45018/showart_401587.html

  • 相关阅读:
    setContentView和inflate区别
    Android之用HTTP的get,post,HttpClient三种方式向service提交文本数据
    用C#製作PDF文件全攻略
    移动平台前端开发总结(针对iphone,Android等手机)
    Android实现左右滑动指引效果
    为 iPhone 和 iPad 自定义网站的主屏幕图标
    android 布局中的单位及分辨率自解
    纯css页面变灰度兼容ie、firefox、chrome、opera、safari
    Android判断网络连接是否可用(代码)
    Android实现渐显按钮的左右滑动效果
  • 原文地址:https://www.cnblogs.com/afarmer/p/2038883.html
Copyright © 2011-2022 走看看