设置主题的标题 Window

Setting the title of a Motif Window

我正在尝试设置顶级 Motif 2.1 的标题 window。

从 O'Reilly 第六卷 A 中,我看到在 Motif 2.1 中建议 XtVaOpenApplication 创建顶级 Widget。

this appendix 中可以看到 optionsXtNumber(options) 是如何通过参数列表作用于资源的。

我曾尝试在调用程序时使用它来生成可选标志 -title WINDOW_TITLE,但没有成功。

这是我试过的:

#include <stdlib.h>
#include <stdio.h>
 
#include <Xm/Xm.h>
#include <Xm/PushB.h>
 
static XrmOptionDescRec options[] = {
    { "-title", "XmNtitle", XrmoptionIsArg, NULL },
};
 
int main(int argc, char *argv[]) {

    Widget          toplevel;             /* Top Level Button */
    XtAppContext    app;                  /* Application Context */
    char            *window_title = NULL; /* Top Level Window Title */
    
    /* INITIALIZE TOP LEVEL WINDOW */
    XtSetLanguageProc(NULL, NULL, NULL);
    toplevel = XtVaOpenApplication( &app, argv[0], options, XtNumber(options), &argc, argv, NULL, sessionShellWidgetClass, NULL);
    
    /* REALIZE TOPLEVEL WINDOW AND LAUNCH APPLICATION LOOP */
    XtRealizeWidget(toplevel);
    XtAppMainLoop(app);
    
    return 0;

}

程序编译但不响应 -title MYTITLE 命令行参数。

这是 makefile(适用于 FreeBSD 12):

test:           test.o
                cc -L/usr/local/lib -O -o test test.o -lXm -lXt -lX11

test.o:         test.c
                cc -I/usr/local/include -c test.c

如何根据名为 -title 的可选参数更改 window 的标题?

请自己进一步调查(我不是 X/Motif 专家),但参数解析似乎不对劲。 在调用 XtVaOpenApplication 调用中用 NULL 蚂蚁替换其大小为 0 的选项似乎可以解决问题: toplevel = XtVaOpenApplication( &app, argv[0], NULL, 0, &argc, argv, NULL, sessionShellWidgetClass, NULL);

正确的 xrm 选项行是

{"-title", ".title", XrmoptionSepArg, NULL}

您实际上不需要指定它,因为它在默认的 Xt 选项中 table。

通常在指定 xrm 资源名称时省略 XmN