首页 > 解决方案 > Allegro 5 在 Windows 中显示菜单,但在 linux 中不显示

问题描述

我最近已更改为 Allegro 5 lib。一切正常,我选择了它的“跨平台”。我有带有 2 个 Virtual Box Mahines 的 Windows 10:一个带有 Ubuntu 12.04,另一个带有 Fedora 34。该系统还可以使用 Windows 10 和 Ubuntu 12.04 双引导。所以我决定看看我的应用程序是否可以在 Linux 上运行。

当我单击窗口并打开一个对话框以选择要加载的文件时,Allegro DIALOG 工作正常。

然后我添加了一个窗口菜单,但这次我也在 Ubuntu 和 Fedora 下编译了 allegro 应用程序,但它没有显示菜单。该应用程序编译得很好,我改变了一些东西,因为它是一个 Winapi (是的,我没有调用任何像 API 函数这样的不可移植代码)应用程序到 Allegro 5 但正如我所说的在 linuxes 下编译和链接很好,但两者都没有当我运行它时,Ubuntu 和 Fedora 都会显示菜单。

知道为什么会这样吗?

我的制作菜单代码:

#pragma once
#include <allegro5/allegro5.h>
#include <allegro5/allegro_native_dialog.h>
enum {
    FILE_ID = 1,
    FILE_LOADROM_ID,
    FILE_CLOSEROM_ID,
    FILE_EXIT_ID,
    EMULTOR_RESET_ID,
    WINDOW_1X,
    WINDOW_2X,
    WINDOW_3X,
    WINDOW_4X
};
ALLEGRO_MENU_INFO main_menu_info[] = {
   ALLEGRO_START_OF_MENU("&File", FILE_ID),
      { "&Load Rom", FILE_LOADROM_ID, 0, NULL },
      { "&Close Rom", FILE_CLOSEROM_ID, 0, NULL },
      ALLEGRO_MENU_SEPARATOR,
      { "E&xit", FILE_EXIT_ID, 0, NULL },
      ALLEGRO_END_OF_MENU,

   ALLEGRO_START_OF_MENU("&Emulator", 0),
      { "&Reset", EMULTOR_RESET_ID, 0, NULL },
      ALLEGRO_END_OF_MENU,
   
   ALLEGRO_START_OF_MENU("&Window", 0),
      { "&1X", WINDOW_1X, 0, NULL },
      { "&2X", WINDOW_2X, 0, NULL },
      { "&3X", WINDOW_3X, 0, NULL },
      { "&4X", WINDOW_4X, 0, NULL },
      ALLEGRO_END_OF_MENU,

   ALLEGRO_END_OF_MENU
};
class Menu
{

public:
    void Init(ALLEGRO_DISPLAY* allegro_display, ALLEGRO_EVENT_QUEUE * queue)
    {
        al_init_native_dialog_addon();
        ALLEGRO_MENU* menu;
        menu = al_build_menu(main_menu_info);
        al_set_display_menu(allegro_display, menu);
        al_register_event_source(queue, al_get_default_menu_event_source());
    }
};

然后我在linux下编译:

g++ app.cpp -o app -lallegro -lallegro_audio -lallegro_dialog

我已经在 linux 下安装了 Allegro 5:

费多拉:sudo dnf install allegro5* Ubuntu:sudo apt install allegro5*

我已经在虚拟机中的 linux 下进行了测试,也在实际安装中进行了测试。

有什么问题?

标签: menuexecutionallegro

解决方案


推荐阅读