winforms 从颜色到整数的转换,用于SETCHARFORMAT meaaage

sirbozc5  于 2023-10-23  发布在  其他
关注(0)|答案(3)|浏览(141)

我想转换一个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);
ehxuflar

ehxuflar1#

这个很好用。你在做什么不一样的事吗?

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
}

编辑:(看到你的编辑后)
好吧。你问倒我了,我真的不懂这些。但是:
如果你去MSDN的页面上CHARFORMAT2这里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
最高有效字节(MSB)(用AA表示)是alpha分量值。
所以也许这就是问题所在。但是,再说一次,**我真的不知道这些东西!”我只是做了一些搜索。

ih99xse1

ih99xse12#

看看这个对你是否有效

int myColorVal = myColor.ToArgb();
someobject.crTextColor = Color.FromArgb( myColorVal );
jmp7cifd

jmp7cifd3#

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

Int32 key = color.R << 16 | color.G << 8 | color.B;

相关问题