我有一个编译和工作程序,但我无法弄清楚如何将按钮放在左上角以外的任何位置。
我是否需要在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;
}
答案 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位置。