home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9303 / ms_c_7 / launch / launch.cpp next >
Encoding:
C/C++ Source or Header  |  1992-12-14  |  6.9 KB  |  240 lines

  1. // ************************************* **
  2. // Name:    launch.cpp
  3. // Funktion:Definiert das Klassenverhalten 
  4. //          der Applikation.
  5. // Problem: C/C++ 7.0 PWB -  Starten eines
  6. //          Windows Programmes
  7. //          Es stellt sich heraus, das die
  8. //          Verwendung von WXSERVER wegen
  9. //          der Hin- und Herschalterei 
  10. //          sehr nervig ist.
  11. //          Also wird die PWB in einem 
  12. //          Window ausgeführt und das zu
  13. //          erzeugende Programm per
  14. //          Doppelklick aus einer Programm-
  15. //          gruppe gestartet. Dann hat man
  16. //          aber das Problem, daß das PWB 
  17. //          Window das Icon der Anwendung
  18. //          ständig verdeckt - deshalb muß
  19. //          man häufiger klicken als
  20. //          eigentlich notwendig.
  21. // Lösung:  Erstellen einer Anwendung,
  22. //          die nichts anderes tut,
  23. //          als sich minimieren zu lassen 
  24. //          (dann kann man sie beliebig
  25. //          auf dem desktop positionieren)
  26. //          und bei einem Doppelklick
  27. //          das gerade kompilierte
  28. //          Programm zu starten.
  29. // Update:  1.00 17-Jun-1992 tw
  30. // Notes:   Launcher startet das Proramm
  31. //          das ihm in der Kommandozeile
  32. //          ->Programm ->Eigenschaften
  33. //          mitgegeben wurde.
  34. // ************************************* **
  35.  
  36. #include <afxwin.h>
  37. #include "launch.h"
  38.  
  39. // ************[ Die Anwendung ]******** **
  40.  
  41. // ************************************* **
  42. // theApp
  43. // Die Instanzierung eines solchen Objektes
  44. // startet die gesamte Anwendung.
  45. // ************************************* **
  46.  
  47. CTheApp theApp;
  48.  
  49. // ************************************* **
  50. // Name:    CTheApp::InitInstance
  51. // Funktion:Beim Erzeugen eines CWinApp
  52. //          Objekts, wird diese Funktion 
  53. //          automatisch aufgerufen. Hier
  54. //          können z.B. alle Datenmember
  55. //          der Anwendung gesetzt werden.
  56. //          Weiterhin wird das Hauptwindow
  57. //          der Anwendung erzeugt.
  58. // Update:  1.00 17-Jun-1992 tw
  59. // Notes:
  60. // ************************************* **
  61.  
  62. BOOL CTheApp::InitInstance()
  63. {
  64.    // Vermeiden, das mehrere Instanzen von 
  65.    // Launcher gestartet werden können
  66.    if ( m_hPrevInstance )
  67.    {
  68.       MessageBox(
  69.          NULL,
  70.          (LPCSTR)"Nur eine Instanz von Launcher erlaubt",
  71.          NULL,
  72.          MB_OK
  73.          );
  74.       return FALSE;
  75.    }
  76.  
  77.    // Das zu startende Programm wird in 
  78.    // der Kommandozeile übergeben. Nur
  79.    // dann, wenn eines angegben
  80.    // ist, machen wir weiter.
  81.  
  82.    char szPath[256];
  83.    wsprintf(
  84.       (LPSTR)szPath,
  85.       (LPSTR)"%s",
  86.       m_lpCmdLine
  87.       );
  88.  
  89.    if ( ! szPath[0] )
  90.    {
  91.       MessageBox(
  92.          NULL,
  93.          (LPCSTR)"Kein Programm in der Kommandozeile angegeben",
  94.          NULL,
  95.          MB_OK
  96.          );
  97.       return FALSE;
  98.    }
  99.  
  100.    // Erzeugen und Anzeigen des MainWindows
  101.    // m_pMainWnd ist ein Member von CWinApp
  102.    // und vom typ CWnd *. Deshalb kann man
  103.    // seine Memberfunktionen zum Anzeigen
  104.    // etc. verwenden.
  105.  
  106.    m_pMainWnd = new CMainWindow();
  107.    m_pMainWnd->ShowWindow(
  108.                   SW_SHOWMINIMIZED
  109.                   );
  110.    m_pMainWnd->UpdateWindow();
  111.  
  112.    ((CMainWindow*)m_pMainWnd)->SetPath(
  113.                                   szPath
  114.                                   );
  115.  
  116.    // Die CString Klasse hat schon
  117.    // sehr viele eingebaute Funktionen.
  118.    // Unter anderem kann man
  119.    // einen char * einfach dazuaddieren
  120.    // um den verketteten String zu erhalten.
  121.    CString szCaption("Launcher: ");
  122.    szCaption += szPath;
  123.  
  124.    m_pMainWnd->SetWindowText( szCaption );
  125.  
  126.    // Falls initialisierung geklappt hat, 
  127.    // wird TRUE zurückgeliefert
  128.    // d.h. IMMER, wenn man bis hier
  129.    // gekommen ist
  130.    return TRUE;
  131.  
  132. }  // CTheApp::InitInstance ends
  133.  
  134. // *********[ Das Main-Window ]********* **
  135.  
  136. // ************************************* **
  137. // CMainWindow Konstruktor
  138. // Erzeugt das Haupt-Window. 
  139. // Der windowstyle CS_DBLCLKS ist
  140. // notwendig, damit das Window die 
  141. // Doppelklick messages bekommt.
  142. // ************************************* **
  143.  
  144. CMainWindow::CMainWindow()
  145. {
  146.    Create(
  147.       NULL,                    // ClassName
  148.       NULL,                      // Caption
  149.       WS_OVERLAPPEDWINDOW|
  150.       CS_DBLCLKS,                  // Style
  151.       rectDefault,           // Defaultrect
  152.       NULL                      // Menuname
  153.       );
  154.  
  155. }  // CMainWindow::CMainWindow ends
  156.  
  157. // ************************************* **
  158. // CMainWindow::OnQueryOpen
  159. // Diese Memberfunktion wird aufgerufen, 
  160. // bevor das Window geöffnet werden soll.
  161. // Daß sich das Window öffnet ist natürlich
  162. // unerwünscht - wir wollen ja bloß ein Icon
  163. // haben. Aus diesem Grund wird FALSE
  164. // zurückgeleifert um zu verhindern, daß
  165. // sich das Fenster öffnet.
  166. // ************************************* **
  167.  
  168. BOOL CMainWindow::OnQueryOpen()
  169. {
  170.    return FALSE;
  171.  
  172. } // CMainWindow::OnQueryOpen ends
  173.  
  174. // ************************************* **
  175. // CMainWindow::OnNcLButtonDblClk
  176. // Diese Funktion wird aufgerufen, wenn
  177. // die Window message "Non Client Area
  178. // Left mouse button double click" auftritt
  179. // Hier ist dies dann der Fall, wenn
  180. // auf den Icontext doppelklickt wird.
  181. // Geschieht dies, so wird der in data-
  182. // member m_szPath abgelegte Befehl aus-
  183. // geführt. Mißlingt die Ausführung, so
  184. // wird eine Messagebox angezeigt, die
  185. // den gelieferten Fehlercode mitteilt.
  186. // ************************************* **
  187.  
  188. void CMainWindow::OnNcLButtonDblClk(
  189.                      UINT nFlags,
  190.                      CPoint point)
  191. {
  192.    // Ausführen des Befehls und
  193.    // Return-Wert merken
  194.    // Der const char *() Operator, der
  195.    // für CStrings definert ist, sorgt
  196.    // dafür, das man hier einfach den
  197.    // Ausdruck so hinschrieben kann, als
  198.    // wäre es ein cast.
  199.    // (Der operator liefert einen
  200.    // const char * auf den Datenbereich
  201.    // desCStrings.
  202.    UINT nRet = WinExec( 
  203.                   (const char *)m_szPath,
  204.                   SW_SHOWNORMAL
  205.                   );
  206.  
  207.    // Falls ein Fehler aufgetreten ist -
  208.    // das ist dann der Fall, wenn WinExec
  209.    // einen Wert kleiner 32 zurück-
  210.    // liefert - wird der gelieferte Code
  211.    // angezeigt.
  212.    if ( nRet < 32 )
  213.    {
  214.       char szMsg[35];
  215.       wsprintf ( 
  216.          (LPSTR)szMsg,
  217.          (LPSTR)"WinExec versagte - Fehlercode: %d\n",
  218.          nRet
  219.          );
  220.       MessageBox( szMsg );
  221.    }
  222.  
  223. }  // CMainWindow::OnNcLButtonDblClk ends
  224.  
  225. // ************************************* **
  226. // CMainWindow message map
  227. // Hier stehen alle Memberfunktionen die 
  228. // überschrieben werden sollen.
  229. // Der Message-Map Mechanismus entspricht
  230. // in etwa der Verwendungn von virtuellen
  231. // Funktionen, nur das dabei der Overhead
  232. // dieser Funktionen (vtable etc.) entfällt
  233. // ************************************* **
  234. BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd )
  235.    ON_WM_QUERYOPEN()
  236.    ON_WM_NCLBUTTONDBLCLK()
  237. END_MESSAGE_MAP()
  238.  
  239. // Listing 1 ends
  240.