#define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
这是个带三个参数的宏
首先将r,g,b强制转换成BYTE型,之后g左移8位,b左移16位,并把结果分别强制转换成DWORD型,最后将r,左移8位后的g,还有左移16位后的b三者做按位或,所得的结果强制转换成COLORREF类型
分解后的表达式:
(
(COLORREF)
(
(
(BYTE)(r)|
((WORD)((BYTE)(g))<<8)
)
|(((DWORD)(BYTE)(b))<<16)
)
)
//---------------------------------------------------------------------------------------------------------------------------------------------------
DWORD 类型的变量赋值:
1、数组法
DWORD dw;
char* pdw = &dw;
pdw[0] = 1;
pdw[1] = 2;
pdw[2] = 3;
pdw[3] = 4;
2、指针法
DWORD d;
BYTE *pByte = &d;
pByte[0]=
pByte[1]=
pByte[2]=
pByte[3]=
3、位移法
DWORD dwOne = 1;
DWORD dwData = 0;
// 将【dwData】的最高位置1
dwData |= dwOne<<31;
// 将【dwData】的最低位置1
dwData |= dwOne;
3、联合法
需要提前判断CPU为big endian还是little endian;
如果是little endian
union
{
struct
{
BYTE b0; BYTE b1; BYTE b2; BYTE b3;
};
DWORD dw;
};
b0=flag0;
b1=flag1;
b2=flag2;
b3=flag3;