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

📄 xmcombo.c

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * ComboBox.c - Das schon lange schmerzlich vermisste Combo-Box- *              Widget -- nun endlich auf fuer Motif! *  * Version 1.32a -- 04.10.95 * * Letzte Modifikation: * 04.10.1995    Layoutfehler behoben, der bei angezeigter horizontaler Liste *               dazu fuehrt, dass das Listenfeld schrumpft. Daneben wird *               jetzt auch der Fall beruecksichtigt, dass das Listenfeld am *               unteren Bildschirmrand abgeschnitten wuerde. In diesem Fall *               erscheint das Listenfeld oberhalb des Eingabefeldes. * 20.03.1995    XmNscrollbarDisplayPolicy,... koennen nun immer vom Pro- *               grammierer gesetzt werden, statische Liste hin und her. * 21.10.1994    Fehler in SetValues behoben, der auftritt, wenn man versucht, *               XmNitems und XmNitemCount zu setzen. * 01.10.1994    Externe Sortierung wird nun unterstuetzt sowie seitenweises *		 Rollen in der Liste mittels PgUp und PgDn. * 25.09.1994    Unterstuetzung fuer XmNautomaticSelection implementiert. *		 Damit wird die Sache noch ein bischen runder in der Bedienung. *		 Des weiteren sind etliche Callbacks neu hinzugekommen. * 04.09.1994    Erweiterungen fuer XmSINGLE_SELECT eingebaut. Ausserdem *		 kann die Liste jetzt auch statisch unterhalb des Eingabe- *		 felds erscheinen. Damit sind wir nun noch kompatibler ge- *		 worden -- fragt sich nur, zu was?! * 29.08.1994    Alle Mirror-Ressourcen tauchen nun auch in der Ressourcen- *		 liste der ComboBox-Klasse auf. Allerdings stehen keine *		 sinnvollen Werte fuer die Initialisierung 'drin. Weiterhin *		 den GeometryManager so veraendert, dass ab sofort das *		 Label in der Breite wachsen oder schrumpfen darf. * 07.06.1994    XmNmnemonic und XmNmnemonicCharSet implementiert. * 29.05.1994    XmNsensitive angepasst. XmNcursorPositionVisible ist nun *               False, falls die ComboBox nicht editierbar ist. * 07.05.1994    Drag'n'Drop funktioniert endlich!!! Zudem Anpassung an *               den fvwm ausgefuehrt ('st vom Focus-Verhalten ja ein halber *               twm). Hach', so'ne Linux-Box mit Motif 1.2 macht doch *               einfach Spass... vor allem geht hier so richtig die Post ab. *               Das kann man ja von M$ Windoze (Windoze for Mondays) nicht *               behaupten! * 14.04.1994    Ein paar Speicherlecks korrigiert. * 21.02.1994    Die Resourcen XmNitems und XmNitemCount lassen sich nun  *               auch von einer Resourcendatei aus initialisieren. ACHTUNG:  *		 diese beiden Resourcen mussen immer beide beim Aufruf von  *		 XtSetValues zugleich angegeben werden, ansonsten werden *               diese Angaben ignoriert. * 03.02.1994    Convenience-Funktionen auf Vordermann gebracht und noch *		 einen Callback eingebaut, der immer dann aufgerufen wird,  *		 wenn die List angezeigt oder wieder versteckt wird. * 01.02.1994    Motif 1.2-fest!!! Das wird aber heute abend gefeiert!! *               Endlich EIN Alptraum weniger! Naja, Drag'n'Drop bleibt *		 noch zu loesen. Spaeter... * 31.01.1994    VAX-fest (mit Hilfe von Vincenct Li) *               owlm sollte man abschaffen! Aber es scheint so, als ob *               ich jetzt doch noch das FocusOut-Problem geknackt habe. *               Ebenso die OSF...mit viel Arbeit habe ich nun auch noch *               eine anstaendige Initialisierung der Fontliste des Label- *               Kinds erreicht. * 12.01.1994	 Revisionsstand: 1.10a *               nun wirklich voll ANSI-faehiger C-Code *               Pixmaps werden ggf. aufgeraeumt; Druckrichtung *               wird vom Vater erfragt und an das Label weiter- *               gegeben. *               ESC-Behandlung implementiert. *               Spiegel-Ressourcen-Initialisierung aus Ressourcen-Daten- *               bank implementiert. *               Weitergabe von neu gesetzten Farben an die Kinder *               implementiert. *               Combo-Box kann jetzt wahlweise auch links neben dem *               Eingabefeld ein Label anzeigen. * 09.12.1993    Revisionsstand: 1.00 *               erste oeffentlich zugaengliche Version der Combo-Box *  * (c) 1993, 1994, 1995 Harald Albrecht * Institut fuer Geometrie und Praktische Mathematik * RWTH Aachen, Germany * albrecht@igpm.rwth-aachen.de * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING for more details); * if not, write to the Free Software Foundation, Inc., 675 Mass Ave,  * Cambridge, MA 02139, USA. * */#ifdef __VMS/* vms_x_fix.h should be included before any of the X11/Motif headers */#include <wx/vms_x_fix.h>#undef XtDisplay#undef XtScreen#undef XtWindow#undef XtIsRealized#undef XtParent#undef XtClass#endif/* get XmVersion definition */#include <Xm/Xm.h>#if (XmVersion < 2000)#include <X11/IntrinsicP.h>#include <X11/StringDefs.h>#include <X11/cursorfont.h>#include <X11/Shell.h>#ifdef VMS /* Huch, wo gibt's denn noch sowas ... ?! */           /* Bitte keine Mail bzgl. dieser Bemerkung schicken...	    * Ich weiss, das ist ein Vorurteil...aber es gibt	    * ja auch wahre Vorurteile....	    */#include <Xmu/Converters.h>#else#include <X11/Xmu/Converters.h>#endif#include <Xm/ArrowB.h>#include <Xm/TextF.h>#include <Xm/List.h>#include <Xm/LabelP.h>#include <string.h>#include <ctype.h> /* define toupper */#include "combop.h"#include <stdio.h>/* --- Systemspezifische Definitionen */#if defined(VMS)#define strcasecmp(s1, s2) strcmp(s1, s2)#elif defined(__EMX__)#define strcasecmp stricmp#endif/* --- sonstiger Quark *//* #ifdef DEBUG */#if 0#define LOG(p1)          fprintf(stderr, p1);#define LOG2(p1, p2)     fprintf(stderr, p1, p2);#define LOG3(p1, p2, p3) fprintf(stderr, p1, p2, p3);#else#define LOG(p1)#define LOG2(p1, p2)#define LOG3(p1, p2, p3)#endif/* --------------------------------------------------------------------------- * Resourcen-Liste... * Hier werden diejenigen Resourcen definiert, die von "aussen" - also  fuer * den Programmierer oder Anwender - benutzbar und veraenderbar sind. *  * Der Aufbau der einzelnen Eintraege ist immer wieder gleich: * Resourcen-Name	XmN... oder XtN * Resourcen-Klasse     XmC... oder XtC * Resourcen-Type       XmR... oder XtR (Datentyp der Variable in der *                      struct der jeweiligen Widgetinstanz) * Resourcen-Groesse	aktuelle Groesse dieses Datentyps * Resourcen-Offset     Lage der Variable innerhalb der struct der *			Widgetinstanz * Defaultwert-Type     Typ des Defaultwertes * Defaultwert		(normalerweise) Zeiger auf den Defaultwert */#define offset(field) XtOffsetOf(XmComboBoxRec, field)static XtResource resources[] = {    { /* Eingabefeld kann veraendert werden, oder aber es sind nur       * die Vorgaben aus der Liste auswaehlbar.       */	XmNeditable, XmCEditable, XmRBoolean, sizeof(Boolean), 	offset(combobox.Editable), XmRString, "False"    },     { /* Liste wird automatisch sortiert -- wie konnten die bei       * der OSF denn SOETWAS nur vergessen ??       */	XmNsorted, XmCSorted, XmRBoolean, sizeof(Boolean),	offset(combobox.Sorted), XmRString, "False"    },     { /* externe Sortierreihenfolge */	XmNsortingCallback, XmCSortingCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.SortingCBL), XmRCallback, NULL    },     { /* Anzahl auf einmal sichtbarer Eintraege in der Liste (ent-       * spricht damit der Listenhoehe.       */	XmNvisibleItemCount, XmCVisibleItemCount, XmRInt, sizeof(int), 	offset(combobox.VisibleItemCount), XmRImmediate, (caddr_t) 8    },     { /* Fuer das Eingabefeld sowie die Liste verwandte Fonts */	XmNfontList, XmCFontList, XmRFontList, sizeof(XmFontList), 	offset(combobox.Font), XmRImmediate, NULL    },     { /* Rueckruf bei Anwahl */	XmNselectionCallback, XmCSelectionCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.SelectionCBL), XmRCallback, NULL    },     { /* Gegenteil zum vorherigen Callback! */	XmNunselectionCallback, XmCUnselectionCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.UnselectionCBL), XmRCallback, NULL    },     { /* Doppelklick in der Liste */	XmNdefaultActionCallback, XmCCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.DefaultActionCBL), XmRCallback, NULL    },     { /* Rueckruf bei Liste ausklappen/verstecken */	XmNdropDownCallback, XmCDropDownCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.DropDownCBL), XmRCallback, NULL    },     { /* Eingabe abchecken... */	XmNmodifyVerifyCallback, XmCCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.ModifyVerifyCBL), XmRCallback, NULL    },     {	XmNvalueChangedCallback, XmCCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.ValueChangedCBL), XmRCallback, NULL    },     {	XmNactivateCallback, XmCCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.ActivateCBL), XmRCallback, NULL    },     {	XmNmotionVerifyCallback, XmCCallback, XmRCallback, 	sizeof(XtCallbackList), 	offset(combobox.MotionVerifyCBL), XmRCallback, NULL    },     { /* Verhalten der ausgeklappten Liste bei Focus-Out */	XmNpersistentDropDown, XmCPersistentDropDown, XmRBoolean, 	sizeof(Boolean), 	offset(combobox.Persistent), XmRString, "False"    },     { /* Wie verhaelt sich der Window-Manager? */	XmNtwmHandlingOn, XmCTwmHandlingOn, XmRBoolean, sizeof(Boolean), 	offset(combobox.TwmHandlingOn), XmRString, "False"    },     { /* Label anzeigen oder nicht? */	XmNshowLabel, XmCShowLabel, XmRBoolean, sizeof(Boolean), 	offset(combobox.ShowLabel), XmRString, "False"    },     { /* Abstand zw. linkem Rand Eingabefeld und linkem Rand Liste */	XmNdropDownOffset, XmCDropDownOffset, XmRPosition, 	sizeof(Position), offset(combobox.DropDownOffset), 	XmRImmediate, (caddr_t) -1    },     { /* Neue Voreinstellung bzgl. des Randes */	XmNborderWidth, XmCBorderWidth, XmRDimension, sizeof(Dimension), 	offset(core.border_width), XmRImmediate, (caddr_t) 0    },    { /* welcher Cursor soll in der Dropdown-Liste benutzt werden? */	XmNdropDownCursor, XmCDropDownCursor, XmRCursor, sizeof(Cursor),	offset(combobox.ArrowCursor), XmRString, "center_ptr"    },     { /* wie lassen sich Eintraege auswaehlen? */	XmNselectionPolicy, XmCSelectionPolicy, XmRSelectionPolicy, sizeof(unsigned char), 	offset(combobox.SelectionPolicy), XmRImmediate, (caddr_t) XmBROWSE_SELECT    },     { /* Wann werden die Callbacks aufgerufen? */	XmNautomaticSelection, XmCAutomaticSelection, XmRBoolean, sizeof(Boolean), 	offset(combobox.AutomaticSelection), XmRString, "False"    },     { /* erscheint die Liste staendig? */	XmNstaticList, XmCStaticList, XmRBoolean, sizeof(Boolean), 	offset(combobox.StaticList), XmRString, "False"    },     {    	XmNscrollBarDisplayPolicy, XmCScrollBarDisplayPolicy, XmRScrollBarDisplayPolicy, sizeof(unsigned char),    	offset(combobox.ScrollBarDisplayPolicy), XmRImmediate, (caddr_t) XmAS_NEEDED    },    {        XmNlistSizePolicy, XmCListSizePolicy, XmRListSizePolicy, sizeof(unsigned char),        offset(combobox.ListSizePolicy), XmRImmediate, (caddr_t) XmVARIABLE    },    {        XmNsquareArrow, XmCSquareArrow, XmRBoolean, sizeof(Boolean),        offset(combobox.SquareArrow), XmRString, "False"    },    {        XmNarrowSpacingOn, XmCArrowSpacingOn, XmRBoolean, sizeof(Boolean),        offset(combobox.ArrowSpacingOn), XmRString, "True"    },#ifndef DONT_LOOK_IN_THE_MIRROR    /* Mirror-Ressourcen, Adressen sind ungueltig!!!! */    {	XmNalignment, XmCAlignment, XmRAlignment, sizeof(unsigned char), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNblinkRate, XmCBlinkRate, XmRInt, sizeof(int), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNcolumns, XmCColumns, XmRShort, sizeof(short), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNcursorPosition, XmCCursorPosition, XmRTextPosition, sizeof(XmTextPosition),	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNitemCount, XmCItemCount, XmRInt, sizeof(int), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNitems, XmCItems, XmRXmStringTable, sizeof(XmStringTable), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelFontList, XmCLabelFontList, XmRFontList, sizeof(XmFontList), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelInsensitivePixmap, XmCLabelInsensitivePixmap, XmRPixmap, sizeof(Pixmap), 	offset(combobox.Dummy), XmRImmediate, (caddr_t) 0    },     {	XmNlabelMarginBottom, XmCLabelMarginBottom, XmRDimension, sizeof(Dimension), 

⌨️ 快捷键说明

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