【问题标题】:Windows Constants for Ctrl+X, Ctrl+C, and Ctrl+VCtrl+X、Ctrl+C 和 Ctrl+V 的 Windows 常量
【发布时间】:2010-12-30 03:45:23
【问题描述】:

我写了一些旧的 MFC 代码,我正在“更新”一点。我在窗口类的 OnChar() 处理程序中有以下代码。

我真的不喜欢使用像 0x18 这样的常量。我想让代码更具可读性。我知道我可以声明自己的,但是这些值没有 Windows 宏吗?我在网上找不到任何关于此的内容。

// Check for clipboard commands
switch (nChar)
{
    case 0x18: // Ctrl+X - Cut
        OnEditCut();
        break;
    case 0x03: // Ctrl+C - Copy
        OnEditCopy();
        break;
    case 0x16: // Ctrl+V - Paste
        OnEditPaste();
        break;
}

【问题讨论】:

  • 您确定实际使用了代码,并且热键没有被其他东西(如加速器表)处理吗?在我看来这是错误的,因为我希望字符代码是“X”、“C”和“V”,并且要检查单独的标志参数以查看是否按住 ctrl。不过,也许我忘记了 OnChar 是如何工作的。
  • 毫无疑问,上面的代码按照描述的方式工作。

标签: windows mfc character-codes


【解决方案1】:

上面有没有从 nChar 中减去偏移量的代码?

这些值是字母在字母表中的位置,但我认为字符代码通常不会这样工作。 (我已经很久没用过这个了,所以也许我记错了。)

无论如何,您拥有的代码片段实际上是这样的(至少在使用 ASCII 字符排序的体系结构上,即字母顺序):

// Check for clipboard commands
switch (nChar)
{
    case ('X' - 'A' + 1): // Ctrl+X - Cut
        OnEditCut();
        break;
    case ('C' - 'A' + 1): // Ctrl+C - Copy
        OnEditCopy();
        break;
    case ('V' - 'A' + 1): // Ctrl+V - Paste
        OnEditPaste();
        break;
}

正如我在其他评论中提到的,我希望有一些其他代码检查 Ctrl 是否被按住。

【讨论】:

  • 'X'-'@' IMO 更好
  • @6502,很公平。我发现我这样做的方式更清晰,因为我不太可能记得 @ 在 ASCII 表中出现在 A 之前,但这是一个品味问题。
  • @Leo:#define CTRL(x) ((x)-'@') 呢?这样代码就变成了case CTRL('X'):...
  • @Leo:是的,我明白为什么这对你来说很奇怪——我也一样。但是我的代码肯定不会改变 nChar,而且我确实在网上找到了一些使用我正在使用的值的参考资料。您提供的代码似乎不那么随意了,但可能没有更多的自我记录。
  • @6502:是的,这会使代码更加自我记录。当然,宏仍然看起来很奇怪。就此而言,我可以只做#define CTRL_X 0x18。我不确定是否值得花更多时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 2021-12-06
  • 2016-01-19
  • 1970-01-01
  • 2019-02-01
  • 2017-06-04
  • 2011-06-04
相关资源
最近更新 更多