C++ 将COLORREF转换为常量字符

C++ 将COLORREF转换为常量字符,c++,mfc,C++,Mfc,如何将COLORREF的值转换为const char。目前,我尝试按原样使用该变量,但从编译器中得到以下错误 错误106错误C2664:“HC\U集合\U颜色”:无法将参数1从“COLORREF”转换为“const char*”c:\b\U gdm\U src\U wtx\gdm\U pda\src\gdmsmallsampledlg3d.cpp 2289 谢谢。您可以选择一个并返回如下字符串表示形式: void COLORREF2string(COLORREF cr, char* buffer

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

错误106错误C2664:“HC\U集合\U颜色”:无法将参数1从“COLORREF”转换为“const char*”c:\b\U gdm\U src\U wtx\gdm\U pda\src\gdmsmallsampledlg3d.cpp 2289


谢谢。

您可以选择一个并返回如下字符串表示形式:

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;
然后像这样使用它:

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;

如果你愿意,你可以自己制作一个更华丽的表示,比如
R:xb:xg:x
,但是记住要相应地调整缓冲区的大小

您可以选择一个并返回如下所示的字符串表示形式:

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;
然后像这样使用它:

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;

如果你愿意,你可以自己制作一个更华丽的表示,比如
R:xb:xg:x
,但是记住要相应地调整缓冲区的大小

假设这是您试图遵循的规范:set_color.html#g406b806a5ed60dd9950fb12b0ce2077c“>http://www.openhsf.org/docs_hsf/Hoops3DGS/hc_ref_manual/group_设置\u color.html#g406b806a5ed60dd9950fb12b0ce2077c

您需要一个格式为“(r=0.5g=1b=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 color=RGB(128255,0);
细流ss;

ss假设这是您试图遵循的规范:set_color.html#g406b806a5ed60dd9950fb12b0ce2077c“>http://www.openhsf.org/docs_hsf/Hoops3DGS/hc_ref_manual/group_设置\u color.html#g406b806a5ed60dd9950fb12b0ce2077c

您需要一个格式为“(r=0.5g=1b=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 color=RGB(128255,0);
细流ss;

ss您是否考虑过编译器会抱怨,因为COLORREF不是常量字符,您不能将其视为常量字符?您想如何将其表示为字符串?
COLORREF
DWORD
的类型定义,通常是
unsigned long
的类型定义。即使使用了正确的类型转换,将其表示为
const char*
也没有多大意义。您是否考虑过编译器会抱怨,因为COLORREF根本不是一个const char,您不能将其视为一个const char?您希望如何将其表示为字符串?
COLORREF
DWORD
的typedef,这是一个
无符号long
的typedef最常见。即使使用了正确的强制转换,将其表示为
const char*
也没有多大意义。