当前位置:C++技术网 > 资讯 > MFC实现简单易用的拾色器(取色器)的功能及代码分析

MFC实现简单易用的拾色器(取色器)的功能及代码分析

更新时间:2016-01-25 22:32:47浏览次数:1+次

win32版的《win32实现简单易用的拾色器(取色器)的功能及代码分析》,对于代码实现的理解,也请看原文。下面我们用MFC实现一次:

在实现文件.cpp中:

void C拾色器Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	SetCapture();
	SetCursor(LoadCursor(NULL,IDC_CROSS));
	CDialogEx::OnLButtonDown(nFlags, point);
}


void C拾色器Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	ReleaseCapture();
	SetCursor(LoadCursor(NULL,IDC_ARROW));
	CDialogEx::OnLButtonUp(nFlags, point);
}


void C拾色器Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CDC *pDC=GetDC();
	POINT ptScreen;
	ptScreen.x=point.x;
	ptScreen.y=point.y;
	ClientToScreen(&ptScreen);
	clr=hScreen->GetPixel(ptScreen.x,ptScreen.y);
	wsprintf(clrhex,_T("%X %X %X"),GetRValue(clr),GetGValue(clr),GetBValue(clr));
    wsprintf(tip,_T("颜色(%d,%d,%d),十六进制:#%s"),GetRValue(clr),GetGValue
		 (clr),GetBValue(clr),clrhex); 
	GetClientRect(&rect);
    hBrush.CreateSolidBrush(clr);
	pDC->FillRect(&rect,&hBrush);
	pDC->SelectObject(GetStockObject(SYSTEM_FIXED_FONT));
	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(255-GetRValue(clr),255-GetGValue(clr),255-GetBValue(clr)));
	//pDC->DrawText(txt,-1,&rect,DT_WORDBREAK);
	pDC->TextOutW(0,50,tip);
	DeleteObject(pDC->SelectObject(GetStockObject(WHITE_BRUSH)));//删除画刷 
    ReleaseDC(pDC);           
	CDialogEx::OnMouseMove(nFlags, point);
}


int C拾色器Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	hScreen=GetWindowDC();
	return 0;
}
还有WM_PAINT函数:
PAINTSTRUCT ps;
		CDC *pDC=BeginPaint(&ps);
		GetClientRect(&rect);
		hBrush.CreateSolidBrush(clr);
		pDC->FillRect(&rect,&hBrush);
		pDC->SelectObject(GetStockObject(SYSTEM_FIXED_FONT));
		pDC->SetBkMode(TRANSPARENT);
		pDC->SetTextColor(RGB(255-GetRValue(clr),255-GetGValue(clr),255-GetBValue(clr)));
		pDC->TextOutW(0,50,tip);
		EndPaint(&ps);
在头文件中:
LPWSTR clrhex,tip;
	COLORREF clr;
	CDC *hScreen;
	CRect rect;
	CBrush hBrush;
最后的实现: