找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 380|回复: 0

[日积月累]:颜色总结--需要使用颜色的地方可以做参考

[复制链接]
发表于 2005-3-22 20:43:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
编写:henryhyg

颜色总结:
方法一.调用MFC系统的颜色对话框
首先:做一个BUTTON用于触发改对话框
//DialogBCZD是BUTTON所在的对话框类
//变量说明
//        CPalette *m_pPalette;
//        COLORREF m_color;

void DialogBCZD::OnButtonColor()
{
        PLOGPALETTE lp;
        HANDLE hPal;
        hPal = GlobalAlloc(GMEM_MOVEABLE,sizeof(LOGPALETTE)+256*sizeof(PALETTEENTRY));
        lp = (LPLOGPALETTE)GlobalLock(hPal);
        lp->palVersion = 0x300;
        lp->palNumEntries = 256;

        int ii;
        for(ii = 0; ii < 256; ii++)
        {
                lp->palPalEntry[ii].peBlue = 0;
                lp->palPalEntry[ii].peFlags = 0;
                lp->palPalEntry[ii].peGreen = 0;
                lp->palPalEntry[ii].peRed = 0;
        }
        //创建85种红绿蓝颜色
        for(ii=0;ii<85;ii++)
        {
                lp->palPalEntry[ii].peRed = (BYTE)ii*3;
                lp->palPalEntry[ii].peFlags = 0;
                lp->palPalEntry[ii+86].peBlue = (BYTE)ii*3;
                lp->palPalEntry[ii+86].peFlags = 0;
                lp->palPalEntry[ii+171].peGreen = (BYTE)ii*3;
                lp->palPalEntry[ii+171].peFlags = 0;
        }
        m_pPalette = new CPalette;
        m_pPalette->CreatePalette(lp);
        GlobalUnlock(hPal);
        GlobalFree(hPal);
        delete m_pPalette;        //释放内存       

        OnColor();
}

void DialogBCZD::OnColor()
{
        int m_nFlag = 1;
        CColorDialog m_Dlg(0,0,NULL);
        if(m_Dlg.DoModal() == IDOK)
        {
                m_color = m_Dlg.GetColor();
                OnView();
        }       
}

void DialogBCZD::OnPalette()
{
        m_nFlag = 0;
        m_color = RGB(m_nRed,m_nGreen,m_nBlue);
        OnView();
}

void DialogBCZD::OnView()
{
        this->UpdateData(true);

        CClientDC dc(this);
        CRgn rgn;

        CRect rect(CPoint(475,410),CSize(50,48));
        rgn.CreateRectRgnIndirect(&rect);
        CBrush brush;
        brush.CreateSolidBrush(m_color);
        dc.FillRgn(&rgn,&brush);

        rgn.DeleteObject();
        brush.DeleteObject();
}

//这些就可以实现和微软的颜色选择框(调色版)的功能.
PS:具体的头文件可以查MSDN

方法二:调用CAD自身的调色版.
void DialogBCZD::OnButtonColor()
{
        int color = 0;
        if(Adesk::kTrue == acedSetColorDialog(color,Adesk::kTrue,8))
        {
                acutPrintf("The choose color is :%d",color);
        }

        CAcUiColorComboBox *cb = new CAcUiColorComboBox();
        m_color = cb->GetColorFromIndex(color);
        acutPrintf("The color index is :%d",color);
        OnView();
        UpdateData(false);
}
说明一下:主要使用CAcUiColorComboBox 类的GetColorFromIndex()方法来获得其索引颜色值,autocad定义这个值在0~255.
PS:virtual COLORREF GetColorFromIndex(int colorIndex);可以获得你要的颜色.就像方法一中的 COLORREF m_color;

在对颜色转化做一下说明
由颜色值得到RGB值
void GetRGBValue(int *R,int *G,int *B)
{
        *R = GetRValue((DWORD)m_Color);
        *G = GetGValue((DWORD)m_Color);
        *B = GetBValue((DWORD)m_Color);
}
变量说明:COLORREF m_color;
PS:R,G,B值就是你要的RGB值

RGB得到颜色就不要说了吧:)
COLORREF m_color = RGB(int R,int G,int B);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 11:40 , Processed in 0.363809 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表