【问题标题】:Is there a simple way to create a modal child window that accept keyboard input in Win32 SDK?有没有一种简单的方法来创建一个在 Win32 SDK 中接受键盘输入的模态子窗口?
【发布时间】:2012-06-29 04:50:45
【问题描述】:

我现在正在编写一个 Win32 SDK 应用程序。我需要创建一个模态子窗口以从多个选项中进行选择。我的设计是:只需将它们显示在子窗口上,如果用户按下键 1,则选择第一个选项。其他选项相同。选择完成后,子窗口会自动关闭。

我的问题是,有没有一种简单的方法来创建这样一个子窗口?我找到了两种方法,都有一些无聊的步骤。

第一种方法是创建对话框资源并使用DialogBox函数。它可以轻松创建模态子窗口。但是由于它是一个模态对话框,系统已经过滤掉了所有的键盘消息。我需要使用一些特殊的技术,比如消息挂钩或其他东西,来获取这些消息。

第二种方式是注册一个类,直接调用CreateWindow(Ex)函数。它可以轻松地创建一个带有键盘消息的窗口。但似乎将其设置为模态对话框很无聊。我需要手动禁用父窗口,设置子窗口前景,为这个窗口创建一个完整的消息循环,并在父窗口销毁后手动启用它。

我已经寻找一种简单的方法来创建具有这两个功能的窗口。但是,除了上述两种方式之外,没有发现任何线索。我不确定这种方式是否存在。谁能告诉我?感谢您的回复。

【问题讨论】:

  • 您好,您使用的是什么编程语言?是 C/C++ 吗?另外,您在使用 Visual Studio 吗?
  • 我正在使用 C。我的编译器是 Mingw/gcc 4.6.1。我不在VS中工作。但是,我认为这不会改变行为。

标签: c windows winapi keyboard dialog


【解决方案1】:

在我看来,使用 Win32 SDK 确实很复杂,尤其是在创建 GUI 时(通常即使创建一个简单的窗口也可能是一个挑战)。因此向您推荐以下内容:

  1. Microsoft 有一个非常简洁的 API,称为 MFC,它随 Visual Studio 一起提供(我不知道你是否可以在 Visual Studio 之外使用 MFC),并且它有几个包装 Windows SDK 方法的 C++ 类,使事情成为对你来说容易多了。此外,Visual Studio 允许您使用拖放界面来创建您的 GUI(我觉得这非常有用)。

  2. 您可以使用第三方 API 来创建您的 GUI 元素,例如 GTK 或 QT。两者都是用 C/C++ 编写的,都是非常好的 API。希望它们能让您在设计 GUI 时更轻松。

  3. 如果您不需要使用 C/C++,那么我强烈建议您使用 Java 或 C# 等高级语言来开发您的应用程序。我认为用它们来设计你的 GUI 应该比在 C/C++ 中做同样的事情要少得多。

【讨论】:

  • 谢谢^^。我知道 MFC 和 C# WinForm(虽然我不喜欢 MFC),而且我已经用 C# 实现了它。这个应用程序很简单,因为它主要用于学习win32 api,因为我对可执行文件大小和性能有一点强迫=_=;;;无论如何,如果最后没有找到简单的方法,我会尝试第二种。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
相关资源
最近更新 更多