我有一个可以编译的程序,但是我无法弄清楚如何将按钮放置在左上角以外的任何位置。
我需要在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;
}
将您的小部件放在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);
外壳的直接子是特殊的。设置其X和Y不会将子级放置在外壳中,而是将外壳本身定位。此外,许多小部件会忽略其子项的X和Y位置。但是BulletinBoard却没有。
从Motif手册中:
BulletinBoard是一个通用管理器,允许将孩子放置在任意的x,y位置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句