代码之家  ›  专栏  ›  技术社区  ›  Martin Plante

对于一个在击键时隐藏自己的窗口,预期的行为是什么

  •  1
  • Martin Plante  · 技术社区  · 16 年前

    这是一个主观的问题,但我需要意见。

    我有一个WinForms C#应用程序,它的窗口在特定的击键(回车或转义)后隐藏,并带有可能的修饰符(例如Ctrl-Enter)。当在KeyDown或KeyPress上隐藏时,在my window隐藏自身后变为活动状态的另一个应用程序将接收该击键的KeyUp事件。通常,它不会影响其他应用程序,但其中一些应用程序会对KeyUp作出反应。例如,TweetDeck发送当前在“回车”键上编辑的消息,即使它没有收到KeyDown/KeyPress。

    所以我想,好吧,我会成为一个好公民,我会躲在钥匙上。但这感觉不对。如果我只找钥匙,我在做我责怪别人做的事!如果我试图创建匹配KeyDown/keydup的历史记录,我的代码就过于复杂了(修饰符生成自己的keydup)。

    我该怎么办?一个实现良好的应用程序应该做什么?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Tim    16 年前

    这是一种黑客行为,但是当你收到密钥时,你可以将程序的状态设置为“挂起隐藏”。然后,当您为该序列获取密钥时,重置“挂起状态”,然后隐藏。

    或者,您是否可以在收到密钥down后从消息队列中“吃掉”密钥?

    我不会太担心应用程序处理键而不是键下-就像你指出的-唯一的原因这是一个问题是因为你的应用程序改变活动窗口在中间的关键向下键序列。这是你的责任(国际海事组织)也“吃”关键的信息。您可能只需将钥匙向上而不是向下拨动,不会产生不良副作用。

    编辑

    因此: On key down:显示窗口,指示应用程序将隐藏。 向上键:隐藏窗口

    这是“有状态的”-只有当你收到向下的键和向上的键时,你才能进入隐藏状态-至少我会这么做。99.9999%(猜测)不处理键关闭就可以了。

        2
  •  1
  •   Hans Passant    16 年前

    我想不出有哪个程序可以在KeyUp事件上实现键盘快捷键。这个标准是很久以前通过Windows TranslateAccelerator()API函数设定的。它将WM_键向下转换。Windows窗体使用ProcessCmdKey()实现相同的行为。

        3
  •  -1
  •   James Curran    16 年前

    好吧,我会说“在它成为问题之前,不要担心它”,但我想现在是个问题了。。。。