- UID
- 136788
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-5-13
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
编写: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); |
|