В PolyML я пытаюсь нарисовать кнопку с растровым изображением внутри, но не могу найти способ создать растровое изображение перед вызовом XtRealizeWidget в виджете оболочки.
Использование XCreateBitmapFromData после XtRealizeWidget приводит к огромной задержке отрисовки кнопки с изображением внутри, что действительно глупо. Это код ниже.
соответствующие строки:
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 ;
Я думаю, что я должен сделать, чтобы все окно, включая изображение, отображалось одновременно, это вызвать XtSetValues перед XtRealizeWidget, . Я не смог сделать эту работу. Вызов XGetWindowRoot или любой аналогичный вызов не работает. Ошибки похожи на: X Error BadDrawable в XGetGeometry
Может ли кто-нибудь сказать мне, как создать окно с кнопкой с растровым изображением таким образом, чтобы все рисовалось одновременно?
оставшийся код:
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) ;