GDI之颜色RGB
1. 颜色类型的定义
typedef unsigned char BYTE;//1Byte typedef unsigned short WORD;//2Byte typedef unsigned long DWORD;//4Byte typedef DWORD COLORREF; typedef DWORD *LPCOLORREF;
COLORREF是4字节(32位)变量,用于描述一个颜色,对应 0x00bbggrr ,生成24位真彩色。
2. RGB宏
#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
注:强制类型转换符() > 乘除法 > 二元加减法 > 按位与 & > 按位或 |
RGB宏函数的功能是把红、绿、蓝三个数值合并到一个COLORREF类型数值中,例如:COLORREF cl = RGB(255,255,0);
颜色 | RGB | 反色 |
白色 | RGB(255,255,255) | 黑色 |
黑色 | RGB(0,0,0) | 白色 |
红色 | RGB(255,0,0) | 青色 |
青色 | RGB(0,255,255) | 红色 |
绿色 | RGB(0,255,0) | 紫色 |
紫色 | RGB(255,0,255) | 绿色 |
蓝色 | RGB(0,0,255) | 黄色 |
黄色 | RGB(255,255,0) | 蓝色 |
浅灰色 | RGB(192,192,192) | 深灰色 |
深灰色 | RGB(128,128,128) | 浅灰色 |
注:凡RGB三个分量值相等都属于不同深浅的灰色
#define GetRValue(rgb) (LOBYTE(rgb)) #define GetGValue(rgb) (LOBYTE(((WORD)(rgb)) >> 8)) #define GetBValue(rgb) (LOBYTE((rgb)>>16)) #define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8)) #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16)) #define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) #define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) #define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff)) #define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))
A ULONG_PTR is an unsigned long type used for pointer precision. It is used when casting a pointer to a long type to perform pointer arithmetic.
ULONG_PTR是用于指针精度的无符号长类型。 在将指针强制转换为long类型以执行指针算术时使用。
ULONG_PTR 就是 ULONG ,4Byte
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。