⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorpane.cpp

📁 软件参考Windows操作系统下的画图程序
💻 CPP
字号:
// ColorPane.cpp : implementation file
//

#include "stdafx.h"
#include "Drawing.h"
#include "ColorPane.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CColorPane

CColorPane::CColorPane()
{
	pick = oldmovepick = -1;
	_col = 0;
}

CColorPane::~CColorPane()
{
}

COLORREF CColorPane::GetColor()
{
	//默认为黑色
	if(pick<-1 || pick>27)
		return _col;
	else if(pick == -1)
		return col[0];
	else
		return col[pick]; 
}

BEGIN_MESSAGE_MAP(CColorPane, CToolBar)
	//{{AFX_MSG_MAP(CColorPane)
	ON_WM_PAINT()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CColorPane message handlers

COLORREF CColorPane::col[28] = { 
		RGB(0, 0, 0), RGB(255, 255, 255), RGB(128, 128, 128), RGB(192, 192, 192),
		RGB(128, 0, 0), RGB(255, 0, 0), RGB(128, 128, 64), RGB(255, 255, 0),
		RGB(0, 128, 0), RGB(128, 255, 0), RGB(0, 128, 128), RGB(0, 255, 255),
		RGB(0, 0, 128), RGB(0, 0, 255), RGB(128, 0, 128), RGB(255, 0, 255),
		RGB(128, 128, 0), RGB(255, 255, 128), RGB(0, 64, 64), RGB(128, 255, 128),
		RGB(0, 128, 255), RGB(128, 255, 255), RGB(0, 64, 128), RGB(128, 128, 255),
		RGB(0, 0, 255), RGB(255, 0, 128), RGB(128, 64, 64), RGB(255, 128, 64)		
	};

void CColorPane::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	CRect rc;
	GetClientRect(&rc);
	//28个矩形位置的初始化
	static int i_rect = 0;
	if(i_rect == 0)
	{
		i_rect++;
		for(int i=0; i<14; i++)
		{
			rs[2*i].left = rc.left+50+i*23;		rs[2*i].right = rs[2*i].left+17;
			rs[2*i].top  = rc.top+5;			rs[2*i].bottom = rs[2*i].top+17;

			rs[2*i+1].left = rc.left+50+i*23;	rs[2*i+1].right = rs[2*i+1].left+17;
			rs[2*i+1].top  = rc.top+28;			rs[2*i+1].bottom = rs[2*i+1].top+17;
		}
	}
	//画出左边的大矩形框,显示所选颜色用
	dc.Draw3dRect(rc.left+5, rc.top+5, 43, 43, RGB(0, 0, 0), RGB(255, 255, 255));
	static int first = 0;
	CPen pen(PS_SOLID, 1, GetColor());
	CBrush bru(GetColor());
	dc.SelectObject(&pen);
	dc.SelectObject(&bru);
	dc.Rectangle(rc.left+5+1, rc.top+5+1, rc.left+5+1+41, rc.top+5+1+41);

	//画出每一个小颜色矩形框
	CPen Pen(PS_SOLID, 1, RGB(255, 255, 255));
	dc.SelectObject(&Pen);
	for(int i=0; i<14; i++)
	{
		dc.Draw3dRect(rs[2*i].left, rs[2*i].top, 17, 17, RGB(0, 0, 0), RGB(255, 255, 255));
		CPen PenTmp1(PS_SOLID, 1, col[2*i]);
		CBrush BruTmp1(col[2*i]);
		dc.SelectObject(&PenTmp1);
		dc.SelectObject(&BruTmp1);
		dc.Rectangle(rc.left+50+i*23+1, rc.top+5+1, rc.left+50+i*23+1+15, rc.top+5+1+15);
		dc.Draw3dRect(rs[2*i+1].left, rs[2*i+1].top, 17, 17, RGB(0, 0, 0), RGB(255, 255, 255));
		CPen PenTmp2(PS_SOLID, 1, col[2*i+1]);
		CBrush BruTmp2(col[2*i+1]);
		dc.SelectObject(&PenTmp2);
		dc.SelectObject(&BruTmp2);
		dc.Rectangle(rc.left+50+i*23+1, rc.top+28+1, rc.left+50+i*23+1+15, rc.top+28+1+15);

		//小颜色矩形框间隙用白线画出的效果
		if(i<13)
		{
			dc.SelectObject(&Pen);
			dc.MoveTo(rc.left+50+17+i*23+2, rc.top+5);
			dc.LineTo(rc.left+50+i*23+17+2, rc.top+5+40);
		}
	}
	//小颜色矩形框间隙用白线画出的效果
	dc.SelectObject(&Pen);
	dc.MoveTo(rc.left+50, rc.top+5+17+2);
	dc.LineTo(rc.left+50+(14-1)*23+17, rc.top+5+17+2);

	//画出"更多颜色..."按纽
	dc.Draw3dRect(rc.left+50+(14-1)*23+17+5, rc.top+10, 90, 30, RGB(255, 255, 255), RGB(0, 0, 0));
	CPen Pen0(PS_SOLID, 1, RGB(0, 0, 0));
	dc.SelectObject(&Pen0);
	dc.SetBkMode(TRANSPARENT);
	dc.TextOut(rc.left+50+(14-1)*23+17+10+1, rc.top+10+6, "更多颜色...");
	// Do not call CToolBar::OnPaint() for painting messages
}


//鼠标移动时消息处理,主要是用焦点显示正选择的颜色矩形
void CColorPane::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC dc(this);
	if(oldmovepick != -1)
	{
		CPen pen(PS_SOLID, 1, col[oldmovepick]);
		CBrush bru(col[oldmovepick]);
		dc.SelectObject(&pen);
		dc.SelectObject(&bru);
		CRect r = rs[oldmovepick];
		r.DeflateRect(1, 1, 1, 1);
		dc.Rectangle(&r);
		oldmovepick = -1;
	}
	for(int i=0; i<28; i++)
	{
		if(rs[i].PtInRect(point))
		{
			CPen pen(PS_DOT , 1, RGB(255, 0, 0));
			CBrush bru(col[i]);
			dc.SelectObject(&pen);
			dc.SelectObject(&bru);
			CRect r = rs[i];
			r.DeflateRect(1, 1, 1, 1);
			//dc.SetBkMode(TRANSPARENT);
			dc.Rectangle(&r);
			oldmovepick = i;
		}
	}
	CToolBar::OnMouseMove(nFlags, point);
}

//鼠标点选的颜色矩形或者按纽
void CColorPane::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC dc(this);
	CRect rc;
	GetClientRect(&rc);
	for(int i=0; i<28; i++)
	{
		if(rs[i].PtInRect(point))
		{
			pick = i;
			break;
		}
	}
	if(pick>-1 && pick<28)
	{
		CPen pen(PS_SOLID, 1, col[pick]);
		CBrush bru(col[pick]);
		dc.SelectObject(&pen);
		dc.SelectObject(&bru);
		dc.Rectangle(rc.left+5+1, rc.top+5+1, rc.left+5+1+41, rc.top+5+1+41);
	}
	CRect rt(rc.left+50+(14-1)*23+17+5, rc.top+10, rc.left+50+(14-1)*23+17+5+90, rc.top+10+30);
	if(rt.PtInRect(point))
	{
		CColorDialog dlg;
		int temp = dlg.DoModal();
		COLORREF c(dlg.GetColor());
		dc.Draw3dRect(rc.left+50+(14-1)*23+17+5, rc.top+10, 90, 30, RGB(255, 255, 255), RGB(0, 0, 0));
		if(temp==IDOK)
		{	
			_col = c;
			pick = -10;
			CPen pen(PS_SOLID, 1, c);
			CBrush bru(c);
			dc.SelectObject(&pen);
			dc.SelectObject(&bru);
			dc.Rectangle(rc.left+5+1, rc.top+5+1, rc.left+5+1+41, rc.top+5+1+41);
		}
	}
	else
		dc.Draw3dRect(rc.left+50+(14-1)*23+17+5, rc.top+10, 90, 30, RGB(255, 255, 255), RGB(0, 0, 0));
	CToolBar::OnLButtonUp(nFlags, point);
}

void CColorPane::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CClientDC dc(this);
	CRect rc;
	GetClientRect(&rc);
	CRect rt(rc.left+50+(14-1)*23+17+5, rc.top+10, rc.left+50+(14-1)*23+17+5+90, rc.top+10+30);
	if(rt.PtInRect(point))
		dc.Draw3dRect(rc.left+50+(14-1)*23+17+5, rc.top+10, 90, 30, RGB(0, 0, 0), RGB(255, 255, 255));
	CToolBar::OnLButtonDown(nFlags, point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -