如何更改CPropertySheet的背景色

本文介绍如何通过重写WM_ERASEBKGND和WM_CTLCOLOR消息来更改CPropertySheet及其CPropertyPage的背景颜色,并详细展示了如何自定义标签背景色的方法。
如何更改CPropertySheet的背景色? 当然这里指的是包括改CPropertyPage和标签的背景颜色.

(1)改CPropertyPage的背景色:
1)创建一个CPropertyPage的子类: class COwnerDrawPropPage : public CPropertyPage;
2)处理它的WM_ERASEBKGND 和 WM_CTLCOLOR消息:
BOOL COwnerDrawPropPage::OnEraseBkgnd(CDC* pDC)
{
    CRect rectClient(0,0,0,0);
    GetClientRect(&rectClient);
    CBrush brush;
    brush.CreateSolidBrush(BACKCOLOR_BLUE);
    pDC->FillRect( &rectClient,& brush);
    return TRUE;
    //return CPropertyPage::OnEraseBkgnd(pDC);
}

HBRUSH COwnerDrawPropPage::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    //    HBRUSH hbr = CPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
    //    return hbr;

    pDC->SetBkColor(BACKCOLOR_BLUE);
    pDC->SetBkMode(TRANSPARENT);
    HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE);
    return hbrushBack;      
}
    3)把所有属性页的父类都改为COwnerDrawPropPage.这样就改了属性页的颜色.

(2)改CPropertySheet的背景色, 这里包括两方面: 客户区的颜色, 标签的颜色.
1)改客户区的颜色跟改属性页的一样:

HBRUSH CMyPropertySheet::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//    HBRUSH hbr = CPropertySheet::OnCtlColor(pDC, pWnd, nCtlColor);
//    return hbr;
    pDC->SetBkColor(BACKCOLOR_BLUE);
    pDC->SetBkMode(TRANSPARENT);
    HBRUSH hbrushBack = ::CreateSolidBrush(BACKCOLOR_BLUE);
    return hbrushBack;    
}
BOOL CMyPropertySheet::OnEraseBkgnd(CDC* pDC)
{
    CRect rectClient(0,0,0,0);
    GetClientRect(&rectClient);
    CBrush brush;
    brush.CreateSolidBrush(BACKCOLOR_BLUE);
    pDC->FillRect( &rectClient,& brush);
    return TRUE;
    //return CPropertySheet::OnEraseBkgnd(pDC);
}

2)改标签的就有一定难度了. 先从CTabCtrl派生一个COwnerDrawTabCtrl, 处理其WM_ERASEBKGND消息. 然后再实现其DrawItem方法,注意不是WM_DRAWITEM!! 而是 void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) .

BOOL COwnerDrawTabCtrl::OnEraseBkgnd(CDC* pDC)
{
    CRect rectClient(0,0,0,0);
    GetClientRect(&rectClient);
    pDC->FillRect( &rectClient,& m_brushBK);
    return TRUE;
    //return CTabCtrl::OnEraseBkgnd(pDC);
}
void COwnerDrawTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

    TCHAR szTabText[64]={0};

    TC_ITEM     tci;
    tci.mask        = TCIF_TEXT;
    tci.pszText     = szTabText;
    tci.cchTextMax  = sizeof(szTabText)-1;

    GetItem( lpDrawItemStruct->itemID,& tci);
    CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);    
    pDC->FillRect(& lpDrawItemStruct->rcItem,& m_brushBK);
    pDC->SetBkColor( BACKCOLOR_BLUE);

    if ((lpDrawItemStruct->itemState & ODS_SELECTED)&&  
        (lpDrawItemStruct->itemAction& (ODA_SELECT | ODA_DRAWENTIRE)))
    {
        //Make the color of text of the selected tab to be BLUE.
        pDC->SetTextColor(RGB( 17, 139, 1));
    }
    //! 文字的位置可能的偏移
    pDC->TextOut(lpDrawItemStruct->rcItem.left+4,
        lpDrawItemStruct->rcItem.top+4,
        tci.pszText,
        lstrlen(tci.pszText));     
}
现在, 万里长征就已经完成了一大截了,最后一步是为CMyPropertySheet 加入一个  COwnerDrawTabCtrl 成员变量, 然后在OnInitDialog() 加入子类化代码:

BOOL CMyPropertySheet::OnInitDialog() 
{
    BOOL bResult = CPropertySheet::OnInitDialog();
    //! 省略原有代码

    //! Jasmine 2011-11-08
    m_tabOwnerDraw.SubclassWindow( GetTabControl()->m_hWnd);
    m_tabOwnerDraw.ModifyStyle(0,TCS_OWNERDRAWFIXED);
    return bResult;
}
这样就把用CPropertySheet和CPropertyPage实现的属性框的背景颜色改好. 
Have a good time!

 
考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值