【问题标题】:Close button of CCommanBar does not exit the applicationCCommanBar 的关闭按钮不退出应用程序
【发布时间】:2017-08-08 08:16:41
【问题描述】:

我正在创建一个智能设备应用程序,它以这种方式创建命令栏:

if (!m_wndCommandBar.Create(this) ||
        !m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME) ||
        !m_wndCommandBar.AddAdornments(dwAdornmentFlags))
    {
        TRACE0("CommandBar no se pudo crear\n");
        return -1;      // No se pudo crear
    }

    m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() | CBRS_SIZE_FIXED);

这样,一个带有关闭按钮的命令栏就被创建了。

这是一个用于智能设备的 SDI 应用程序。

当我按下关闭按钮时,应用程序窗口消失,但应用程序继续运行。我意识到这一点是因为当我使用 Visual Studio 2008 进行调试时,调试器没有完成。

我能做什么?

【问题讨论】:

  • 向我们展示如何添加关闭按钮以及如何退出应用程序的代码。
  • 这就是问题所在。我没有添加那个按钮。系统自动添加一些按钮(开始按钮、sip 按钮和关闭按钮)。我意识到关闭按钮只会隐藏应用程序,因为我可以在任务管理器中看到它。我只添加了自己的 IDR_MAINFRAME 菜单。

标签: visual-c++ mfc windows-mobile


【解决方案1】:

Windows Mobile 上的默认按钮和系统控件不会关闭而是隐藏(最小化)窗口。所以应用会一直在后台运行。

您需要添加自定义代码来结束您的应用。例如,您可以使用单独的按钮或菜单项来执行此操作,然后执行 PostQuitMessage 或其他代码来结束主进程(在终止任何创建的后台线程之后)。

您还可以修改窗口样式以包含关闭(确定)按钮。

CommandBar_AddAdornments(hwnCB, 0, 0);

添加标准命令栏控件,通常是关闭 (X) 和帮助选项。您可以使用上述调用的 CMDBAR_OK 标志来添加退出/结束 (OK) 按钮。您的消息循环将获得一条以 IDOK 作为消息 ID 的 WM_COMMAND 消息。这可用于使用 PostQuitMessage() 退出应用程序。见MSDN

对于您的代码:

 m_wndCommandBar.AddAdornments(dwAdornmentFlags))

可以改为:

 m_wndCommandBar.AddAdornments(dwAdornmentFlags || CMDBAR_OK))

【讨论】:

  • 我添加了一个确定按钮,通过控制 WM_COMMAND 我可以发布一条退出消息,以便应用程序终止,调用所有类的析构函数来释放内存。现在一切都很好,我将尝试将 OK 文本更改为其他文本或图标。我希望这是可能的。
  • 如果使用CMDBAR_OK,则无法更改OK。 Windows Mobile 的限制非常严格。
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多