11.6.1 信息提示框的设计与实现(3)
【代码解析】
第3、4行获取当前鼠标光标的位置,第7、8行获取鼠标光标所在点的颜色,第9~12行获取鼠标光标所在点颜色的RGB值。第16行设置颜色值的提示信息。第17~21行设置初始运行时的提示信息,第23~26行设置鼠标绘制橡皮筋框时的提示信息,第28~33行设置绘制完橡皮筋框后的提示信息。第35行将设置好的信息显示到自定义的编辑框上。
(5)当鼠标移动时,鼠标所在点的颜色值将有可能时时变化,因此就需要时时的重新绘制信息提示框上的提示信息。而当橡皮筋框状态没有变化时,它的信息也会随鼠标移动而重绘。这样便会导致信息框的闪屏问题。为了解决这个问题,设计了一个函数modifyColor()。在鼠标移动而截屏模块状态没有变化时,只需重绘RGB值,实现如下:
- 01 void CCatchDlg::modifyColor()
- 02 {
- 03 CClientDC dc(this);
- 04 CPoint pt;
- 05 GetCursorPos(&pt); //保存旧的RGB值字符串
- 06 COLORREF color;
- 07 color = dc.GetPixel(pt); //得到当前R、G、B、各像素值
- 08 BYTE rValue,gValue,bValue;
- 09 rValue = GetRValue(color);
- 10 gValue = GetGValue(color);
- 11 bValue = GetBValue(color);
- 12 //按格式排放字符串
- 13 CString string;
- 14 string.Format("(%d,%d,%d)",rValue,gValue,bValue);
- 15 //如果当前颜色没变则不刷新RGB值,以免窗口有更多闪烁
- 16 if(m_strOld != string)
- 17 {
- 18 //得到RGB文本那一行的文本长度
- 19 int LineLength=m_eTip.LineLength(6);
- 20 //复选RGB值文本,也就是(255,255,255)形式
- 21 m_eTip.SetSel(20,LineLength+6);
- 22 //替换RGB内容
- 23 m_eTip.ReplaceSel(string);
- 24 m_strOld = string;
- 25 }
- 26 }
【代码解析】
同SetTip()函数一样,第4~11行获取鼠标光标当前位置点的RGB值。第13、14行将鼠标光标当前位置点的RGB值转化为字符串形式。第16行判断鼠标光标点的颜色值与上次的值是否相同,如不同则在第19行获取显示RGB那行信息的文本长度。然后在第21行将这行RGB值选中,最后在第23行用新值字符串替换原值,第24行保存这次获取的颜色值。