Dialoge

Ein Dialogfeld (oder Dialog) ist normalerweise ein Fenster, um Eingaben des Benutzers Anfrage angezeigt. Es kann mehrere Widgets, um Informationen vom Benutzer durch verschiedene Auswahlmöglichkeiten, oder es kann die Form einer Message-Box, die einfach informiert (z. B. ein Hinweis oder eine Warnung an den Benutzer) und eine Schaltfläche "OK" übernehmen.
Eingabefokus

Der Window-Manager erinnert sich an die Fenster oder Fenster-Objekt, das zuletzt durch den Benutzer mit dem Touch-Screen, wurde ausgewählt, Maus, Tastatur, oder mit anderen Mitteln. Dieses Fenster empfängt Tastatureingabe Nachrichten und sagte zu den Eingabe-Fokus haben. Der Hauptgrund für die Verfolgung von Eingabe-Fokus ist zu bestimmen, wo Tastatur-Befehle zu senden. Das Fenster, das den Eingabefokus erhalten GENER-Veranstaltungen von der Tastatur ated hat. Blocking vs non-blocking-Dialoge
Dialog-Fenster können blockiert oder non-blocking. Eine Sperrung Dialog blockiert den Thread der Ausführung. Es hat den Eingabefokus standardmäßig aktiviert und muss vom Benutzer geschlossen werden, bevor der Thread fortgesetzt werden kann. A non-blocking-Dialog, auf der anderen Seite, nicht blockiert den aufrufenden Thread - es ermöglicht die Aufgabe, während es weiterhin angezeigt wird. Bitte beachten Sie, dass in einigen anderen Umgebungen, Sperrung und non-blocking-Dialoge können als modale und nicht modale Bezug genommen wird. Dialog Verfahren
Ein Dialogfenster wird sich ein Fenster, und es empfängt Nachrichten genauso wie alle anderen Fenster im System zu tun. Die meisten Einträge sind durch das Fenster der Callback-Routine automatisch das Dialogfeld, behandelt die anderen sind die Callback-Routine auf Schaf-fung der Dialogbox, die als Dialog-Verfahren bekannt ist, angegeben übergeben. Dialog-Einträge

Es gibt zwei Arten von zusätzlichen Meldungen, die den Dialog Verfahren gesendet werden: WM_INIT_DIALOG und WM_NOTIFY_PARENT. Die WM_INIT_DIALOG Nachricht ist, um das Dialogfeld Verfahren unmittelbar vor einem Dialogfenster gesendet wird angezeigt. Dialog Verfahren verwenden typischerweise dieser Nachricht an Widgets initialisieren und Durchführung sonstiger Aufgaben, die Initialisierung das Aussehen der Dialogfenster beeinflussen. Die WM_NOTIFY_PARENT Nachricht ist, um das Dialogfeld durch seine untergeordneten Fenster geschickt, um die Muttergesellschaft alle Ereignisse, um die Synchronisierung zu gewährleisten benachrichtigen. Die Ereignisse, die ein Kind geschickt von seinem Typ ab und werden separat für jede Art von Widget dokumentiert. Erstellen eines Dialogs

Zwei grundlegende Dinge sind erforderlich, um ein Dialogfeld zu erstellen: eine Ressource Tabelle, die die Widgets definiert, um aufgenommen zu werden, und ein Dialog Verfahren, das die ursprüngliche Werte definiert für die Widgets sowie deren Verhalten. Sobald beide Objekte existieren, brauchen Sie nur einen einzigen Anruf-Funktion (GUI_CreateDialogBox () oder GUI_ExecDialogBox ()), um tatsächlich

Resource-Tabelle

Dialogfelder in einer Weise blockiert (mit GUI_ExecDialogBox ()) oder als non-blocking (mit GUI_CreateDialogBox ()) erstellt werden. Eine Ressource-Tabelle muss zunächst definiert, die alle Widgets angibt, in den Dialog einbezogen werden. Die unten gezeigten Beispiel wird ein Ressource-Tabelle. Diese besondere Probe wurde manuell erstellt, obwohl es könnte auch durch einen GUI-Builder vorgenommen werden:

static const GUI_WIDGET_CREATE_INFO _aDialogCreate [] = (
(FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 180, 230, FRAMEWIN_CF_MOVEABLE, 0),
(BUTTON_CreateIndirect, "OK", GUI_ID_OK, 100, 5, 60, 20)
(BUTTON_CreateIndirect, "Abbrechen", GUI_ID_CANCEL, 100, 30, 60, 20)
(TEXT_CreateIndirect "LTEXT", 0, 10, 55, 48, 15, TEXT_CF_LEFT)
(TEXT_CreateIndirect "RText", 0, 10, 80, 48, 15, TEXT_CF_RIGHT)
(EDIT_CreateIndirect, NULL, GUI_ID_EDIT0, 60, 55, 100, 15, 0, 50)
(EDIT_CreateIndirect, NULL, GUI_ID_EDIT1, 60, 80, 100, 15, 0, 50)
(TEXT_CreateIndirect, "Hex", 0, 10, 100, 48, 15, TEXT_CF_RIGHT)
(EDIT_CreateIndirect, NULL, GUI_ID_EDIT2, 60, 100, 100, 15, 0, 6),
(TEXT_CreateIndirect, "bin", 0, 10, 120, 48, 15, TEXT_CF_RIGHT)
(EDIT_CreateIndirect, NULL, GUI_ID_EDIT3, 60, 120, 100, 15),
(LISTBOX_CreateIndirect, NULL, GUI_ID_LISTBOX0, 10, 10, 48, 40)
(CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK0, 10, 140, 0, 0),
(CHECKBOX_CreateIndirect, NULL, GUI_ID_CHECK1, 30, 140, 0, 0),
(SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER0, 60, 140, 100, 20)
(SLIDER_CreateIndirect, NULL, GUI_ID_SLIDER1, 10, 170, 150, 30)
);
Jedes Widget in einem Dialogfeld einbezogen werden muss indirekt mit dem WIDGET_CreateIndirect Funktion erstellt werden. "Window-Objekte (Widgets)".

Dialog Verfahren

Dies ist die grundlegende Vorlage, die als Ausgangspunkt bei der Erstellung einer Dialog-Verfahren verwendet werden soll:
/************************************************* ********************
*
* Dialog Verfahren
* /
static void _cbCallback (* WM_MESSAGE PMSG) (
Schalter (PMSG-> msgid) (
Standard:
WM_DefaultProc (PMSG);
)
)

Für dieses Beispiel wird das Dialogfeld mit dem folgenden Code-Zeile angezeigt:

GUI_ExecDialogBox (_aDialogCreate, GUI_COUNTOF (_aDialogCreate)
& _cbCallback, 0, 0, 0);

Die daraus resultierenden Dialogfeld sieht wie folgt oder ähnlich (dem tatsächlichen Erscheinungsbild wird von Ihrer Konfiguration und Voreinstellungen) abhängen:

Nach dem Anlegen eines Dialogfeld enthalten alle Widgets in der Ressource-Tabelle wird sichtbar, wenn auch wie in dem vorhergehenden Screenshot zu sehen, sie erscheinen "leer". Dies liegt daran, den Dialog Verfahren noch nicht enthalten Code, der die einzelnen Elemente initialisiert. Die Startwerte der Widgets, verursacht die Klagen von ihnen, und die Wechselwirkungen zwischen ihnen müssen sich im Dialog Verfahren festgelegt werden.
Initialisieren des Dialogs

Der typische nächste Schritt ist die Widgets mit ihren jeweiligen Startwerte initialisieren. Dies ist normalerweise in dem Dialogfeld Verfahren als eine Reaktion auf die Nachricht WM_INIT_DIALOG getan. Das Programm auszuüben, unten zeigt Dinge:
/************************************************* ********************
*v
* Dialog Verfahren
* /
static void _cbCallback (* WM_MESSAGE PMSG) (
int nCode, ID;
WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBox;
WM_HWIN hwin = PMSG-> hwin;
Schalter (PMSG-> msgid) (
Bei WM_INIT_DIALOG:
/ * Get Fenstergriffe für alle Widgets * /
hEdit0 = WM_GetDialogItem (hwin, GUI_ID_EDIT0);
hEdit1 = WM_GetDialogItem (hwin, GUI_ID_EDIT1);
hEdit2 = WM_GetDialogItem (hwin, GUI_ID_EDIT2);
hEdit3 = WM_GetDialogItem (hwin, GUI_ID_EDIT3);
hListBox = WM_GetDialogItem (hwin, GUI_ID_LISTBOX0);
/ * Initialisiert alle Widgets * /
EDIT_SetText (hEdit0, "EDIT Widget 0");
EDIT_SetText (hEdit1, "EDIT Widget 1");
EDIT_SetTextAlign (hEdit1, GUI_TA_LEFT);
EDIT_SetHexMode (hEdit2, 0x1234, 0, 0xFFFF);
EDIT_SetBinMode (hEdit3, 0x1234, 0, 0xFFFF);
LISTBOX_SetText (hListBox, _apListBox);
WM_DisableWindow (WM_GetDialogItem (hwin, GUI_ID_CHECK1));
CHECKBOX_Check (WM_GetDialogItem (hwin, GUI_ID_CHECK0));
CHECKBOX_Check (WM_GetDialogItem (hwin, GUI_ID_CHECK1));
SLIDER_SetWidth (WM_GetDialogItem (hwin, GUI_ID_SLIDER0), 5);
SLIDER_SetValue (WM_GetDialogItem (hwin, GUI_ID_SLIDER1), 50);

break;
Standard:
WM_DefaultProc (PMSG);
)
)
Die initialisiert Dialogfeld erscheint nun wie folgt, mit allen Widgets mit ihrer ursprünglichen Werte:

Die initialisiert Dialogfeld erscheint nun wie folgt, mit allen Widgets mit ihrer ursprünglichen Werte:

Definieren Dialog Verhalten

Sobald der Dialog initialisiert wurde, ist alles, was bleibt, um Code, um das Dialogfeld Prozedur, die das Verhalten des Widgets definieren, fügen wird, so dass sie voll funktionsfähig. Weiterbildung mit dem gleichen Beispiel ist das letzte Dialogfeld Verfahren unten dargestellt:

/************************************************* ********************
*
* Dialog Verfahren
* /
static void _cbCallback (* WM_MESSAGE PMSG) (
int nCode, ID;
WM_HWIN hEdit0, hEdit1, hEdit2, hEdit3, hListBox;
WM_HWIN hwin = PMSG-> hwin;
Schalter (PMSG-> msgid) (
Bei WM_INIT_DIALOG:
/ * Get Fenstergriffe für alle Widgets * /
hEdit0 = WM_GetDialogItem (hwin, GUI_ID_EDIT0);
hEdit1 = WM_GetDialogItem (hwin, GUI_ID_EDIT1);
hEdit2 = WM_GetDialogItem (hwin, GUI_ID_EDIT2); hEdit3 = WM_GetDialogItem (hwin, GUI_ID_EDIT3); hListBox = WM_GetDialogItem (hwin, GUI_ID_LISTBOX0); / * Initialisiert alle Widgets * /
EDIT_SetText (hEdit0, "EDIT Widget 0");
EDIT_SetText (hEdit1, "EDIT Widget 1");
EDIT_SetTextAlign (hEdit1, GUI_TA_LEFT);
EDIT_SetHexMode (hEdit2, 0x1234, 0, 0xFFFF);
EDIT_SetBinMode (hEdit3, 0x1234, 0, 0xFFFF);
LISTBOX_SetText (hListBox, _apListBox);
WM_DisableWindow (WM_GetDialogItem (hwin, GUI_ID_CHECK1));
CHECKBOX_Check (WM_GetDialogItem (hwin, GUI_ID_CHECK0));
CHECKBOX_Check (WM_GetDialogItem (hwin, GUI_ID_CHECK1));
SLIDER_SetWidth (WM_GetDialogItem (hwin, GUI_ID_SLIDER0), 5);
SLIDER_SetValue (WM_GetDialogItem (hwin, GUI_ID_SLIDER1), 50);
break;
Bei WM_KEY:
switch (((WM_KEY_INFO *) (PMSG-> Data.p)) -> Key) (
Bei GUI_ID_ESCAPE:
GUI_EndDialog (hwin, 1);
break;
Bei GUI_ID_ENTER:
GUI_EndDialog (hwin, 0);
break;
)
break; Fall WM_NOTIFY_PARENT:
Id = WM_GetId (PMSG-> hWinSrc); / * ID der Widget * /
NCode = PMSG-> Data.v; / * Code * Notification /
Schalter (nCode) (
Bei WM_NOTIFICATION_RELEASED: / * reagieren nur, wenn freigegeben * /
if (id == GUI_ID_OK) (/ * OK Button * /
GUI_EndDialog (hwin, 0);
)
if (id == GUI_ID_CANCEL) (/ * Abbrechen Button * /
GUI_EndDialog (hwin, 1);
)
break;
Bei WM_NOTIFICATION_SEL_CHANGED: / * Auswahl verändert * /
FRAMEWIN_SetText (hwin "Dialog - sel verändert");
break;
Standard:
FRAMEWIN_SetText (hwin "Dialog - Anmeldung erhalten");
)
break;
Standard:
WM_DefaultProc (PMSG);
)
)
PC Windows ausführbaren

124KB PC Windows ausführbaren dieses Dialoges Probe.

API-Referenz: dialogs

Die nachstehende Tabelle listet die verfügbaren Dialog-Routinen in alphabetischer Reihenfolge in ihren jeweiligen Kategorien.
Funktion

Erklärung
Dialogfelder
GUI_CreateDialogBox GUI_CreateDialogBox Erstellen Sie eine non-blocking-Dialog.
GUI_ExecDialogBox GUI_ExecDialogBox Erstellen Sie eine Sperrung Dialog.
GUI_EndDialog End ein Dialogfenster.
Message-Boxen
GUI_MessageBox Erstellen Sie eine Message-Box.

Members Login
username
password
New MemberRegister Here
Newsletter Signup