将 COLORREF 转换为 const char

Posted

技术标签:

【中文标题】将 COLORREF 转换为 const char【英文标题】:Convert a COLORREF to a const char 【发布时间】:2011-09-09 15:42:51 【问题描述】:

如何将值从 COLORREF 转换为 const char。目前我尝试按原样使用该变量,但我的编译器出现以下错误。

错误 106 错误 C2664: 'HC_Set_Color' : 无法将参数 1 从 'COLORREF' 转换为 'const char *' c:\b_gdm_src_wtx\gdm_pda\src\gdmsmallsampledlg3d.cpp 2289

谢谢。

【问题讨论】:

您是否考虑过编译器会抱怨,因为 COLORREF 根本不是 const char,您不能像对待它一样对待它? 您想如何将其表示为字符串? COLORREFDWORD 的 typedef,这是 unsigned long 最常见的 typedef。即使您使用了正确的演员表,将其表示为 const char* 也没有多大意义。 【参考方案1】:

你可以取一个并返回一个这样的字符串表示:

void COLORREF2string(COLORREF cr, char* buffer) 
    itoa(GetRValue(cr), buffer, 10);

    buffer += strlen(buffer);
    *buffer = ' ';
    itoa(GetBValue(cr), buffer + 1, 10);

    buffer += strlen(buffer);
    *buffer = ' ';
    itoa(GetGValue(cr), buffer + 1, 10);

然后像这样使用它:

COLORREF c = RGB(34, 54, 12);

char buf[16]; // 16 is big enough to hold any possible RGB combination
              // with spaces between the numbers

COLORREF2string(c, buf);

cout << buf << endl;

哪个会打印

34 54 12

如果您愿意,您可以自己将其设置为像R: x B: x G: x 这样的更高级的表示,但请记住相应地调整缓冲区的大小。

【讨论】:

【参考方案2】:

假设这是您要遵循的规范:set_color.html#g406b806a5ed60dd9950fb12b0ce2077c">http://www.openhsf.org/docs_hsf/Hoops3DGS/hc_ref_manual/group_set_color.html #g406b806a5ed60dd9950fb12b0ce2077c

您需要一个格式为“(r=0.5 g=1 b=0)”的字符串。这是获取它的一种方法:

COLORREF color = RGB(128,255,0);
stringstream ss;
ss << "(r=" << GetRValue(color)/255.0 << " g=" << GetGValue(color)/255.0 << " b=" << GetBValue(color)/255.0) << ")";
HC_Set_Color(ss.str());

【讨论】:

以上是关于将 COLORREF 转换为 const char的主要内容,如果未能解决你的问题,请参考以下文章

将 const char* 转换为 char*

将 Swift 字符串数组转换为 const char * const *

C++CString转换为const char *类型

C++ 将 char 转换为 const char*

将 CString 转换为 const char*

从 unsigned const char * 类型转换为 char const *