首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Motif创建选项菜单

用Motif创建选项菜单
EN

Stack Overflow用户
提问于 2021-04-06 09:56:11
回答 1查看 78关注 0票数 1

我正在尝试创建一个使用Motif工具包的选项菜单。

如果我试一试,它会起作用:

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <Xm/RowColumn.h>

Widget make_menu_item(char *item_name, Widget menu);

/* XT/XM RELATED VARIABLES */
XtAppContext context;
XmStringCharSet char_set = XmSTRING_DEFAULT_CHARSET;

/* WIDGETS */
Widget toplevel; 
Widget form;
Widget pulldown_menu;
Widget option_menu;
Widget option_item[100];
int option_items = 0;

int main(int argc, char *argv[]) {

    Arg al[10];
    int ac;

    /* CREATE TOP SHELL WIDGET */
    toplevel = XtAppInitialize(&context, "", NULL, 0, &argc, argv, NULL, NULL, 0);

    /* RESIZE TOP LEVEL*/
    ac = 0;
    XtSetArg(al[ac], XmNheight, 900); ac++;
    XtSetArg(al[ac], XmNwidth, 600); ac++;
    XtSetValues(toplevel, al, ac);

    /* PULLDOWN MENU */
    ac = 0;
    pulldown_menu = XmCreatePulldownMenu(toplevel, "pulldown_menu", al, ac);

    ac = 0;
    XtSetArg(al[ac], XmNsubMenuId, pulldown_menu); ac++;
    XtSetArg(al[ac], XmNlabelString, XmStringCreate("Pulldown Menu", char_set)); ac++;
    option_menu = XmCreateOptionMenu(toplevel, "option_menu", al, ac);
    XtManageChild(option_menu);
    make_menu_item("FOO", pulldown_menu);
    make_menu_item("BAR", pulldown_menu);

    /* REALIZE TOPLEVEL */
    XtRealizeWidget(toplevel);
    XtAppMainLoop(context);

    return 0;

}

Widget make_menu_item(char *item_name,  Widget menu) {

    int ac;
    Arg al[10];
    Widget item;

    ac = 0;
    XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR(item_name, char_set)); ac++;
    item = XmCreatePushButton(menu, item_name, al, ac);
    XtManageChild(item);
    /*XtAddCallback(item, XmNactivateCallback, menuCB, client_data);*/
    XtSetSensitive(item, True);
    return(item);

}

但是,当我尝试使用form作为PulldownMenu和OptionMenu的父级时,它不起作用。如何将选项菜单附加到窗体上?为什么在这种情况下没有显示选项菜单?

代码语言:javascript
复制
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <Xm/RowColumn.h>

Widget make_menu_item(char *item_name, Widget menu);

/* XT/XM RELATED VARIABLES */
XtAppContext context;
XmStringCharSet char_set = XmSTRING_DEFAULT_CHARSET;

/* WIDGETS */
Widget toplevel; 
Widget form;
Widget pulldown_menu;
Widget option_menu;
Widget option_item[100];
int option_items = 0;

int main(int argc, char *argv[]) {

    Arg al[10];
    int ac;

    /* CREATE TOP SHELL WIDGET */
    toplevel = XtAppInitialize(&context, "", NULL, 0, &argc, argv, NULL, NULL, 0);

    /* RESIZE TOP LEVEL*/
    ac = 0;
    XtSetArg(al[ac], XmNheight, 900); ac++;
    XtSetArg(al[ac], XmNwidth, 600); ac++;
    XtSetValues(toplevel, al, ac);

    /* CREATE FORM MANAGER WIDGET */
    form = XmCreateForm(toplevel, "form", al, ac);

    /* PULLDOWN MENU */
    ac = 0;
    pulldown_menu = XmCreatePulldownMenu(form, "pulldown_menu", al, ac);

    ac = 0;
    XtSetArg(al[ac], XmNsubMenuId, pulldown_menu); ac++;
    XtSetArg(al[ac], XmNlabelString, XmStringCreate("Pulldown Menu", char_set)); ac++;
    option_menu = XmCreateOptionMenu(form, "option_menu", al, ac);
    XtManageChild(option_menu);
    make_menu_item("FOO", pulldown_menu);
    make_menu_item("BAR", pulldown_menu);

    /* REALIZE TOPLEVEL */
    XtRealizeWidget(toplevel);
    XtAppMainLoop(context);

    return 0;

}

Widget make_menu_item(char *item_name,  Widget menu) {

    int ac;
    Arg al[10];
    Widget item;

    ac = 0;
    XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR(item_name, char_set)); ac++;
    item = XmCreatePushButton(menu, item_name, al, ac);
    XtManageChild(item);
    /*XtAddCallback(item, XmNactivateCallback, menuCB, client_data);*/
    XtSetSensitive(item, True);
    return(item);

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-06 17:53:14

在行后添加:

XtManageChild(option_menu);

管理表单的代码:

XtManageChild(表格);

这将显示选项菜单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66966471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档