这是我的代码:

internal enum WindowsMessagesFlags {
    WM_EXITSIZEMOVE      = 0x00000232,
    WM_DISPLAYCHANGE     = 0x0000007e,
    WM_MOVING            = 0x00000216,
}

protected override void WndProc(ref Message m) {
    switch(m.Msg) {
        case (int)WindowsMessagesFlags.WM_DISPLAYCHANGE:
            FixWindowSnapping();
            break;
        case (int)WindowsMessagesFlags.WM_EXITSIZEMOVE:
            SaveWindowProperties();
            break;
        case (int)WindowsMessagesFlags.WM_MOVING:
            KeepProperLocation(ref m);
            break;
    }
}

反正是有为防止铸?

有帮助吗?

解决方案

排序的 - 投m.Msg代替:

protected override void WndProc(ref Message m) {
    switch((WindowsMessagesFlags) m.Msg) {
        case WindowsMessagesFlags.WM_DISPLAYCHANGE:
                FixWindowSnapping();
                break;
        case WindowsMessagesFlags.WM_EXITSIZEMOVE:
                SaveWindowProperties();
                break;
        case WindowsMessagesFlags.WM_MOVING:
                KeepProperLocation(ref m);
                break;
    }
}

您需要投在所有的原因是因为在C#枚举不仅仅是数字 - 他们与该类型相关联的数字。这可以防止操作的方式(无铸造):

HttpStatusCode status = someWindowsMessageFlag;

这显然是一件好事:)当你需要,但是,你可以随时去“内经”(在这种情况下INT)的基本类型。

其他提示

什么是Message.Msg定义为α

我打赌它是的Int32。

我也投注WindowsMessagesFlags是您的类型,但消息是从所述框架。

这意味着你用你自己的枚举提供了一个框架,构建的目标,当然,他们将有关于类型的一些不兼容。

的枚举是强类型,而不仅仅是的数,它是一个使用一个名称中的上下文号。这个名字,上下文,数量,部分不只是数字直接兼容,这就是为什么你需要转换。

一个原因是因为C#目前(4.0)不允许你要写一个隐含的操作过多(一个铸)内的一个扩展方法(相关的问题)用于任何类型,包括一枚举。这将是很好干净转向/从Int16时将与一个弱类型的数据库,例如或类型的弱化的格式,(二进制作家).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top