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

  • 相关阅读:
    .net程序控制post数据 需登陆后保持session的方法
    简单分页查询SQL语句
    通过文本编辑器提交报从客户端中检测到有潜在危险的 Request.Form 值的错误
    Visual Studio 很卡、重置初始状态
    Jquery获取url中的参数
    Centos 6 安装桌面环境
    Jquery使用ajax实例
    一般处理程序使用session
    如何简单的发布一个react组件npm包
    BFC、IFC、GFC 和 FFC的概念
  • 原文地址:https://www.cnblogs.com/afarmer/p/2038883.html
Copyright © 2011-2022 走看看