系统环境:Windows 7
软件环境:Visual C++ 2008 SP1
本次目的:编写一个颜色拾取器

      参考VC 知识库里面的一篇文章,以为网上的资料。自己动手试了下,下面是运行的界面:

屏幕颜色拾取器 (VC++)_vc++

屏幕颜色拾取器 (VC++)_vc++_02

首先:建立基于对话框的工程,添加好控件;

然后:为对话框添加OnTimer()的事件处理,如下所示:

屏幕颜色拾取器 (VC++)_null_03

在其中添加如下代码:

void CGetRGBDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent != 1) return; CPoint pt; GetCursorPos(&pt); //获得光标位置 HDC hDC = ::GetDC(NULL); //获取屏幕DC COLORREF clr = ::GetPixel(hDC, pt.x, pt.y); CString ClrText; ClrText.Format(_T("%d"),GetRValue(clr)); //分解出红色值 red=GetRValue(clr); SetDlgItemText(IDC_RED,ClrText); ClrText.Format(_T("%d"),GetGValue(clr)); //分解出绿色值 green=GetGValue(clr); SetDlgItemText(IDC_GREEN,ClrText); ClrText.Format(_T("%d"),GetBValue(clr)); //分解出蓝色值 blue=GetBValue(clr); SetDlgItemText(IDC_BLUE,ClrText); OnPaint(); ::ReleaseDC(NULL, hDC); //释放屏幕DC CDialog::OnTimer(nIDEvent); }

对于“拾取”按钮

void CGetRGBDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 SetTimer(1, 80, NULL); }

对于“停止”按钮

void CGetRGBDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 KillTimer(1);//stop get color }