关于MFC的颜色怎么对应Duilib中的AS颜色?

DB伟 2018-09-26 08:57:19
最近在写一个小软件,是MFC结合DUILIB做的界面,我需要使用MFC的颜色选择工具选择颜色后传给DUILIB控件让其显示,但是MFC的这个颜色值在在DUILIB中都无效,其中MFC获取的颜色值是DWORD类型的。我直接用颜色提取工具提取直接传AS十六进制的进去就会正常显示,请问怎么将DWORD转换成AS的,如红色的十进制是255,AS=0xFFFF0000;
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2018-10-06
  • 打赏
  • 举报
回复
引用 楼主 zggzgw 的回复:
最近在写一个小软件,是MFC结合DUILIB做的界面,我需要使用MFC的颜色选择工具选择颜色后传给DUILIB控件让其显示,但是MFC的这个颜色值在在DUILIB中都无效,其中MFC获取的颜色值是DWORD类型的。我直接用颜色提取工具提取直接传AS十六进制的进去就会正常显示,请问怎么将DWORD转换成AS的,如红色的十进制是255,AS=0xFFFF0000;


微软颜色应该是高字节不为0的时候,使用早期的微软EGA颜色,(0-15)16色,如果是0,则是直接的颜色值
xiaohuh421 2018-09-30
  • 打赏
  • 举报
回复
反过来封装也是一样的. 只是要注意透明度. 必须填写成FF, 否则是全透明, 导致看不到颜色. COLORREF cf=RGB(255,0,0); cf |= 0xFF000000; 这时, cf就是不透明红色了.
xiaohuh421 2018-09-30
  • 打赏
  • 举报
回复
在duilib中, 颜色是有4个字节表示的, 就是一个DWORD. windows中, 4个字节分别表示: ARGB 也就是最高位是透明度, 然后是R,G,B三种颜色. windows是小端的 ; 所以 你的AS = 0xFFFF0000 在内存中 B,G,R,A 所以可以这样取得各种颜色的数据: DWORD val = 0xFFFF0000 BYTE *clr = (BYTE*)&val; b = clr[0]; g = clr[1]; r = clr[2]; a = clr[3];
赵4老师 2018-09-27
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
zgl7903 2018-09-27
  • 打赏
  • 举报
回复
看一下 纯红 纯绿 纯蓝 的数据 有什么规律?
DB伟 2018-09-27
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
COLORREF cf = RGB(,,) ?这个

不行诶;COLORREF cf=RGB(255,0,0),得cf=255,AS=0xFFFF0000,as的十进制是4294901760,所以这个值差的有点大,不知道怎么转换
Eleven 2018-09-26
  • 打赏
  • 举报
回复
COLORREF cf = RGB(,,) ?这个

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧