楼上说的很详细,我想给补充一下(最佳答案别选我)。电脑屏幕上看到的任何颜色和图案,其每一个像素,都是由3个颜色构成:红色、绿色、蓝色。如果像素太小你看不清,可去看看电视机屏幕,也是一样的。所以3个基本颜色(红-R,绿-G,蓝-B)不同的亮度组合,就组成了不同的颜色,拿24位真彩色来说,屏幕上每一个像素由红绿蓝各1字节(各8位)组成,每个颜色的取值范围为0~255,因此显示白色为-(255R+255G+255B)、灰色(127R+127G+127B)、黑色(0R+0G+0B)、紫色(255R+0G+255B)、黄色(255R+255G+0B)、青色(0R+255G+255B)等等。在VB里编程所用的色彩也是24位,一般用&H00BBGGRR来表示,其中BB、GG、RR均为2位16进制,取值范围为00-FF(分别代表十进制的0~255),当然这种16进制的方式有时候可读性太好,因此有了RGB()这个函数,函数内的3个参数为十进制,函数返回的就是&H00BBGGRR的十进制形式,对于VB处理来说,两者都是一样的。
如果RBG()非要以16进制的方式输入参数,则需要在每个参数前面加上"&H"以触发VB的强制类型转换功能,强制转换为10进制,这就是你给的那句程序里"&H"的意思。
对于那句话里Right()、Left()函数,就是起到了分别从dc对象里697x~421y坐标上取得颜色值(十进制)强制转换为16进制格式(&H00BBGGRR格式)后,分别取出R、G、B的数值的作用。
整句程序看起来,其作用就是取出一个像素的RGB值,分解成R、G、B以后又重新组合成一个RGB值,可前后却是一样的、没有变化。因此可以简写成:"&H" & Right(Hex(GetPixel(dc, 697, 421)),6) 的,或者,直接使用 GetPixel(dc,697,421) 我看也没什么不妥。
比较长的表达式,按照优先级从内向外分解,就明白是什么意思了。
GetPixel(dc, 697, 421) 获取设备dc的(697,421)像素点的颜色,返回值是Long类型,假设值=12345
Hex(GetPixel(dc, 697, 421)) 将取得的颜色值转换为16进制字符串,Hex(12345)="3039"
Right(Hex(GetPixel(dc, 697, 421)), 2) 取得16进制字符串的右边两位,即一个字(Word)的低位,Right("3039",2)="39"
"&H" & Right(Hex(GetPixel(dc, 697, 421)), 2) 将这个低位字符串前面加&H,重新转化为一个字节类型,&H39=57
RGB(字节1,字节2,字节3) 将3个字节的数据还原成一个Long类型的真彩(RGB)颜色值,VB可以将此颜色值用Pset画到图像框控件上