【问题标题】:How to create a windows application in C++ showing just a TaskDialog如何在 C++ 中创建仅显示 TaskDialog 的 Windows 应用程序
【发布时间】:2012-01-30 20:30:18
【问题描述】:

我需要在 C++ 中创建一个 Windows 应用程序,它必须只显示一个 TaskDialog(参见 http://msdn.microsoft.com/en-us/library/windows/desktop/bb760540(v=vs.85).aspx)。 TaskDialog 应该显示作为参数传递给命令行的文本。

我可以创建一个“Win32 控制台应用程序”并调用TaskDialog,但随后我会看到控制台的黑色窗口。

我可以创建一个“Windows 应用程序”并在WinMain 中调用TaskDialog,这个解决方案有什么问题吗?

还有什么想法吗?

【问题讨论】:

  • 我假设您使用的是 Visual Studio。如果您打算拥有窗口和对话框,则不想制作控制台应用程序。您可以使用TaskDialogTaskDialogIndirect,但您还需要使用Vista 或Windows 7。

标签: c++ windows winapi winmain taskdialog


【解决方案1】:

我可以创建一个“Windows 应用程序”,然后在 WinMain 中调用 TaskDialog,这个解决方案有什么问题吗?

这是实现这样一个应用程序的方式。这一切都没有问题。当然,您不会在代码中显式创建窗口,也不会运行消息循环。只需拨打TaskDialog

重点是您不需要控制台应用程序,因为正如您所发现的,默认情况下会显示控制台窗口。有两个主要子系统,控制台子系统和 GUI 子系统。后者的名称有些混乱。您不必在 GUI 子系统应用程序中显示 GUI。是否选择这样做取决于您。实际上,选择归结为您是否想要控制台。所以子系统可以更好地命名为控制台和非控制台!

【讨论】:

  • 谢谢。是的,当我写“只是调用TaskDialog”时,我的意思是我不创建窗口也不运行消息循环。
  • 请注意TaskDialog 将为您运行一个消息循环:“TaskDialog 函数创建、显示和操作一个任务对话框。”。在这里可能不会伤害您,但重要的是要了解某些功能会这样做。 (MessageBox 也一样)
  • @MSalters 当然,我的意思是你不想在程序的 WinMain 中显式循环,只需调用 TaskDialog。
【解决方案2】:

您必须创建一个空的 Windows 应用程序。

Windows 应用程序的入口点调用 WinMain,如下所示:

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    //Place your code here
}

这意味着您的解决方案是正确的。您只需确保您的应用程序使用 Comctl32.dll 版本 6。否则 TaskDialog 将失败。

【讨论】:

  • 小幅修正。 TaskDialog 在没有视觉风格的情况下也能正常工作。它只需要 comctl v6。两者并不完全相同。例如考虑 Windows 经典主题。
猜你喜欢
  • 2010-11-26
  • 2013-10-23
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 2012-07-22
相关资源
最近更新 更多