在过去的几天里,我一直在互联网上寻找我的问题的答案,但没有运气。
因此,我试图了解常量在程序中的作用以及它们在类中的引用方式。
我一直在查看 Scintilla 的源代码,并且已经看到有几个值,例如:
public const int SC_WRAP_NONE = 0;
public const int SC_WRAP_WORD = 1;
public const int SC_WRAP_CHAR = 2;
public const int SC_WRAP_WHITESPACE = 3;
这些位于 NativeMethods.cs 文件(此处)中。
我找到了解释其中一些是枚举的文档( here )。上述示例是自动换行的枚举(按单词、字符或空格换行)。
但是,有一些常量定义如下:
public const int SCI_START = 2000;
public const int SCI_OPTIONAL_START = 3000;
public const int SCI_LEXER_START = 4000;
public const int SCI_ADDTEXT = 2001;
public const int SCI_ADDSTYLEDTEXT = 2002;
public const int SCI_INSERTTEXT = 2003;
public const int SCI_CHANGEINSERTION = 2672;
public const int SCI_CLEARALL = 2004;
public const int SCI_DELETERANGE = 2645;
public const int SCI_CLEARDOCUMENTSTYLE = 2005;
//
// ... list continues
//
public const int SCI_SETWRAPINDENTMODE = 2472;
public const int SCI_GETWRAPINDENTMODE = 2473;
如果将它们用作枚举,我想知道为什么它们以2000
.
不仅如此,在类的实现中(以SCI_SETWRAPINDENTMODE
和SCI_GETWRAPINDENTMODE
常量为例,值的使用方式如下:
public WrapIndentMode WrapIndentMode
{
get
{
return (WrapIndentMode)DirectMessage(NativeMethods.SCI_GETWRAPINDENTMODE);
}
set
{
var wrapIndentMode = (int)value;
DirectMessage(NativeMethods.SCI_SETWRAPINDENTMODE, new IntPtr(wrapIndentMode));
}
}
这些值使用DirectMessage
函数(类似于微软的SendMessage
函数)发送到 Scintilla。但是,我要弄清楚的是应用程序如何从接收枚举值到(在这种情况下)包装文本。这与.dll
文件有关吗?
所以我的问题是:
- 为什么有些枚举以如此大的引用(> 2000)开头?
- 应用程序如何知道如何处理这些值以产生所需的输出。
- 最重要的是,我如何创建自己的函数,可以通过向它们发送枚举值来执行操作,以及程序如何知道如何处理我的枚举值?
如果可能的话,我希望有人为我逐步分解并解释这里发生的事情的一般过程。
目前我的印象是枚举值被发送到.dll
它调用方法的文件中,但我可能还差得很远。