Sml PolyML/Motif:如何同时绘制包含XmLabelPixmap按钮的窗口?

Sml PolyML/Motif:如何同时绘制包含XmLabelPixmap按钮的窗口?,sml,xlib,motif,polyml,Sml,Xlib,Motif,Polyml,在PolyML中,我试图绘制一个包含pixmap的按钮,但在shell小部件上调用XtRealizeWidget之前,找不到创建pixmap的方法 在XtRealizeWidget之后使用XCreateBitmapFromData,在绘制包含图片的按钮时会有很大的延迟,这真是愚蠢。这是下面的代码 相关线路为: val shell = XtAppInitialise "" "appl" "clss" [] [XmNwidth 500, XmNheight 500 ] ; val mainw

在PolyML中,我试图绘制一个包含pixmap的按钮,但在shell小部件上调用XtRealizeWidget之前,找不到创建pixmap的方法

在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 ;
我认为我应该做的是,让整个窗口(包括图片)同时显示,在XtRealizeWidget之前调用XtSetValues。我一直没能做到这一点。XGetWindowRoot调用或任何类似调用都不起作用。错误如下: XGetGeometry中的X错误BadDrawable

有谁能告诉我如何创建一个窗口,其中有一个带有像素贴图的按钮,这样所有的东西都可以同时绘制

剩余代码:

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) ;
试一试


非常感谢。它是[br/][code]val rw=RootWindow(XtDisplay shell);val P=XCreateBitmapFromData rw(将数据设置为picList);val res=XtSetValues指令[XmNlabelPixmap P];[/code][br/]这可以在实现Widget shell之前完成。这很好用。[br/]XtDisplay函数似乎不在PolyML引用中。
  Display *dpy = XtDisplay(shell);
  XCreateBitmapFromData( dpy, DefaultRootWindow(dpy), ... );