我想将object Color
转换为Int
,以便将他加入crTextColor
成员,因此我使用方法myColor.ToArgb()
,但颜色会发生变化,并显示不同的颜色。
为什么会这样?
这是代码:
CHARFORMAT2 fmt = new CHARFORMAT2();
fmt.cbSize = Marshal.SizeOf(fmt);
// check if the text contains CFE_AUTOCOLOR effect
SendMessage(new HandleRef(this, Handle), EM_GETCHARFORMAT, SCF_SELECTION, ref fmt);
if ((fmt.dwEffects & CFE_AUTOCOLOR) == CFE_AUTOCOLOR)
{
fmt.dwEffects -= CFE_AUTOCOLOR;
}
fmt.dwMask = CFM_COLOR;
Color c = Color.Red;
fmt.crTextColor = c.ToArgb();
SendMessage(new HandleRef(this, Handle), EM_SETCHARFORMAT, SCF_SELECTION, ref fmt);
答案 0 :(得分:0)
这很好用。你在做些不同的事吗?
int crTextColor;
public Form1()
{
InitializeComponent();
BackColor = Color.Aqua;
crTextColor = BackColor.ToArgb();//To number
Text = crTextColor.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
BackColor = Color.FromArgb(crTextColor);//From number
}
编辑:(看到你的编辑后)
行。所以你让我在那里,我真的不知道这些东西。但是:
如果您转到CHARFORMAT2
此处http://msdn.microsoft.com/en-us/library/windows/desktop/bb787883%28v=vs.85%29.aspx的MSDN页面并在其中搜索crTextColor
,您会找到(作为第五种情况)对其的解释。它说它的类型是:COLORREF。如果您点击该链接,则表示它是RGB
。点击RGB
链接,转到此处http://msdn.microsoft.com/en-us/library/windows/desktop/dd162937%28v=vs.85%29.aspx,其中显示:
C++
COLORREF RGB(
BYTE byRed,
BYTE byGreen,
BYTE byBlue
);
另一方面 - 如果你到这里http://msdn.microsoft.com/en-us/library/system.drawing.color.toargb.aspx,你会看到(在“备注中”)Color.ToArgb
是ARGB
:
“由AA表示的最重要字节(MSB)是alpha 组件价值。“
所以或许这就是问题所在。但是,再一次,我真的不知道这些东西!我只是做了一些搜索。
答案 1 :(得分:0)
看看这是否适合你
int myColorVal = myColor.ToArgb();
someobject.crTextColor = Color.FromArgb( myColorVal );
答案 2 :(得分:0)
我已经使用二进制和移位运算符完成了此操作。
Int32 key = color.R << 16 | color.G << 8 | color.B;