0

我想将 , 转换为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);
4

3 回答 3

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这里访问 MSDN 的页面http://msdn.microsoft.com/en-us/library/windows/desktop/bb787883%28v=vs.85%29.aspx并在其中搜索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.ToArgbARGB

“以 AA 表示的最高有效字节 (MSB) 是 alpha 分量值。”

所以也许这就是问题所在。但是,再说一次,我真的不知道这些东西!我只是做了一些搜索。

于 2012-07-26T16:53:53.807 回答
0

看看这是否适合你

int myColorVal = myColor.ToArgb();
someobject.crTextColor = Color.FromArgb( myColorVal );
于 2012-07-26T16:54:06.233 回答
0

我已经使用二进制和移位运算符完成了这项工作。

            Int32 key = color.R << 16 | color.G << 8 | color.B;
于 2019-08-11T17:41:29.400 回答