RGB宏详解

#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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值