PolyML/Motif:如何同时绘制一个包含 XmLabelPixmap 按钮的 window?
PolyML/Motif: how do I simultaneously draw a window which contains an XmLabelPixmap button?
在 PolyML 中,我试图绘制一个带有像素图的按钮,但在 shell 小部件上调用 XtRealizeWidget 之前找不到创建像素图的方法。
在 XtRealizeWidget 之后使用 XCreateBitmapFromData,在绘制带有图片的按钮时会产生巨大的延迟,这真的很愚蠢。也就是下面的代码。
相关行是:
val shell = XtAppInitialise "" "appl" "clss" [] [XmNwidth 500, XmNheight 500 ] ;
val mainw = XmCreateMainWindow shell "window" [] ;
val instruct = XmCreateDrawnButton mainw "button" [XmNwidth 60, XmNheight 30 , XmNlabelType XmPIXMAP, XmNmappedWhenManaged true ];
val x =XtManageChildren [ instruct ] ;
val x=XtManageChild mainw ;
XtRealizeWidget shell;
let
val thePic = XCreateBitmapFromData (XGetWindowRoot (XtWindow instruct)) (MakeData thePiclist) (Area{x=0,y=0,w=25,h=25})
in
XtSetValues instruct [XmNlabelPixmap thePic]
end ;
我认为我应该做的是使整个 window - 包括图片 - 同时显示,在 XtRealizeWidget 之前调用 XtSetValues,。我无法完成这项工作。 XGetWindowRoot 的调用或任何类似的调用不起作用。错误就像:
XGetGeometry 中的 X 错误 BadDrawable
任何人都可以告诉我如何创建一个 window 有一个带有像素图的按钮,同时绘制所有内容的方法吗?
剩余代码:
open XWindows ;
open Motif ;
val thePiclist= [
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00,
0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00,
0xfc, 0xff, 0x07, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x7f, 0x00,
0xfc, 0xff, 0xff, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x1f, 0x00,
0xfc, 0xff, 0x07, 0x00, 0xfc, 0xff, 0x01, 0x00, 0xfc, 0x7f, 0x00, 0x00,
0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00];
fun MakeData [] = ""
| MakeData (H::T) = (str (chr H)) ^ (MakeData T) ;
尝试
Display *dpy = XtDisplay(shell);
XCreateBitmapFromData( dpy, DefaultRootWindow(dpy), ... );
在 PolyML 中,我试图绘制一个带有像素图的按钮,但在 shell 小部件上调用 XtRealizeWidget 之前找不到创建像素图的方法。
在 XtRealizeWidget 之后使用 XCreateBitmapFromData,在绘制带有图片的按钮时会产生巨大的延迟,这真的很愚蠢。也就是下面的代码。
相关行是:
val shell = XtAppInitialise "" "appl" "clss" [] [XmNwidth 500, XmNheight 500 ] ;
val mainw = XmCreateMainWindow shell "window" [] ;
val instruct = XmCreateDrawnButton mainw "button" [XmNwidth 60, XmNheight 30 , XmNlabelType XmPIXMAP, XmNmappedWhenManaged true ];
val x =XtManageChildren [ instruct ] ;
val x=XtManageChild mainw ;
XtRealizeWidget shell;
let
val thePic = XCreateBitmapFromData (XGetWindowRoot (XtWindow instruct)) (MakeData thePiclist) (Area{x=0,y=0,w=25,h=25})
in
XtSetValues instruct [XmNlabelPixmap thePic]
end ;
我认为我应该做的是使整个 window - 包括图片 - 同时显示,在 XtRealizeWidget 之前调用 XtSetValues,。我无法完成这项工作。 XGetWindowRoot 的调用或任何类似的调用不起作用。错误就像: XGetGeometry 中的 X 错误 BadDrawable
任何人都可以告诉我如何创建一个 window 有一个带有像素图的按钮,同时绘制所有内容的方法吗?
剩余代码:
open XWindows ;
open Motif ;
val thePiclist= [
0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00,
0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0xff, 0x01, 0x00,
0xfc, 0xff, 0x07, 0x00, 0xfc, 0xff, 0x1f, 0x00, 0xfc, 0xff, 0x7f, 0x00,
0xfc, 0xff, 0xff, 0x00, 0xfc, 0xff, 0x7f, 0x00, 0xfc, 0xff, 0x1f, 0x00,
0xfc, 0xff, 0x07, 0x00, 0xfc, 0xff, 0x01, 0x00, 0xfc, 0x7f, 0x00, 0x00,
0xfc, 0x1f, 0x00, 0x00, 0xfc, 0x07, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
0x7c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00];
fun MakeData [] = ""
| MakeData (H::T) = (str (chr H)) ^ (MakeData T) ;
尝试
Display *dpy = XtDisplay(shell);
XCreateBitmapFromData( dpy, DefaultRootWindow(dpy), ... );