home *** CD-ROM | disk | FTP | other *** search
- // ************************************* **
- // Name: launch.cpp
- // Funktion:Definiert das Klassenverhalten
- // der Applikation.
- // Problem: C/C++ 7.0 PWB - Starten eines
- // Windows Programmes
- // Es stellt sich heraus, das die
- // Verwendung von WXSERVER wegen
- // der Hin- und Herschalterei
- // sehr nervig ist.
- // Also wird die PWB in einem
- // Window ausgeführt und das zu
- // erzeugende Programm per
- // Doppelklick aus einer Programm-
- // gruppe gestartet. Dann hat man
- // aber das Problem, daß das PWB
- // Window das Icon der Anwendung
- // ständig verdeckt - deshalb muß
- // man häufiger klicken als
- // eigentlich notwendig.
- // Lösung: Erstellen einer Anwendung,
- // die nichts anderes tut,
- // als sich minimieren zu lassen
- // (dann kann man sie beliebig
- // auf dem desktop positionieren)
- // und bei einem Doppelklick
- // das gerade kompilierte
- // Programm zu starten.
- // Update: 1.00 17-Jun-1992 tw
- // Notes: Launcher startet das Proramm
- // das ihm in der Kommandozeile
- // ->Programm ->Eigenschaften
- // mitgegeben wurde.
- // ************************************* **
-
- #include <afxwin.h>
- #include "launch.h"
-
- // ************[ Die Anwendung ]******** **
-
- // ************************************* **
- // theApp
- // Die Instanzierung eines solchen Objektes
- // startet die gesamte Anwendung.
- // ************************************* **
-
- CTheApp theApp;
-
- // ************************************* **
- // Name: CTheApp::InitInstance
- // Funktion:Beim Erzeugen eines CWinApp
- // Objekts, wird diese Funktion
- // automatisch aufgerufen. Hier
- // können z.B. alle Datenmember
- // der Anwendung gesetzt werden.
- // Weiterhin wird das Hauptwindow
- // der Anwendung erzeugt.
- // Update: 1.00 17-Jun-1992 tw
- // Notes:
- // ************************************* **
-
- BOOL CTheApp::InitInstance()
- {
- // Vermeiden, das mehrere Instanzen von
- // Launcher gestartet werden können
- if ( m_hPrevInstance )
- {
- MessageBox(
- NULL,
- (LPCSTR)"Nur eine Instanz von Launcher erlaubt",
- NULL,
- MB_OK
- );
- return FALSE;
- }
-
- // Das zu startende Programm wird in
- // der Kommandozeile übergeben. Nur
- // dann, wenn eines angegben
- // ist, machen wir weiter.
-
- char szPath[256];
- wsprintf(
- (LPSTR)szPath,
- (LPSTR)"%s",
- m_lpCmdLine
- );
-
- if ( ! szPath[0] )
- {
- MessageBox(
- NULL,
- (LPCSTR)"Kein Programm in der Kommandozeile angegeben",
- NULL,
- MB_OK
- );
- return FALSE;
- }
-
- // Erzeugen und Anzeigen des MainWindows
- // m_pMainWnd ist ein Member von CWinApp
- // und vom typ CWnd *. Deshalb kann man
- // seine Memberfunktionen zum Anzeigen
- // etc. verwenden.
-
- m_pMainWnd = new CMainWindow();
- m_pMainWnd->ShowWindow(
- SW_SHOWMINIMIZED
- );
- m_pMainWnd->UpdateWindow();
-
- ((CMainWindow*)m_pMainWnd)->SetPath(
- szPath
- );
-
- // Die CString Klasse hat schon
- // sehr viele eingebaute Funktionen.
- // Unter anderem kann man
- // einen char * einfach dazuaddieren
- // um den verketteten String zu erhalten.
- CString szCaption("Launcher: ");
- szCaption += szPath;
-
- m_pMainWnd->SetWindowText( szCaption );
-
- // Falls initialisierung geklappt hat,
- // wird TRUE zurückgeliefert
- // d.h. IMMER, wenn man bis hier
- // gekommen ist
- return TRUE;
-
- } // CTheApp::InitInstance ends
-
- // *********[ Das Main-Window ]********* **
-
- // ************************************* **
- // CMainWindow Konstruktor
- // Erzeugt das Haupt-Window.
- // Der windowstyle CS_DBLCLKS ist
- // notwendig, damit das Window die
- // Doppelklick messages bekommt.
- // ************************************* **
-
- CMainWindow::CMainWindow()
- {
- Create(
- NULL, // ClassName
- NULL, // Caption
- WS_OVERLAPPEDWINDOW|
- CS_DBLCLKS, // Style
- rectDefault, // Defaultrect
- NULL // Menuname
- );
-
- } // CMainWindow::CMainWindow ends
-
- // ************************************* **
- // CMainWindow::OnQueryOpen
- // Diese Memberfunktion wird aufgerufen,
- // bevor das Window geöffnet werden soll.
- // Daß sich das Window öffnet ist natürlich
- // unerwünscht - wir wollen ja bloß ein Icon
- // haben. Aus diesem Grund wird FALSE
- // zurückgeleifert um zu verhindern, daß
- // sich das Fenster öffnet.
- // ************************************* **
-
- BOOL CMainWindow::OnQueryOpen()
- {
- return FALSE;
-
- } // CMainWindow::OnQueryOpen ends
-
- // ************************************* **
- // CMainWindow::OnNcLButtonDblClk
- // Diese Funktion wird aufgerufen, wenn
- // die Window message "Non Client Area
- // Left mouse button double click" auftritt
- // Hier ist dies dann der Fall, wenn
- // auf den Icontext doppelklickt wird.
- // Geschieht dies, so wird der in data-
- // member m_szPath abgelegte Befehl aus-
- // geführt. Mißlingt die Ausführung, so
- // wird eine Messagebox angezeigt, die
- // den gelieferten Fehlercode mitteilt.
- // ************************************* **
-
- void CMainWindow::OnNcLButtonDblClk(
- UINT nFlags,
- CPoint point)
- {
- // Ausführen des Befehls und
- // Return-Wert merken
- // Der const char *() Operator, der
- // für CStrings definert ist, sorgt
- // dafür, das man hier einfach den
- // Ausdruck so hinschrieben kann, als
- // wäre es ein cast.
- // (Der operator liefert einen
- // const char * auf den Datenbereich
- // desCStrings.
- UINT nRet = WinExec(
- (const char *)m_szPath,
- SW_SHOWNORMAL
- );
-
- // Falls ein Fehler aufgetreten ist -
- // das ist dann der Fall, wenn WinExec
- // einen Wert kleiner 32 zurück-
- // liefert - wird der gelieferte Code
- // angezeigt.
- if ( nRet < 32 )
- {
- char szMsg[35];
- wsprintf (
- (LPSTR)szMsg,
- (LPSTR)"WinExec versagte - Fehlercode: %d\n",
- nRet
- );
- MessageBox( szMsg );
- }
-
- } // CMainWindow::OnNcLButtonDblClk ends
-
- // ************************************* **
- // CMainWindow message map
- // Hier stehen alle Memberfunktionen die
- // überschrieben werden sollen.
- // Der Message-Map Mechanismus entspricht
- // in etwa der Verwendungn von virtuellen
- // Funktionen, nur das dabei der Overhead
- // dieser Funktionen (vtable etc.) entfällt
- // ************************************* **
- BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd )
- ON_WM_QUERYOPEN()
- ON_WM_NCLBUTTONDBLCLK()
- END_MESSAGE_MAP()
-
- // Listing 1 ends
-