0

我正在开发一个应该翻译用户输入的项目,但这不是问题。事实上,我是 libmotif 的新手,我想要一个切换按钮来选择翻译方式(法语到意大利语或意大利语到法语)。因此,我在这个菜单栏上已经有一个级联按钮,我收到了这个警告:警告:名称:main_list 类:XmRowColumn Attempt to add wrong child type to a homogeneous RowColumn widget

警告:在 XtAddCallback 中找不到回调列表

此外,我可以将切换按钮放在其他功能的参数中以查看他的状态吗?

//Création de la fenêtre principal
Widget main_window = XtVaCreateManagedWidget("main_window", xmMainWindowWidgetClass, top_widget, NULL) ;

//Menu
Widget menu_bar = XmCreateMenuBar(main_window, (String) "main_list", NULL, 0);
XtManageChild(menu_bar);
Widget quit = XtVaCreateManagedWidget("Quit", xmCascadeButtonWidgetClass, menu_bar,NULL);

Widget toggle = XtVaCreateManagedWidget("Fr vers It", xmToggleButtonWidgetClass, menu_bar, NULL);
//Callbacks
XtAddCallback(quit, XmNactivateCallback, quit_call, NULL);
XtAddCallback(toggle,XmNactivateCallback, toggle_call, NULL);
4

1 回答 1

0

您只能将 CascadeButton 或 CascadeButtonGadget 附加到菜单栏。您不能在其上放置切换按钮。您可以创建一个 PullDown 并将 Toggle 按钮附加到它

#include <Xm/RowColumn.h>
#include <Xm/MainW.h>
#include <Xm/CascadeB.h>
#include <Xm/SeparatoG.h>
#include <Xm/PushBG.h>
#include <Xm/ToggleBG.h>

main(argc, argv)
int argc;
char *argv[];
{
    Widget toplevel, MainWindow, menuBar, FilePullDown;
    XmString    label_str;
    XtAppContext app;

    XtSetLanguageProc (NULL, NULL, NULL);

    toplevel = XtVaAppInitialize (&app, "Program", NULL, 0,
        &argc, argv, NULL, NULL);

    MainWindow = XtVaCreateManagedWidget ("mainWindow",
        xmMainWindowWidgetClass, toplevel,
        XmNscrollingPolicy,  XmAUTOMATIC,
        NULL);

    menuBar = XmCreateMenuBar (MainWindow, "menuBar", NULL, 0); 


    FilePullDown = XmCreatePulldownMenu (menuBar, "Language", NULL, 0);


    label_str = XmStringCreateLocalized ("Language or Exit");
    XtVaCreateManagedWidget ("File", 
        xmCascadeButtonWidgetClass, menuBar,
        XmNlabelString,  label_str,
        XmNmnemonic,    'F',
        XmNsubMenuId,    FilePullDown,
        NULL);
    XmStringFree (label_str); 

    /* Now add the menu items */
    XtVaCreateManagedWidget ("Italian or French",
        xmToggleButtonGadgetClass, FilePullDown, NULL);

    XtVaCreateManagedWidget ("separator",
        xmSeparatorGadgetClass, FilePullDown, NULL);

    XtVaCreateManagedWidget ("Exit",
        xmPushButtonGadgetClass, FilePullDown, NULL);

    XtManageChild (menuBar);

    XtRealizeWidget (toplevel);
    XtAppMainLoop (app);
}
于 2020-08-05T16:36:51.857 回答