如何在主题中定位切换按钮

时间:2014-08-21 18:43:03

标签: c++ user-interface motif

我有一个编译和工作程序,但我无法弄清楚如何将按钮放在左上角以外的任何位置。

我是否需要在rowcol中指定位置(就像我现在一样),或者在使用XtCreateManagedWidget分配它们时是否指定每个按钮的位置?

请注意,我已声明回调,但我没有将它们包括在内,因为它们正在运作。

#include <stdio.h>
#include <Xm/Xm.h>
#include <Xm/ToggleB.h>
#include <Xm/RowColumn.h>

int main(int argc, char **argv)
{
  Widget shell, rowcol, toggle1, toggle2;
  XtAppContext app;

  //Set the window's size at 300x300
  shell = XtVaAppInitialize(&app, "Radio", NULL, 0, &argc, argv, NULL, 
            XmNwidth, 300, XmNheight, 300, NULL);

  //I want the buttons to start at 100x100
  rowcol = XtVaCreateWidget("rowcol", xmRowColumnWidgetClass, shell, 
            XmNx, 100, XmNy, 100, NULL);

  XtManageChild(rowcol);

  //Add the buttons & callbacks
  toggle1 = XtCreateManagedWidget("Switch1", xmToggleButtonWidgetClass, rowcol, NULL, 0);
  XtAddCallback(toggle1, XmNvalueChangedCallback, toggle1_cbk, NULL);

  toggle2 = XtCreateManagedWidget("Switch2", xmToggleButtonWidgetClass, rowcol, NULL, 0);
  XtAddCallback(toggle2, XmNvalueChangedCallback, toggle2_cbk, NULL);

  //Starts everything up
  XtRealizeWidget(shell);
  XtMainAppLoop(app);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

将您的小部件放入BulletinBoard。

frame = XtVaCreateWidget("frame", xmBulletinBoardWidgetClass, shell, 
                         XmNwidth, 300, XmNheight, 300, NULL);

rowcol = XtVaCreateWidget("rowcol", xmRowColumnWidgetClass, frame,
                          XmNx, 100, XmNy, 100, NULL);

XtManageChild(frame);
XtManageChild(rowcol);

shell的直接子项是特殊的。设置其X和Y不会将子项定位在shell中,而是将shell本身定位。此外,许多小部件忽略了他们孩子的X和Y位置。但BulletinBoard没有。

来自Motif手册:

  

BulletinBoard是一个通用的管理器,允许将孩子放在任意的x,y位置。