⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmcombo.c

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 C
📖 第 1 页 / 共 5 页
字号:
	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelMarginHeight, XmCLabelMarginHeight, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelMarginLeft, XmCLabelMarginLeft, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelMarginRight, XmCLabelMarginRight, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelMarginTop, XmCLabelMarginTop, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelMarginWidth, XmCLabelMarginWidth, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelPixmap, XmCLabelPixmap, XmRPixmap, sizeof(Pixmap), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelString, XmCLabelString, XmRString, sizeof(XmString), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelType, XmCLabelType, XmRLabelType, sizeof(unsigned char), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlistMarginHeight, XmCListMarginHeight, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlistMarginWidth, XmCListMarginWidth, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlistSpacing, XmCListSpacing, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNmarginHeight, XmCMarginHeight, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNmarginWidth, XmCMarginWidth, XmRDimension, sizeof(Dimension), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNmaxLength, XmCMaxLength, XmRInt, sizeof(int), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNselectThreshold, XmCSelectThreshold, XmRInt, sizeof(int), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNstringDirection, XmCStringDirection, XmRStringDirection, sizeof(XmStringDirection), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNtopItemPosition, XmCTopItemPosition, XmRInt, sizeof(int), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNvalue, XmCValue, XmRString, sizeof(String), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNvalue, XmCValue, XmRInt, sizeof(int), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    }, #endif}; /* resources[] *//* --------------------------------------------------------------------------- * Funktions-Prototypen fuer die 'Methoden' des ComboBox-Widgets. Diese * 'Methoden' werden vom Xt-Toolkit aufgerufen und sorgen dafuer, dass eine * ComboBox sich wie ein anstaendiges Widget verhaelt. */static void             Initialize     (Widget, XmComboBoxWidget, ArgList, 			                Cardinal *);static void             Destroy        (XmComboBoxWidget);static void             Resize         (XmComboBoxWidget);static Boolean          SetValues      (XmComboBoxWidget, XmComboBoxWidget,                                         XmComboBoxWidget, ArgList, Cardinal *);static void             GetValuesAlmost(XmComboBoxWidget, ArgList, Cardinal *);static XtGeometryResult QueryGeometry  (XmComboBoxWidget, XtWidgetGeometry *, 			                XtWidgetGeometry *); static XtGeometryResult GeometryManager(Widget, XtWidgetGeometry *,                                         XtWidgetGeometry *);static void		ClassInit      ();static void             Realize        (XmComboBoxWidget, Mask *,                                         XSetWindowAttributes *);/* --------------------------------------------------------------------------- * diverse restliche Prototypen... naja, hier halt etwas mager! Hierbei */static void ShowHideDropDownList       (XmComboBoxWidget w, XEvent *event,                                         Boolean Show);static void ShellCallback              (Widget w, XtPointer cbw,                                         XEvent *event, Boolean *ContDispatch);static void DoLayout                   (XmComboBoxWidget w);/* -------------------------------------------------------------------- * Klassen-Definition */XmComboBoxClassRec xmComboBoxClassRec = {    { /*** core-Klasse ***/    /* superclass		    */	(WidgetClass) &xmManagerClassRec,     /* class_name		    */	"XmComboBox",    /* widget_size		    */	sizeof(XmComboBoxRec),    /* class_initialize   	    */	(XtProc) ClassInit,    /* class_part_initialize	    */	NULL,    /* class_inited       	    */	False, /* IMMER mit FALSE initialisieren !! */    /* initialize	  	    */	(XtInitProc) Initialize,    /* initialize_hook		    */	NULL,    /* realize		  	    */	(XtRealizeProc) Realize,    /* actions		  	    */	NULL,    /* num_actions	  	    */	0,    /* resources	  	    */	resources,    /* num_resources	  	    */	XtNumber(resources),    /* xrm_class	  	    */	NULLQUARK,    /* compress_motion	  	    */	True,    /* compress_exposure  	    */	XtExposeCompressMultiple,    /* compress_enterleave	    */	True,    /* visible_interest	  	    */	False,    /* destroy		  	    */	(XtWidgetProc) Destroy,    /* resize		  	    */	(XtWidgetProc) Resize,    /* expose		  	    */	NULL,    /* set_values	  	    */	(XtSetValuesFunc) SetValues,    /* set_values_hook		    */	NULL,    /* set_values_almost	    */	XtInheritSetValuesAlmost,    /* get_values_hook		    */	(XtArgsProc) GetValuesAlmost,    /* accept_focus	 	    */	NULL,    /* version			    */	XtVersion,    /* callback_private   	    */	NULL,    /* tm_table		   	    */	XtInheritTranslations, /* Changed from NULL: Bug #406153 */    /* query_geometry		    */	(XtGeometryHandler) QueryGeometry,    /* display_accelerator	    */	XtInheritDisplayAccelerator,    /* extension          	    */	NULL    },     { /*** composite-Klasse ***/    /* geometry_manager		    */	(XtGeometryHandler) GeometryManager,    /* change_managed		    */	XtInheritChangeManaged,    /* insert_child		    */	XtInheritInsertChild,    /* delete_child		    */	XtInheritDeleteChild,    /* extension		    */	NULL    },     { /*** constraint-Klasse ***/    /* resources		    */	NULL,    /* num_resources		    */	0,    /* constraint_size		    */	sizeof(XmManagerConstraintPart),    /* initialize		    */	NULL,    /* destroy			    */	NULL,    /* set_values		    */	NULL,    /* extension		    */	NULL    },     { /*** xmManager-Klasse ***/    /* translations                 */	XtInheritTranslations,    /* syn_resources                */	NULL,    /* num_syn_resources            */	0,    /* syn_constraint_resources     */	NULL,    /* num_syn_constraint_resources */	0,    /* parent_process		    */	XmInheritParentProcess,    /* extension		    */	NULL    },     { /*** combobox-Klasse ***/    /*				    */	0    }}; /* xmComboBoxClassRec */WidgetClass xmComboBoxWidgetClass = (WidgetClass) &xmComboBoxClassRec;/* -------------------------------------------------------------------- * -------------------------------------------------------------------- * Translation-Tabelle (hier allerdings fuer das Eingabefeld!) * Tjaja....mit der Reihenfolge von Translations ist das schon so eine * ziemlich boese Sache! */static char newEditTranslations[] =    "Alt<Key>osfDown:	    ComboBox-Manager(show-hide-list)	\n\     Meta<Key>osfDown:	    ComboBox-Manager(show-hide-list)	\n\     Alt<Key>osfUp:	    ComboBox-Manager(hide-list)		\n\     Meta<Key>osfUp:	    ComboBox-Manager(hide-list)		\n\     <Key>osfUp:	    ComboBox-Manager(up)		\n\     <Key>osfDown:	    ComboBox-Manager(down)		\n\     <Key>osfPageUp:	    ComboBox-Manager(page-up)		\n\     <Key>osfPageDown:	    ComboBox-Manager(page-down)		\n\     <Key>osfCancel:	    ComboBox-Manager(cancel)		\n\     <Key>Return:	    ComboBox-Manager(activate) activate()"    ;/* speziell bei der nicht editierbaren Combo-Box sind noch einige * andere Tasten belegt, die sonst dem Eingabefeld alleine gehoeren. * Die dazugehoerigen neuen Translations befinden sich in dieser * zusaetzlichen Tabelle, das Anhaengsel ...NE ist dabei die Ab- * kuerzung fuer "non editable". */static char newEditTranslationsNE[] =     "<Key>osfDelete:	    ComboBox-Manager(wipe-out)		\n\     <Key>osfBeginLine:	    ComboBox-Manager(top)		\n\     <Key>osfEndLine:	    ComboBox-Manager(bottom)		  "    ;/* Momentan gibt es noch Aerger mit dem Drag'n'Drop-Mechanismus * von Motif 1.2. Legen wir ihn deshalb erst einmal still, solange * bis ich weiss, warum, und eine Loesung parat habe. NEU: Nur wenn * Sie mit einer libXm geschlagen sind, die partout nicht funktionieren * will, muessen Sie Drag'n'Drop stillegen, ansonsten klappts doch! */#ifdef NODRAGNDROPstatic char newListTranslations[] =    "<Btn2Down>:	    ComboBox-Manager(no-operation)	";#endifstatic char newListTranslationsE[] =    "<Key>osfPageUp:	    ComboBox-Manager(page-up)		\n\     <Key>osfPageDown:	    ComboBox-Manager(page-down)		";   /* --------------------------------------------------------------------------- * --------------------------------------------------------------------------- * Aktionen-Tabelle: Hierdurch werden den einzelnen Translations die dazuge- * hoerigen C-Routinen zugeordnet. Da wir hier ein anstaendiges ANSI-C be- * nutzen, werden hier zuerst einmal die Prototypen faellig... Ach ja, noch * ein Hinweis in eigener Sache... der ComboBox-Manager muss applikationsweit * registriert werden, da er auch von Translationen in den Kindern der Combo- * Box aktiviert wird. Bei diesem Namen der 'Aktion' steht aber nicht zu be- * fuerchten, dass er anderweitig bereits in Anwendung ist. */static void CBoxManager(Widget w, XEvent *event, String *params,                         Cardinal *num_params);static XtActionsRec actions[] = {    { "ComboBox-Manager", CBoxManager },    { NULL, NULL }}; /* actions */    /* -------------------------------------------------------------------- * Eine Instanz dieser Widget-Klasse wird erstmalig in Betrieb ge- * nommen, daher sind noch Vorbereitungen notwendig, die nun hier * durchgefuehrt werden. */static XtTranslations NewEditTranslations, NewEditTranslationsNE, #ifdef NODRAGNDROP                      NewListTranslations,#endif                      NewListTranslationsE;static XtConvertArgRec ConverterScreenConvertArg[] = {    { XtBaseOffset, (XtPointer) XtOffset(Widget, core.screen),       sizeof(Screen *) }};static void ClassInit(){    NewEditTranslations =	    XtParseTranslationTable(newEditTranslations);    NewEditTranslationsNE =	    XtParseTranslationTable(newEditTranslationsNE);#ifdef NODRAGNDROP    NewListTranslations =	    XtParseTranslationTable(newListTranslations);#endif    NewListTranslationsE =	    XtParseTranslationTable(newListTranslationsE);    XtAddConverter(XtRString, XtRBitmap,                    XmuCvtStringToBitmap, 		   ConverterScreenConvertArg,                    XtNumber(ConverterScreenConvertArg));} /* ClassInit *//* --------------------------------------------------------------------------- * Weil es sich bei diesem Widget um ein etwas komplizierteres zusammengesetz- * tes Widget handelt, muessen wir hier - wo eigentlich nur das die Combobox * bildende Fenster auf dem X-Server erzeugt wird - noch einmal das Layout * auf Vordermann bringen. Den Aerger loest dabei das Listenfeld der OSF aus, * das einfach keine Geometrie-Nachfragen verschickt, solange es nicht  * 'realized' ist!!! Nicht, dass ich mich ueber so einen Sauhaufen aufregen  * wuerde...ich doch nicht! ABER MACHT IHR DENN NUR SO'N MIST...? WARUM KOENNT * IHR DENN NICHT EINMAL DIESES ****(BIEP)**** MOTIF TOOLKIT ANSTAENDIG * DOKUMENTIEREN! Ich glaub', ich kann mich nach dem Chaos eigentlich nur noch * hemmungslos besaufen... Die Suche nach der Ursache (bzw. Urheber = OSF) hat * mich doch einige Tage gekostet (jaja...die Mannstunden!). */static void Realize(XmComboBoxWidget w, Mask *ValueMask,                     XSetWindowAttributes *Attributes){    /*      * Also: wenn die Liste staendig sichtbar ist, dann zuerst noch einmal     * das Layout berechnen. Sonst wird vorne und hinten 'was abgeschnitten.     */    if ( w->combobox.StaticList )	DoLayout(w);    (*w->core.widget_class->core_class.superclass->core_class.realize)	((Widget) w, ValueMask, Attributes);} /* Realize *//* --------------------------------------------------------------------------- * Suche dasjenige Fenster, in dem unsere Shell liegt, in der wiederum die  * Combo-Box steckt. Diese Information wird benoetigt, um die Drop-Down-Liste * innerhalb des Fensterstacks immer direkt oberhalb der Shell mit der Combo- * Box zu halten. Jajaja -- ich muss halt davon ausgehen, dass der Fenster- * manager ein sog. "reparenting wm" ist; also die Dekorationen in einem * Fenster dargestellt werden und unsere Shell in dieses Fenster hineingepackt * ist. Die Dekoration ist damit ein Kind des 'root window' - wie die Shell, * in der die Drop-Down-Liste steckt. Und da nur Geschwisterfenster (sibling * windows) im gleichen Stapel stecken, reicht das Shellfenster nicht aus. * Alle gaengigen Fenstermanager sind solche "reparenting wm's", so dass ich * hier zu diesem Trick greifen kann, um die Drop-Down-Liste immer ueber der * ComboBox zu halten. * * Parameter: *   w			Diejenige Combo-Box, fuer die wir dasjenige *			Fenster des Window-Managers ermitteln sollen, *			dass direkt unterhalb des Root-Fensters liegt. * Ergebnis: *   besagtes zu suchendes Fenster, dass die Dekoration enthaelt (hoffentlich *   nur echte Bruesseler Spitze!) */static Window GetDecorationWindow(XmComboBoxWidget w){    Window       Root, Parent, AWindow;    Window       *Children;    unsigned int NumChildren;    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -