【问题标题】:How do I add an icon to the taskbar for a simple win32 dialog?如何在任务栏上添加一个简单的 win32 对话框的图标?
【发布时间】:2014-04-05 22:55:58
【问题描述】:

我有一个非常简单的应用程序,它有几个按钮和文本字段。我希望能够为其添加一个图标,因为当它位于其他窗口后面时,您看不到它是否正在运行。最简单的方法是什么?

我尝试创建一个隐藏的窗口,这有点用,但是当您单击任务栏图标时,您会看到其他窗口闪烁,我似乎无法将其集中在对话框上。

【问题讨论】:

  • 默认情况下,顶级无主窗口将具有关联的任务栏按钮。你对你的应用做了什么来阻止这种情况发生。
  • 我拥有的是一个基本的 WinMain,它调用 RegisterClassEx/CreateWindowEx。创建完成后,我会显示使用 VS 资源编辑器创建的对话框。我可以让它显示图标,但单击图标不会最小化/最大化对话框,而是在使用 CreateWindowEx 创建的窗口上执行此操作
  • 您需要做的是使用您使用CreateWindowEx 创建的窗口作为应用程序的主窗口。为什么使用对话框作为主窗口?这似乎是问题所在。
  • 我只想使用资源编辑器来创建我的 GUI。我可以在 CreateWindowEx 中使用这个窗口吗?
  • 我添加了一个答案,解释了我对您应该如何解决这个问题的理解。本质上,您需要使对话框成为应用中唯一的顶级窗口。

标签: winapi dialog icons


【解决方案1】:

我认为根本问题是您有一个隐藏的顶级窗口,它拥有您的对话框。该对话框充当主窗口,但任务栏显示与隐藏窗口关联的按钮。

所以我想你需要做的是完全删除隐藏的窗口。这意味着摆脱RegisterClassCreateWindow 调用。

我假设您以非模式显示对话框。在这种情况下,您使用 CreateDialog 和 ShowWindow 来显示它。请特别注意文档的这一部分:

CreateDialog 返回后,应用程序使用 ShowWindow 函数显示对话框(如果尚未显示)。应用程序使用 DestroyWindow 函数销毁对话框。要支持键盘导航和其他对话框功能,对话框的消息循环必须调用 IsDialogMessage 函数。

当然,如果您以模态方式显示对话框,您可以继续这样做。在这种情况下,您的 WinMain 函数非常简单。这只是给DialogBox的一个电话。不需要消息循环,因为模态对话框的消息循环处理消息。

【讨论】:

  • 非常感谢,这很好用!出于某种原因,我认为我需要使用 CreateWindowEx 来获取我的消息循环。我刚刚将代码删除到 RegsiterClassEx/CreateWindowEx 并将 IsDialogMessage 添加到消息循环中,现在一切正常。我的播放列表创建者现在完成了一个单独的线程,以便 GUI 始终保持响应:)
  • 很高兴这对您有所帮助
  • @allanmb:如果此答案解决了您的问题,请考虑接受并点赞它,以便查看此帖子的其他人可以更轻松地发现它有帮助。最好的问候。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2013-06-11
  • 2010-10-07
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多