zoukankan      html  css  js  c++  java
  • C++如何在Dialog和View中显示梯度背景颜色

    需要达到此效果程序需要重载CWnd类的OnEraseBkgnd,下面列出各种样式的梯度代码

    水平梯度代码
     CDialog::OnEraseBkgnd(pDC);
    CRect rect;
    GetClientRect(&rect);
    int r1=127,g1=127,b1=56; //Any start color
    int r2=5,g2=55,b2=165; //Any stop color
    for(int i=0;i<rect.Width();i++)
    {
        int r,g,b;
        r = r1 + (i * (r2-r1) / rect.Width());
        g = g1 + (i * (g2-g1) / rect.Width());
        b = b1 + (i * (b2-b1) / rect.Width());
        pDC->FillSolidRect(i,0,1,rect.Height(),RGB(r,g,b));
    }
    return true;

    垂直梯度代码:
    CDialog::OnEraseBkgnd(pDC);
    CRect rect;
    GetClientRect(&rect);
    int r1=127,g1=127,b1=56; //Any start color
    int r2=5,g2=55,b2=165; //Any stop color
    for(int i=0;i<rect.Height();i++)
    {
        int r,g,b;
        r = r1 + (i * (r2-r1) / rect.Height());
        g = g1 + (i * (g2-g1) / rect.Height());
        b = b1 + (i * (b2-b1) / rect.Height());
        pDC->FillSolidRect(0,i,rect.Width(),1,RGB(r,g,b));
    }
    return true;

    对角线梯度代码
    CDialog::::OnEraseBkgnd(pDC);
    CRect rect;
    GetClientRect(&rect);
    CDC dc2;
    dc2.CreateCompatibleDC(pDC);
    CBitmap *oldbmap=dc2.SelectObject(&m_bitmap);
    /*We copy the bitmap into the DC*/
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc2,0,0,SRCCOPY);
    dc2.SelectObject(oldbmap);
    return true;

    为了达到该目的,我们还有自建个函数MakeBitmap用于创建m_bitmap对象,该函数在OnInitDialog(Cialog)或者OnInitialUpdate(SDI)中被调用。代码如下:

    void CYourClassName::MakeBitmap()
    {
        CPaintDC dc(this);
        CRect rect;
        GetClientRect(&rect);

        int r1=245,g1=190,b1=240;
        int r2=130,g2=0,b2=0;

        int x1=0,y1=0;
        int x2=0,y2=0;

        CDC dc2;
        dc2.CreateCompatibleDC(&dc);

        if(m_bitmap.m_hObject)
            m_bitmap.DeleteObject();
        m_bitmap.CreateCompatibleBitmap(&dc,rect.Width(),
            rect.Height());

        CBitmap *oldbmap=dc2.SelectObject(&m_bitmap);

        while(x1 < rect.Width() && y1 < rect.Height())
        {
            if(y1 < rect.Height()-1)
                y1++;
            else
                x1++;

            if(x2 < rect.Width()-1)
                x2++;
            else
                y2++;

            int r,g,b;
            int i = x1+y1;
            r = r1 + (i * (r2-r1) / (rect.Width()+rect.Height()));
            g = g1 + (i * (g2-g1) / (rect.Width()+rect.Height()));
            b = b1 + (i * (b2-b1) / (rect.Width()+rect.Height()));

            CPen p(PS_SOLID,1,RGB(r,g,b));
            CPen *oldpen = dc2.SelectObject(&p);
            dc2.MoveTo(x1,y1);
            dc2.LineTo(x2,y2);
            dc2.SelectObject(oldpen);
        }
        dc2.SelectObject(oldbmap);
    }

  • 相关阅读:
    chrome调试
    css与jquery、图标字体、常用数据
    subline 快捷键与功能解释
    mysql-5.7.25安装及常用语法
    python 异步IO-aiohttp与简单的异步HTTP客户端/服务器
    python异步IO-asyncio、async和await
    python 异步IO-协程
    python 异步IO
    python-生成器即send()用法
    python -迭代器与生成器 以及 iterable(可迭代对象)、yield语句
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157197.html
Copyright © 2011-2022 走看看