Hauptseite | Klassenhierarchie | Auflistung der Klassen | Auflistung der Dateien | Klassen-Elemente | Datei-Elemente | Zusätzliche Informationen

U_WINDOW.H

gehe zur Dokumentation dieser Datei
00001 //############################################################################# 00002 // // 00003 // U_WINDOW.H // 00004 // // 00005 // Subsystem : Fenster-Templates: modale und modeless Dialog; MDI-Fenster // 00006 // Benutzung durch andere Subsysteme erforderlich: JA // 00007 // Implementation: U_WINDOW.CPP // 00008 //---------------------------------------------------------------------------// 00009 // Autor(en): Thomas Kullmann, Günther Reinecker // 00010 // Quelle: verschoben aus SWINTRAC.H // 00011 // Stand: 10.04.2002 // 00012 // // 00013 //############################################################################# 00014 00015 #ifndef __WINDOW_H 00016 #define __WINDOW_H 00017 00018 #include "utils\u_values.h" 00019 #include "utils\u_lists.h" 00020 #include <winuser.h> // für die unten definierten Konstanten, RegisterHotKey und UnregisterHotKey 00021 #include <vector> // für std::vector 00022 00023 // die defines entstammen der WINUSER.H 00024 00025 // modifier-Keycodes für WM_SETHOTKEY 00026 #define HOTKEYF_SHIFT 0x01 00027 #define HOTKEYF_CONTROL 0x02 00028 #define HOTKEYF_ALT 0x04 00029 #define HOTKEYF_EXT 0x08 00030 00031 // die folgenden Konstanten entsprechen dem Parameter <aCode> wenn Dlg_OnCommand eintritt 00032 const UINT ONENTER= 256; // Steuerelement hat den Eingabefokus bekommt 00033 const UINT ONEXIT= 512; // verloren 00034 00035 const DWORD MainWindow_Style= WS_CLIPCHILDREN | WS_OVERLAPPED | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU; 00036 const DWORD ClientWindow_Style= WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL; 00037 00038 #define MBINFO (MB_OK | MB_ICONINFORMATION) 00039 #define MBASK (MB_YESNO | MB_ICONEXCLAMATION) 00040 #define MBFAILURE (MB_OK | MB_ICONSTOP) 00041 #define MBSTOP (MB_OK | MB_ICONSTOP) 00042 00043 //############################################################################# 00044 // globale Konstanten 00045 //############################################################################# 00046 00047 // VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) 00048 const char VK_0= '0'; 00049 const char VK_1= '1'; 00050 const char VK_2= '2'; 00051 const char VK_3= '3'; 00052 const char VK_4= '4'; 00053 const char VK_5= '5'; 00054 const char VK_6= '6'; 00055 const char VK_7= '7'; 00056 const char VK_8= '8'; 00057 const char VK_9= '9'; 00058 00059 // VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) 00060 const char VK_A= 'A'; 00061 const char VK_B= 'B'; 00062 const char VK_C= 'C'; 00063 const char VK_D= 'D'; 00064 const char VK_E= 'E'; 00065 const char VK_F= 'F'; 00066 const char VK_G= 'G'; 00067 const char VK_H= 'H'; 00068 const char VK_I= 'I'; 00069 const char VK_J= 'J'; 00070 const char VK_K= 'K'; 00071 const char VK_L= 'L'; 00072 const char VK_M= 'M'; 00073 const char VK_N= 'N'; 00074 const char VK_O= 'O'; 00075 const char VK_P= 'P'; 00076 const char VK_Q= 'Q'; 00077 const char VK_R= 'R'; 00078 const char VK_S= 'S'; 00079 const char VK_T= 'T'; 00080 const char VK_U= 'U'; 00081 const char VK_V= 'V'; 00082 const char VK_W= 'W'; 00083 const char VK_X= 'X'; 00084 const char VK_Y= 'Y'; 00085 const char VK_Z= 'Z'; 00086 00087 //############################################################################# 00088 // global 00089 //############################################################################# 00090 00091 // ACHTUNG: So kann NUR MAX. EINE Tastenkombination registriert werden! 00092 // Diese Art Tastenkombination funktioniert auch unter Win16. 00093 // FUNKTION 00094 // registiert die angegeben Tastenkombination; Wenn bereits eine solche Tastenkombination registriert ist, wird diese überschrieben. 00095 // Was passiert, wenn die so registrierte Tastenkombination gedrückt wird? 00096 // - ist das Fenster inaktiv, wird es aktiviert 00097 // - SONST wird Botschaft WM_SYSCOMMAND mit wParam==SC_HOTKEY ans Fenster gesendet 00098 // Signatur: SetHotKey ( in aWnd, in aKey, in aShift, in aCtrl, in aAlt, in aExtended ) 00099 // - der erste Parameter ist das Handle des Fensters, das die Tastenkombinationen empfangen möchte 00100 // - der zweite Parameter entspricht einer "normalen" Taste (dafür sollten die VK_-Konstanten verwendet werden!) 00101 // - Parameter drei bis sechs bezeichnen, welche Systemtasten für die Tastenkombination zu drücken sind 00102 // ==> TRUE <--> Tastenkombination erfolgreich registriert 00103 // Bsp.: SetActivateHotKey ( wndHandle, VK_P, FALSE, TRUE, TRUE, FALSE ); // registriert Ctrl+Alt+'P' für das Fenster <wndHandle> 00104 BOOL _CURVECLASS WINAPI SetActivateHotKey ( HWND, const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); 00105 00106 //############################################################################# 00107 // THotKey 00108 //############################################################################# 00109 00110 // ACHTUNG: Diese Art Tastenkombination sind erst ab Win32 verfügbar - in Win16 deshalb leer implementiert. 00111 // Dafür können hiervon "nahezu" beliebig viele Tastenkombinationen registriert werden. 00112 // FUNKTION 00113 // registriert die angegebene Tastenkombination 00114 // Wenn die Tastenkombination gedrückt wird (AUCH WENN DAS FENSTER INAKTIV IST !!!), wird eine WM_HOTKEY-Botschaft ausgelöst, die den Keycode in lParam trägt; 00115 // Beim verarbeiten der Botschaft, kann man mit IsEqual( lParam ) ermittelt, ob es sich um diese Tastenkombination handelt. 00116 // Wenn man <m_Cmd> auf von -1 verschiedene Werte setzt und das Fensterhandle von einem (von TBasicWindow abgeleiteten) Objekt 00117 // besteht, wird (NUR wenn das Fenster aktiviert ist) anstatt der WM_HOTKEY-Botschaft ein Kommando (mit <m_Cmd> als Id) ausgelöst. 00118 // Signatur: THotKey ( in aWindow, in aKey, in aShift, in aCtrl, in aAlt, in aWin ) 00119 // - der erste Parameter ist das Handle des Fensters, das die Tastenkombinationen empfangen möchte 00120 // - der zweite Parameter entspricht einer "normalen" Taste (dafür sollten die VK_-Konstanten verwendet werden!) 00121 // - Parameter drei bis sechs bezeichnen, welche Systemtasten für die Tastenkombination zu drücken sind - der letzte Parameter entspricht der Windows-Taste 00122 // ==> TRUE <--> Tastenkombination erfolgreich registriert 00123 // Bsp. THotKey ( wndHandle, VK_P, FALSE, TRUE, TRUE, FALSE ); // registriert Ctrl+Alt+'P' für das Fenster <wndHandle> 00124 class THotKey 00125 { 00126 //----------------------------------------------------------------------------- 00127 // Konstruktor-Destruktor 00128 private: 00129 THotKey( THotKey& ) {} // kein Copy-Konstruktor 00130 THotKey &operator= ( const THotKey& ) 00131 { 00132 return *this; 00133 } // und auch kein Zuweisungsoperator 00134 00135 public: 00136 THotKey ( HWND, const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); 00137 virtual ~THotKey ( void ); 00138 00139 //----------------------------------------------------------------------------- 00140 // Accessormethode(n) 00141 public: 00142 BOOL IsEqual ( LPARAM ) const; 00143 BOOL IsRegistered ( void ) const; 00144 00145 //----------------------------------------------------------------------------- 00146 // STATIC 00147 public: 00148 static UINT CalcModifier ( const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); // berechnet den Modifer-Code 00149 static LPARAM CalcKeyCode ( const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); // berechnet den Key-Code 00150 00151 //----------------------------------------------------------------------------- 00152 // ATTRIBUTE 00153 public: 00154 int m_Cmd; // wenn die Tastenkombination gedrückt wird, löst TBasicWindow ein Kommando mit <m_Cmd> aus; bei <m_Cmd>==-1 wird eine WM_HOTKEY-Botschaft ausgelöst (siehe Beschreibung von THotKey) 00155 00156 private: 00157 HWND m_Window; // Fenster, das die WM_HOTKEY-Botschaft erhalten soll, wenn die Tastenkombination gedrückt wurde 00158 ATOM m_Atom; // eindeutiger Bezeichner; 0 wenn keiner mehr verfügbar 00159 BOOL m_Registered; // Tastenkombination registriert? 00160 00161 LPARAM m_KeyCode; // KeyCode der (im Konstruktor übergebenen) Tastenkombination 00162 }; 00163 00164 //############################################################################# 00165 // TBasicWindow 00166 //############################################################################# 00167 00168 class _CURVECLASS TBasicWindow 00169 { 00170 //----------------------------------------------------------------------------- 00171 // Konstruktor-Destruktor 00172 private: 00173 TBasicWindow ( TBasicWindow& ) {} // kein Copy-Konstruktor 00174 TBasicWindow &operator= ( const TBasicWindow& ) 00175 { 00176 return *this; 00177 } // und auch kein Zuweisungsoperator 00178 00179 public: 00180 TBasicWindow ( HINSTANCE ); 00181 virtual ~TBasicWindow ( void ); 00182 00183 //----------------------------------------------------------------------------- 00184 // Accessormethode(n) 00185 public: 00186 HWND GetHandle ( void ) const 00187 { 00188 return m_Window; 00189 }; 00190 00191 HINSTANCE GetInstance() const 00192 { 00193 return m_Instance; 00194 }; 00195 00196 //----------------------------------------------------------------------------- 00197 // StringTable-Einträge laden 00198 public: 00199 // Signatur: LoadString( in aResId ) 00200 // sucht den StringTable-Eintrag <aStrTbleId>, ermittelt die Größe, reserviert entsprechend dynamischen Speicher 00201 // und gibt den String zurück - der Aufrufer muss den Speicher freigeben!!! 00202 // wird der Eintrag nicht gefunden, wird "" zurückgegeben*** 00203 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00204 char *LoadString(const int) const; 00205 00206 // Signatur: LoadString( in aResId, out aValid ) 00207 // WIEVOR, <aValid> gibt zusätzlich an, ob der Eintrag gefunden wurde 00208 char *LoadString ( const int, BOOL & ) const; 00209 00210 //----------------------------------------------------------------------------- 00211 // Fenster-Titel ermitteln 00212 private: 00213 // Signatur: GetWindowText( in aWindow ) 00214 // ermittelt den Titel des Fensters mit Handle <aWindow>, ermittelt die Größe, reserviert entsprechend dynamischen Speicher 00215 // und gibt den String zurück - der Aufrufer muss den Speicher freigeben!!! 00216 // wird der Eintrag nicht gefunden, wird "ohne Titel" zurückgegeben*** 00217 static char *GetWindowTxt ( HWND ); 00218 00219 // WIEVOR, für <m_Window> 00220 char *GetWindowTxt(); 00221 00222 //----------------------------------------------------------------------------- 00223 // Meldungsfenster anzeigen 00224 public: 00225 // zeigt eine MessageBox 00226 // der erste Parameter ist der Text, der zweite der Titel des Fensters, der dritte Parameter die Art der Meldung 00227 // die Parameter können entweder direkt als Zeichenkette (LPCSTR) oder 00228 // als Ressourcen-ID auf einen StringTable-Eintrag angegeben werden. 00229 // Wird der Text-Eintrag nicht gefunden, eine Fehlermeldung ohne Text.*** 00230 // Fehlt der Titel, wird <_MSGTITLE> verwendet.*** 00231 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00232 int MessageBox(LPCSTR, LPCSTR= "", UINT= 0) const; 00233 int MessageBox(const int, LPCSTR= "", UINT= 0) const; 00234 int MessageBox(LPCSTR, const int, UINT= 0) const; 00235 int MessageBox(const int, const int, UINT= 0) const; 00236 00237 //----------------------------------------------------------------------------- 00238 // EREIGNISSE 00239 protected: 00240 // wenn OnEvent in einer abgeleiteten Klasse überschrieben wird und die Botschaft 00241 // nicht verarbeitet werden konnte, sollte diese Methode aufgerufen werden, um die restlichen Windows-Botschaften zu verarbeiten 00242 // Rückgabewert bestimmt, ob Botschaft verarbeitet wurde 00243 virtual LRESULT OnEvent ( HWND, UINT, WPARAM, LPARAM ) 00244 { 00245 return FALSE; 00246 }; 00247 00248 //----------------------------------------------------------------------------- 00249 // Liste der registrierten Fenster; Zuordnung HWND <--> Fensterobjekt 00250 protected: 00251 // registriert dieses Objekt, indem es in eine Liste eingetragen wird 00252 void RegisterWindow ( HWND ); // muss nicht durch das Objekt selbst aufgerufen werden, siehe s_WaitingWindow 00253 00254 // löscht die Registrierung dieses Objekts; Botschaften werden dann nicht mehr an dieses Objekt weitergeleitet 00255 void UnregisterWindow ( void ); // sollte NUR aufgerufen werden wenn das Fenster nicht mehr angezeigt wird 00256 00257 // ==> Fensterhandle in registriertes Objekt "umwandeln" 00258 static TBasicWindow *Handle2Object ( HWND ); 00259 00260 // STATIC 00261 protected: 00262 // hier kommen die Botschaften ALLER Fenster an, die dann ans jeweilige Fensterobjekt weitergeleitet wird 00263 static LRESULT CALLBACK EventHandler ( HWND, UINT, WPARAM, LPARAM ); 00264 //WIEVOR, zuletzlich gibt der letzte Parameter an, ob die Botschaft korrekt weitergeleitet werden konnte 00265 static LRESULT CALLBACK EventHandlerEx ( HWND, UINT, WPARAM, LPARAM, BOOL& ); 00266 00267 //----------------------------------------------------------------------------- 00268 // ATTRIBUTE 00269 protected: 00270 HWND m_Window; // Handle des registierten Fensters ODER 0 00271 HINSTANCE m_Instance; 00272 00273 // STATIC 00274 protected: 00275 // kurz bevor man ein Fenster zum ersten Mal angezeigt - z.B. mit Methode DialogBoxParam() - muss man s_WaitingWindow= this setzen 00276 // sobald die nächste Botschaft für ein nicht registriertes Fenster empfangen wird, wird das Fenster in s_WaitingWindow automatisch registriert und aus dem Wartezustand genommen, s_WaitingWindow= 0 00277 static TBasicWindow *s_WaitingWindow; // Verknüpfung zum angemeldeten Fenster 00278 00279 private: 00280 static TIndList s_WindowList; // Liste der geöffneten Fenster 00281 00282 //----------------------------------------------------------------------------- 00283 // Tastenkombinationen 00284 public: // Diese Funktionen dürfen erst aufgerufen werden, wenn das Fenster bereits ein Handle besitzt !!! 00285 // siehe ::SetHotKey 00286 BOOL SetActivateHotKey ( const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); 00287 00288 //nur ab Win32 verfügbar, sonst leer implementiert 00289 // siehe THotKey 00290 // Wenn man <m_Cmd> JEDOCH auf einen von -1 verschiedenen Wert setzt, löst TBasicWindow ein Kommando mit <m_Cmd> aus (NUR wenn das Fenster aktiviert ist); 00291 // SONST wird eine WM_HOTKEY-Botschaft ausgelöst und man kann mit IsHotKey( lParam, const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ) ermittelt werden, welche Tastenkombination eingetreten ist 00292 // ==> TRUE <--> Tastenkombination wurde registriert 00293 BOOL AddHotKey ( const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); 00294 00295 // liest die Tastenkombinationen aus der Accelerator-Ressource (die mit LoadAccelerators() geladen und im Parameter angegeben wird) 00296 // Wenn eine der geladenen Tastenkombinationen gedrückt wird, wird das (in den Ressourcen für diese Tastenkombination angegebene) Kommando ausgelöst; bei <m_Cmd> == -1 wird eine WM_HOTKEY-Botschaft 00297 // ausgelöst und man kann mit IsHotKey( lParam, const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ) ermittelt werden, welche Tastenkombination eingetreten ist. 00298 // ==> Anzahl der geladenen Tastenkombinationen (d.h. nicht, dass die Tastenkombinationen registriert werden konnten) 00299 UINT LoadHotKeys ( HACCEL ); 00300 00301 // prüft, ob die angegebene Tastenkombinationen gedrückt wurde 00302 // ==> TRUE <--> der KeyCode in lParam entspricht der (in den rechtlichen Parametern übergebenen) Tastenkombination 00303 BOOL IsHotKey ( LPARAM, const char, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE, const BOOL= FALSE ); 00304 00305 //hp std::vector müsste als __declspec(dllexport) definiert sein - nicht möglich, da vorkompilierte Bibliothek 00306 #pragma warning( push ) 00307 #pragma warning( disable : 4251 ) 00308 // Liste der Win32-Tastenkombinationen für dieses Fenster 00309 std::vector<THotKey*> m_HotKeys; 00310 #pragma warning( pop ) 00311 }; 00312 00313 //############################################################################# 00314 // TBasicDialog 00315 //############################################################################# 00316 00317 enum ECheckState { csUnknown= 0, csChecked, csUnchecked, csIndeterminate }; 00318 00319 class _CURVECLASS TBasicDialog : public TBasicWindow 00320 { 00321 //----------------------------------------------------------------------------- 00322 // Konstruktor-Destruktor 00323 public: 00324 // der erste Parameter ist die Ressourcenbezeichnung zu anzuzeigenden Dialogfensters 00325 // der letzte Parameter gibt die Instanz an, aus welcher die Ressource zu laden ist 00326 TBasicDialog ( const char* , HINSTANCE ); 00327 virtual ~TBasicDialog ( void ); 00328 00329 //----------------------------------------------------------------------------- 00330 // Accessormethode(n) 00331 public: 00332 const char *GetResName ( void ) const 00333 { 00334 return m_ResName; 00335 }; 00336 00337 //----------------------------------------------------------------------------- 00338 // Verwaltung des Inhalts von Steuerelementen 00339 public: 00340 // Signatur: CtrlGetText( in aResId, out aReturn, in aMaxChars ) 00341 // liest den Inhalt eines Steuerelements mit RessourcenId <aResId> in <aReturn> (bei mehr als <aMaxChars> wird der Rest abgeschnitten) 00342 // ==> wieviele Zeichen wurden in <aReturn> gespeichert; 0 bei Fehlern 00343 UINT CtrlGetText ( const int, char*, const int ) const; 00344 00345 // Signatur: CtrlSetText( in aResId, in aString ) 00346 // trägt <aString> in das Steuerelement (mit RessourcenId <aResId>) ein 00347 // ==> TRUE <--> Wert erfolgreich eingetragen 00348 BOOL CtrlSetText ( const int, LPCSTR ) const; 00349 00350 // Signatur: CtrlSetText( in aResId, in aStrTbleId ) 00351 // sucht den StringTable-Eintrag <aStrTbleId> und trägt ihn in das Steuerelement (mit RessourcenId <aResId>) ein 00352 // ist der Eintrag nicht vorhanden, wird kein Text ("") eingetragen*** 00353 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00354 // ==> TRUE <--> Eintrag gefunden und erfolgreich eingetragen 00355 BOOL CtrlSetText ( const int, const int ) const; 00356 00357 public: 00358 // Signatur: CtrlGetLong( in aResId, out aValid ) 00359 // ==> der Long-Wert aus dem Steuerelement (mit RessourcenId <aResId>) 00360 // Hat der gelesene Wert Nachkommastellen, werden diese verworfen.(ABRUNDEN). 00361 // Gibt es kein solches Steuerelement oder steht dort kein Long-Wert, wird eine Fehlermeldung ausgegeben; im letzen Parameter wird FALSE zurückgeben - der Rückgabewert ist 0. 00362 // ACHTUNG: Im Gegensatz zur Konvertierung mittels atof(...) wird "1a234" nicht als 00363 // Long-Wert akzeptiert! Dies ist demnach ein Fehlerfall. 00364 LONG CtrlGetLong ( const int, BOOL& ) const; 00365 00366 // Signatur: CtrlGetLong( in aResId, in aMin, in aMax, out aValid ) 00367 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins Intervall [<aMin>..<aMax>] eingepasst. 00368 LONG CtrlGetLong ( const int, const LONG, const LONG, BOOL& ) const; 00369 00370 // Signatur: CtrlSetLong( in aResId, in aLong ) 00371 // trägt <aLong> in das Steuerelement (mit RessourcenId <aResId>) ein 00372 // ==> TRUE <--> Wert erfolgreich eingetragen 00373 BOOL CtrlSetLong ( const int, const LONG ) const; 00374 00375 public: 00376 // Signatur: CtrlGetDouble( in aResId, in aDigits, in aDecimal, out aValid ) 00377 // ==> der Double-Wert aus dem Steuerelement (mit RessourcenId <aResId>) 00378 // Hat der gelesene Wert mehr als <aDigits> Nachkommastellen, werden nachfolgendene verworfen.(ABRUNDEN); Kommazeichen ist <aDecimal>. 00379 // Gibt es kein solches Steuerelement oder steht dort kein Double-Wert, wird eine Fehlermeldung ausgegeben; im letzen Parameter wird FALSE zurückgeben - der Rückgabewert ist 0.0. 00380 // ACHTUNG: Im Gegensatz zur Konvertierung mittels atof(...) wird "1a234" nicht als 00381 // Double-Wert akzeptiert! Dies ist demnach ein Fehlerfall. 00382 double CtrlGetDouble ( const int, const UINT, const char, BOOL& ) const; 00383 00384 // Signatur: CtrlGetDouble( in aResId, in aMin, in aMax, in aDigits, in aDecimal, out aValid ) 00385 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins Intervall [<aMin>..<aMax>] eingepasst. 00386 double CtrlGetDouble ( const int, const double, const double, const UINT, const char, BOOL& ) const; 00387 00388 // Signatur: CtrlSetDouble( in aResId, in aDouble, in aDigits, in aDecimal ) 00389 // trägt <aDouble> in das Steuerelement (mit RessourcenId <aResId>) ein 00390 // Nach der zu schreibende Wert mehr als <aDigits> Nachkommastellen, werden nachfolgende verworfen.(ABRUNDEN); Kommazeichen ist <aDecimal>. 00391 // ==> TRUE <--> Wert erfolgreich eingetragen 00392 BOOL CtrlSetDouble ( const int, const double, const UINT, const char ) const; 00393 00394 public: 00395 // Signatur: CtrlGetFloat( in aResId, in aDigits, in aDecimal, out aValid ) 00396 // ==> der Float-Wert aus dem Steuerelement (mit RessourcenId <aResId>) 00397 // Hat der gelesene Wert mehr als <aDigits> Nachkommastellen, werden nachfolgendene verworfen.(ABRUNDEN); Kommazeichen ist <aDecimal>. 00398 // Gibt es kein solches Steuerelement oder steht dort kein Float-Wert, wird eine Fehlermeldung ausgegeben; im letzen Parameter wird FALSE zurückgeben - der Rückgabewert ist 0.0. 00399 // ACHTUNG: Im Gegensatz zur Konvertierung mittels atof(...) wird "1a234" nicht als 00400 // Float-Wert akzeptiert! Dies ist demnach ein Fehlerfall. 00401 float CtrlGetFloat ( const int, const UINT, const char, BOOL& ) const; 00402 00403 // Signatur: CtrlGetFloat( in aResId, in aMin, in aMax, in aDigits, in aDecimal, out aValid ) 00404 // ==> WIEVOR, der zurückzugebene Wert wird jedoch zusätzlich ins Intervall [<aMin>..<aMax>] eingepasst. 00405 float CtrlGetFloat ( const int, const float, const float, const UINT, const char, BOOL& ) const; 00406 00407 // Signatur: CtrlSetFloat( in aResId, in aFloat, in aDigits, in aDecimal ) 00408 // trägt <aFloat> in das Steuerelement (mit RessourcenId <aResId>) ein 00409 // Nach der zu schreibende Wert mehr als <aDigits> Nachkommastellen, werden nachfolgende verworfen.(ABRUNDEN); Kommazeichen ist <aDecimal>. 00410 // ==> TRUE <--> Wert erfolgreich eingetragen 00411 BOOL CtrlSetFloat ( const int, const float, const UINT, const char ) const; 00412 00413 // Kombinationsfenster (ComboBox) 00414 public: 00415 // Signatur: CtrlAddString( in aResId, in aString ) 00416 // fügt <aString> als neues, letztes Element in das Kombinationsfenster (mit RessourcenId <aResId>) ein 00417 // ==> Index des eingefügten Eintrags oder CB_ERR (==-1) 00418 int CtrlAddString( const int, LPCSTR ) const; 00419 00420 // Signatur: CtrlAddString( in aResId, in aStrTbleId ) 00421 // sucht den StringTable-Eintrag <aStrTbleId> und trägt ihn in das Steuerelement (mit RessourcenId <aResId>) ein 00422 // ist der Eintrag nicht vorhanden, wird nichts eingetragen*** 00423 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00424 // ==> Index des eingefügten Eintrags oder CB_ERR (==-1) 00425 int CtrlAddString( const int, const int ) const; 00426 00427 // Signatur: CtrlDelString( in aResId, in aString ) 00428 // versucht <aString> im Kombinationsfenster (mit RessourcenId <aResId>) zu löschen 00429 // ==> Anzahl der verbleibenden Einträge; ggf. CB_ERR (==-1) 00430 int CtrlDelString( const int, LPCSTR ) const; 00431 00432 // Signatur: CtrlDelString( in aResId, in aStrTbleId ) 00433 // versucht den StringTable-Eintrag <aStrTbleId> im Kombinationsfenster (mit RessourcenId <aResId>) zu löschen 00434 // ist der Eintrag nicht vorhanden, wird nichts gelöscht*** 00435 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00436 // ==> Anzahl der verbleibenden Einträge; ggf. CB_ERR (==-1) 00437 int CtrlDelString( const int, const int ) const; 00438 00439 // Signatur: CtrlGetCount( in aResId ) 00440 // ==> Anzahl der Einträge im Kombinationsfenster (mit RessourcenId <aResId>); ggf. CB_ERR (==-1) 00441 int CtrlGetCount( const int ) const; 00442 00443 // Signatur: CtrlFindString( in aResId, in aText, in aStartIdx ) 00444 // sucht <aText> im Kombinationsfenster (mit RessourcenId <aResId>)**** und gibt den Index des Eintrages zurück; ggf. CB_ERR (==-1) 00445 // ****Die Suche wird nach dem Index <aStartIdx> begonnen. Am Ende der Liste wird von vorn beginnen, bis als letztes <aStartIdx> erreicht wird. -1 durchsucht die gesamte Liste. 00446 // ==> Index des gefundenen Eintrags; ggf. CB_ERR (==-1) 00447 int CtrlFindString( const int, LPCSTR, const int= -1 ) const; 00448 00449 // Signatur: CtrlFindString( in aResId, in aStrTbleId, in aStartIdx ) 00450 // sucht den StringTable-Eintrag <aStrTbleId> im Kombinationsfenster (mit RessourcenId <aResId>)**** und gibt den Index des Eintrages zurück; ggf. CB_ERR (==-1) 00451 // wird der Eintrag nicht in der StringTable gefunden, wird CB_ERR (==-1) zurückgegeben*** 00452 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00453 // ****Die Suche wird nach dem Index <aStartIdx> begonnen. Am Ende der Liste wird von vorn beginnen, bis als letztes <aStartIdx> erreicht wird. -1 durchsucht die gesamte Liste. 00454 // ==> Index des gefundenen Eintrags; ggf. CB_ERR (==-1) 00455 int CtrlFindString( const int, const int, const int= -1 ) const; 00456 00457 // Signatur: CtrlGetSel( in aResId ) 00458 // ==> Index des aktuell ausgewählten Eintrags des Kombinationsfensters (mit RessourcenId <aResId>); ggf. CB_ERR (==-1) 00459 int CtrlGetSel( const int ) const; 00460 00461 // Signatur: CtrlGetSelString( in aResId ) 00462 // ermittelt die Größe, reserviert entsprechend dynamischen Speicher und gibt den aktuell ausgewählten Eintrags des Kombinationsfensters (mit RessourcenId <aResId>) zurück - der Aufrufer muss der Speicher freigeben!!! 00463 // wird der Eintrag nicht gefunden, wird "" zurückgegeben 00464 // ==> aktuell ausgewählter Eintrag 00465 char *CtrlGetSelString( const int ) const; 00466 00467 // Signatur: CtrlSetSel( in aResId, in aIdx ) 00468 // wählt den Eintrag an Index <aIdx> im Kombinationsfensters (mit RessourcenId <aResId>) aus 00469 // ==> Index des ausgewählten Eintrags; CB_ERR (==-1) wenn das Kombinationsfenster <aResId> nicht gefunden wurde 00470 int CtrlSetSel( const int, const int ) const; 00471 00472 // Signatur: CtrlSetSelString( in aResId, in aString ) 00473 // versucht <aString> im Kombinationsfenster (mit RessourcenId <aResId>)**** auszuwählen 00474 // ****Die Suche wird nach dem Index <aStartIdx> begonnen. Am Ende der Liste wird von vorn beginnen, bis als letztes <aStartIdx> erreicht wird. -1 durchsucht die gesamte Liste. 00475 // ==> Index des aktuell ausgewählten Eintrags; CB_ERR (==-1) wenn das Kombinationsfenster <aResId> nicht gefunden wurde 00476 int CtrlSetSelString( const int, LPCSTR, const int= -1 ) const; 00477 00478 // Signatur: CtrlSelString( in aResId, in aStrTbleId ) 00479 // sucht den StringTable-Eintrag <aStrTbleId>**** und versucht ihn im Kombinationsfenster (mit RessourcenId <aResId>) auszuwählen 00480 // ist der Eintrag nicht vorhanden, bleibt die aktuelle Auswahl erhalten*** 00481 // ***In der DEBUG-Version wird zusätzlich eine TraceErr-Fehlermeldung ausgegeben! 00482 // ****Die Suche wird nach dem Index <aStartIdx> begonnen. Am Ende der Liste wird von vorn beginnen, bis als letztes <aStartIdx> erreicht wird. -1 durchsucht die gesamte Liste. 00483 // ==> Index des aktuell ausgewählten Eintrags; CB_ERR (==-1) wenn das Kombinationsfenster <aResId> nicht gefunden wurde 00484 int CtrlSetSelString( const int, const int, const int= -1 ) const; 00485 00486 // Allgemein 00487 public: 00488 // Signatur: Ctrl( in aResId ) 00489 // ==> Handle des Steuerelements (mit RessourcenId <aResId>); 0 im Fehlerfall 00490 HWND Ctrl ( const int ) const; 00491 00492 // Signatur: CtrlHasFocus( in aResId ) 00493 // ==> TRUE <--> das angegebene Steuerelement ist fokussiert 00494 BOOL CtrlHasFocus ( const int ) const; 00495 00496 // Signatur: CtrlSetFocus( in aResId ) 00497 // fokussiert das Steuerelement (mit RessourcenId <aResId>) 00498 // ==> TRUE <--> Steuerelement erfolgreich fokussiert 00499 BOOL CtrlSetFocus ( const int ) const; 00500 00501 // Signatur: CtrlIsEnabled( in aResId ) 00502 // ==> TRUE <--> das angegebene Steuerelemet ist freigegeben 00503 BOOL CtrlIsEnabled ( const int ) const; 00504 00505 // Signatur: CtrlSetEnabled( in aResId, in aEnable ) 00506 // gibt das Steuerelement (mit RessourcenId <aResId>) frei oder sperrt es (ausgrauen funktioniert unter VC) 00507 // ==> TRUE <--> Steuerelement war vor dieser Aktion gesperrt 00508 BOOL CtrlSetEnabled ( const int, const BOOL ) const; 00509 00510 // Kontrollkästchen (CheckBox), Optionsfeld (RadioButton) 00511 public: 00512 // Signatur: CtrlIsChecked( in aResId ) 00513 // ==> TRUE <--> das Steuerelement ist ausgewählt (BST_CHECKED) 00514 BOOL CtrlIsChecked ( const int ) const; 00515 00516 // Signatur: CtrlSetChecked( in aResId, in aChecked ) 00517 // wählt das Steuerelement (mit RessourceId <aResId>) aus (<aChecked>==TRUE) oder hebt die Auswahl auf (SONST) 00518 // ==> 00519 BOOL CtrlSetChecked ( const int, const BOOL ) const; 00520 00521 // Signatur: CtrlGetState( in aResId ) 00522 // ermittelt den Zustand des Steuerelements 00523 // ==> csChecked / BST_CHECKED <--> Steuerelement ist ausgewählt 00524 // csUnchecked / BST_UNCHECKED <--> nicht ausgewählt 00525 // csIndeterminate / BST_INDETERMINATE <--> weder ausgewählt noch nicht ausgewählt (grayed) 00526 // csUnknown / 0 <--> nicht vorhanden 00527 UINT CtrlGetState ( const int ) const; 00528 ECheckState CtrlGetCheckState ( const int ) const; 00529 00530 // Signatur: CtrlSetState( in aResId, in aCheckState ) 00531 // ändert den Zustand des Steuerelements (mit RessourcenId <aResId>); für mögliche Optionen siehe CtrGetState 00532 // ==> neuer Zustand des Steuerelements; siehe CtrlGetState 00533 UINT CtrlSetState ( const int, const UINT ) const; 00534 ECheckState CtrlSetCheckState ( const int, const ECheckState ) const; 00535 00536 //----------------------------------------------------------------------------- 00537 // EREIGNISSE 00538 protected: 00539 virtual LRESULT OnEvent ( HWND, UINT, WPARAM, LPARAM ); 00540 00541 // Standardereignisse 00542 virtual void Dlg_OnCommand ( HWND, int, HWND, UINT ) 00543 {}; 00544 00545 virtual BOOL Dlg_OnInit ( HWND, HWND, LPARAM ) 00546 { 00547 return TRUE; 00548 }; 00549 00550 virtual void Dlg_OnHScrollBar ( HWND, HWND, UINT, int ) 00551 {}; 00552 00553 virtual void Dlg_OnVScrollBar ( HWND, HWND, UINT, int ) 00554 {}; 00555 00556 virtual void Dlg_OnTimer ( HWND, UINT ) 00557 {}; 00558 00559 // klier 24.08.02 00560 virtual BOOL Dlg_OnSysCommand ( HWND, int, LPARAM ) 00561 { 00562 return FALSE; 00563 }; 00564 00565 // Mausereignisse (Klier) 00566 virtual void Dlg_OnLButtonUp ( HWND, int, int, UINT ) 00567 {}; 00568 00569 virtual void Dlg_OnLButtonDown ( HWND, UINT, int, int, UINT ) 00570 {}; 00571 00572 virtual void Dlg_OnRButtonDown ( HWND, UINT, int, int, UINT ) 00573 {}; 00574 00575 virtual void Dlg_OnMouseMove ( HWND, int, int, UINT ) 00576 {}; 00577 00578 //Datum: 27.07.2002 virtual void Dlg_OnMouseActivate ( HWND, int, HWND, UINT ) {}; 00579 virtual int Dlg_OnMouseActivate ( HWND, HWND, UINT, UINT ) 00580 { 00581 return 1; 00582 }; 00583 00584 // Rest (Klier) 00585 00586 //10.07.2003 klier 00587 // Auf Änderungen an TabCtrl und ListView kann reagiert werden! 00588 virtual void Dlg_OnNotify ( HWND, int, UINT, UINT ) 00589 {}; 00590 00591 virtual void Dlg_OnDestroy ( HWND ) 00592 {}; 00593 00594 virtual void Dlg_OnSetFocus ( HWND, HWND ) 00595 {}; 00596 00597 //Datum: 27.07.2002 virtual void Dlg_OnKillFocus ( HWND, HWND ) {}; 00598 00599 // Tastatur 00600 virtual BOOL Dlg_OnChar ( HWND, WPARAM, LPARAM ); 00601 00602 //Datum: 27.07.2002 virtual void Paint ( void ) {}; 00603 00604 //----------------------------------------------------------------------------- 00605 // EREIGNISSE zum Schließen des Fensters 00606 protected: 00607 virtual BOOL CanClose ( void ) 00608 { 00609 return TRUE; 00610 }; 00611 00612 virtual void Interrupt ( void ) 00613 {}; 00614 00615 virtual void LeaveDialog ( void ) 00616 {}; 00617 00618 //----------------------------------------------------------------------------- 00619 // ATTRIBUTE 00620 private: 00621 char *m_ResName; // Name der anzuzeigenden Ressource 00622 }; 00623 00624 //############################################################################# 00625 // TModalDlg 00626 //############################################################################# 00627 00628 class _CURVECLASS TModalDlg : public TBasicDialog 00629 { 00630 //----------------------------------------------------------------------------- 00631 // Konstruktor-Destruktor 00632 public: 00633 TModalDlg ( const char*, HINSTANCE hInstance); 00634 virtual ~TModalDlg ( void ); 00635 00636 //----------------------------------------------------------------------------- 00637 // Dialog anzeigen 00638 public: 00639 int ExecuteDialog ( HWND ); 00640 00641 //----------------------------------------------------------------------------- 00642 // EREIGNISSE 00643 protected: 00644 // wenn Dlg_OnCommand in einer abgeleitete Klasse überschrieben wird und die Botschaft 00645 // nicht verarbeitet werden konnte, sollte diese Methode aufgerufen werden; sonst kann der Dialog nicht beendet werden 00646 virtual void Dlg_OnCommand ( HWND, int, HWND, UINT ); 00647 00648 //----------------------------------------------------------------------------- 00649 // ATTRIBUTE 00650 protected: 00651 FARPROC m_Handler; 00652 }; 00653 00654 //############################################################################# 00655 // TModelessDlg 00656 //############################################################################# 00657 00658 class _CURVECLASS TModelessDlg : public TBasicDialog 00659 { 00660 //----------------------------------------------------------------------------- 00661 // Konstruktor-Destruktor 00662 public: 00663 // Neben dem Namen der Ressource des anzuzeigenden Dialogfensters muss auch die Adresse auf die Variable übergeben werden, wo dieses Dialogfenster gespeichert ist. 00664 // Wenn das Fenster geschlossen wird, wird diese Variable 0 gesetzt. Sonst müsste das Hauptprogramm beim Beenden auch alle modeless Dialogobjekte freigeben. 00665 TModelessDlg ( const char*, TModelessDlg** , HINSTANCE); 00666 virtual ~TModelessDlg ( void ); 00667 00668 //----------------------------------------------------------------------------- 00669 // Dialog anzeigen 00670 public: 00671 BOOL Initialize ( HINSTANCE, HWND ); 00672 00673 //----------------------------------------------------------------------------- 00674 // EREIGNISSE 00675 protected: 00676 // wenn Dlg_OnCommand in einer abgeleitete Klasse überschrieben wird und die Botschaft 00677 // nicht verarbeitet werden konnte, sollte diese Methode aufgerufen werden, um das Beendigungsverhalten zu impl. 00678 virtual void Dlg_OnCommand ( HWND, int, HWND, UINT ); 00679 00680 //----------------------------------------------------------------------------- 00681 // ATTRIBUTE 00682 protected: 00683 DLGPROC m_Handler; 00684 TModelessDlg **m_Reference; 00685 }; 00686 00687 //############################################################################# 00688 // TBasicMDIWindow 00689 //############################################################################# 00690 00691 class _CURVECLASS TBasicMDIWindow : public TBasicWindow 00692 { 00693 //----------------------------------------------------------------------------- 00694 // Konstruktor-Destruktor 00695 public: 00696 TBasicMDIWindow ( HINSTANCE ); 00697 virtual ~TBasicMDIWindow ( void ); 00698 00699 //----------------------------------------------------------------------------- 00700 // Dialog anzeigen 00701 public: 00702 // Fenster erzeugen und anzeigen 00703 LRESULT Show ( HWND, const int= -1, const int= -1, const int= -1, const int= -1 ); 00704 00705 //----------------------------------------------------------------------------- 00706 // Start-/ Beendigungsverhalten und Aussehen des Fensters 00707 protected: 00708 // Fenster öffnen/ schließen erlaubt? 00709 virtual BOOL CanOpen ( void ) 00710 { 00711 return TRUE; 00712 } 00713 virtual BOOL CanClose ( void ) 00714 { 00715 return TRUE; 00716 } 00717 00718 // Hintergrundfarbe für den Clientbereich 00719 virtual HBRUSH GetBkColor ( void ) const 00720 { 00721 return HBRUSH(COLOR_WINDOW + 1); 00722 } 00723 00724 // Icon für die Titelleiste 00725 virtual HICON GetIcon ( void ) const 00726 { 00727 return 0; 00728 } 00729 00730 // welchen Mauszeiger? 00731 virtual HCURSOR GetCursor( void ) const 00732 { 00733 return LoadCursor( NULL, IDC_ARROW ); 00734 }; 00735 00736 // Kontextmenü 00737 virtual HMENU GetMenu ( HWND ) const 00738 { 00739 return 0; 00740 } 00741 00742 virtual LPCSTR ClassName ( void ) 00743 { 00744 return "GR+JF"; 00745 }; 00746 00747 // m_Title anzeigen 00748 virtual BOOL SetTitle ( void ); 00749 00750 //----------------------------------------------------------------------------- 00751 // EREIGNISSE 00752 protected: 00753 // wenn OnEvent in einer abgeleitete Klasse überschrieben wird und die Botschaft 00754 // nicht verarbeitet werden konnte, sollte diese Methode aufgerufen werden, um das Beendigungsverhalten zu impl. 00755 virtual LRESULT OnEvent ( HWND, UINT, WPARAM, LPARAM ); 00756 00757 // Tastatur 00758 virtual void OnHotKey ( LPARAM ); 00759 virtual void OnKeyDown ( WPARAM, LPARAM ) {}; 00760 virtual void OnKeyUp ( WPARAM, LPARAM ) {}; 00761 00762 // Maus 00763 virtual void OnLButtonDown ( WPARAM, LPARAM ) {} 00764 virtual void OnLButtonUp ( WPARAM, LPARAM ) {} 00765 virtual void OnRButtonDown ( WPARAM, LPARAM ) {} 00766 virtual void OnMouseMove ( WPARAM, LPARAM ) {} 00767 00768 // Kommandos 00769 virtual LRESULT OnCommand( WPARAM, LPARAM ) 00770 { 00771 return 0; 00772 } 00773 virtual void OnCreate( void ) {} 00774 virtual void OnNotCreated( void ) {} 00775 00776 // Zeichnen 00777 virtual void OnPaint ( void ); // WM_PAINT 00778 virtual void DoPaint( HDC, PAINTSTRUCT* ) {} // auf HDC zeichnen 00779 00780 // (Kontext-)Menü 00781 virtual void OnPopupMenuInit ( WPARAM, LPARAM ) {} 00782 virtual void OnMenuSelect ( WPARAM, LPARAM ) {} 00783 00784 // Sonstiges 00785 virtual void OnFocus ( void ) {} 00786 virtual void OnSize ( WPARAM, LPARAM ) {} 00787 virtual void OnTimer ( WPARAM, LPARAM ) {} 00788 virtual void OnRenderFormat ( WPARAM, LPARAM ) {} 00789 virtual void OnRenderAllFormats ( WPARAM, LPARAM ) {} 00790 00791 //----------------------------------------------------------------------------- 00792 //ATTRIBUT(E) 00793 protected: 00794 char m_Title[256]; // Beschriftung der Titelleiste 00795 00796 private: 00797 bool m_Showing; // Show bereits aufgerufen 00798 00799 //----------------------------------------------------------------------------- 00800 //STATIC 00801 private: 00802 static LRESULT CALLBACK EventHandler ( HWND, UINT, WPARAM, LPARAM ); 00803 }; 00804 00805 #endif //#ifndef __WINDOW_H 00806 00807 //############################################################################# 00808 // LASTLINE 00809 //#############################################################################

Erzeugt am Sat Nov 13 12:48:12 2004 für XCTL32 von doxygen 1.3.7