home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / CFGED1B.ZIP / PMVIEWS.ZIP / WINDOW.CC < prev    next >
C/C++ Source or Header  |  1992-08-09  |  10KB  |  386 lines

  1. // this might look like 'C', but it's really  -*-c++-*-
  2. /* window.cc
  3.  *
  4.  * Methoden der Window-Klassen von PMviews 
  5.  *
  6.  * Die Window-Klassen ermoeglichen die Generierung
  7.  * von PM-Fesnterobjekten fuer eine
  8.  * eine PM Applikation
  9.  *
  10.  * Language        : C++
  11.  * Operating System: OS/2 V2.0 and higher
  12.  * Compiler        : GNU GCC V2.1 and higher
  13.  *
  14.  *
  15.  * $Id: window.cc,v 1.3 1992/08/09 22:18:40 gruen Exp $
  16.  * $Log: window.cc,v $
  17. // Revision 1.3  1992/08/09  22:18:40  gruen
  18. // corrected some bugs, changed the contsructors for the dialog windows, appended
  19. // some methods.
  20. //
  21. // Revision 1.2  1992/07/28  00:36:04  gruen
  22. // fixed a bug in StdWindow::Set...: appended flag SWP_SHOW to the
  23. // WinSetWindowPos-Call.
  24. //
  25. // Revision 1.1  1992/07/19  01:56:12  gruen
  26. // Initial revision
  27. //
  28.  *
  29.  * Copyright (c) 1992 Lutz Grueneberg
  30.  *
  31.  * This library is free software; you can redistribute it and/or modify
  32.  * it under the terms of the GNU Library General Public License as
  33.  * published by the Free Software Foundation; either version 2 of the
  34.  * License, or (at your option) any later version.  This library is
  35.  * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  36.  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  37.  * A PARTICULAR PURPOSE.  See the GNU Library General Public License for
  38.  * more details. You should have received a copy of the GNU Library
  39.  * General Public License along with this library; if not, write to the
  40.  * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  41.  */
  42.  
  43. #define INCL_WIN
  44. #include <os2.h>
  45.  
  46.  
  47. #include "session.h"
  48. #include "window.h"
  49.  
  50. /* globale Variablen */
  51. StdWindow *globalStdWindowPointer;
  52.  
  53. /* StdWindow::StdWindow()
  54.  *
  55.  * Konstruktor der Klasse StdWindow.
  56.  * Hier werden die notwendigen Daten gesichert.
  57.  * Der (notwendige) Eintrag der (PM-)Klasse beim System 
  58.  * sowie die Erzeugung des Fensters erfolgen beim 
  59.  * Create-Aufruf.
  60.  */
  61.  
  62. StdWindow::StdWindow( Session *ps,
  63.                       USHORT idRes)
  64.  
  65. {
  66.   pSession        = ps;
  67.   strcpy( szTitle, STDWINDOWCLASS);
  68.   flFlags         = FCF_STANDARD;
  69.   flStyle         = WS_VISIBLE | FS_STANDARD;
  70.   idRessources    = idRes;
  71. }
  72.  
  73.  
  74. /* StdWindow::create()
  75.  *
  76.  * Create-Methode der Klasse StdWindow.
  77.  * Hier wird die (PM-)Klasse beim System eingetragen
  78.  * und das Fenster mittels WinCreateStdWindow erzeugt.
  79.  */
  80.  
  81. VOID StdWindow::create()
  82. {
  83.   WinRegisterClass (pSession->queryAnchorBlock(),   // Anchor Block handle
  84.               (PSZ) STDWINDOWCLASS,            // Name of window class
  85.             (PFNWP) StdWindowClientWndProc,    // Window procedure for class   
  86.                     CS_SIZEREDRAW,       // Set redraw on window resize 
  87.                     sizeof(StdWindow*)); // Extra bytes to reserve       
  88.   globalStdWindowPointer = this;
  89.   hwndFrame = 
  90.   WinCreateStdWindow (HWND_DESKTOP,      // Create a parent window 
  91.               flStyle,           // Window Style
  92.                       &flFlags,          // Creation flags    
  93.                 (PSZ) STDWINDOWCLASS,    // window class name
  94.                 (PSZ) szTitle,           // Title bar text
  95.               0L,
  96.             (HMODULE) NULL,  // Resource is in application module
  97.               idRessources,
  98.                       &hwndClient);
  99. }  
  100.  
  101. /* StdWindow::destroy()
  102.  *
  103.  * Destroy-Methode der Klasse StdWindow.
  104.  * Diese Methode zertstört das StdWindow.
  105.  */
  106.  
  107. VOID StdWindow::destroy()
  108. {
  109.   WinDestroyWindow(hwndFrame);
  110. }
  111.  
  112. /* StdWindow::setStyle()
  113.  *
  114.  * setStyle-Methode der Klasse StdWindow.
  115.  * Diese Methode kann vor dem Aufruf der Create-Methode
  116.  * benutzt werden, um den Style des Frame-Windows beim
  117.  * Systemaufruf zu modifizieren. Der Defaultwert ist 
  118.  * WS_VISIBLE | FS_STANDARD.
  119.  * Der neue Style wird als Argument übergeben.
  120.  */
  121. VOID StdWindow::setStyle( ULONG flNewStyle)
  122. {
  123.   flStyle = flNewStyle;
  124. }
  125.  
  126.  
  127. /* StdWindow::setFlags()
  128.  *
  129.  * setFlags-Methode der Klasse StdWindow.
  130.  * Diese Methode kann vor dem Aufruf der Create-Methode
  131.  * benutzt werden, um die Creation-Flags des Frame-Windows beim
  132.  * Systemaufruf zu modifizieren. Der Defaultwert ist 
  133.  * FCF_STANDARD.
  134.  * Die neuen Flags werden als Argument übergeben.
  135.  */
  136. VOID StdWindow::setFlags( ULONG flNewFlags)
  137. {
  138.   flFlags = flNewFlags;
  139. }
  140.  
  141.  
  142. /* StdWindow::setTitle()
  143.  *
  144.  * setTitle-Methode der Klasse StdWindow.
  145.  * Diese Methode kann zum ändern der Titelzeile des Fensters
  146.  * benutzt werden. Ihre Benutzung ist auch zur
  147.  * zur Laufzeit des Fensters möglich (noch nicht implementiert).
  148.  * Der Defaultwert ist der PM-Klassenname. Der neue Name
  149.  * wird als Argument übergeben. Der Name wird im internen
  150.  * Buffer festgehalten.
  151.  */
  152. VOID StdWindow::setTitle( CHAR *szNewTitle)
  153. {
  154.   strcpy( szTitle, szNewTitle);
  155. }
  156.  
  157. /* StdWindowClientWndProc
  158.  * 
  159.  * Diese Funktion ordnet den Objekt-Instanzen deren
  160.  * message parser zu und fuehrt diesen aus.
  161.  */
  162. MRESULT StdWindowClientWndProc (HWND hwnd, USHORT msg,
  163.                 MPARAM  mp1, MPARAM  mp2)
  164.   StdWindow *pWindow = (StdWindow *)WinQueryWindowULong( hwnd, 0);
  165.   if( msg == WM_CREATE){
  166.     pWindow = globalStdWindowPointer;
  167.     WinSetWindowULong( hwnd, 0, (ULONG)globalStdWindowPointer);
  168.   }
  169.   return pWindow->msgParser(hwnd,msg,mp1,mp2); 
  170. }
  171.  
  172. /* StdWindow::msgParser
  173.  *
  174.  * Diese Funktion ist der Window-Handler fuer die StdWindow Class
  175.  * Sie verarbeitet alle eingehenden Messages und ruft die
  176.  * entsprechenden virtuellen Methoden der Klasse auf.
  177.  */
  178.  
  179. MRESULT StdWindow::msgParser(HWND hwnd, USHORT msg,
  180.                  MPARAM  mp1, MPARAM  mp2)
  181.   BOOL      fDoDefault = TRUE;
  182.   MRESULT   result;
  183.  
  184.   switch (msg){ 
  185.   case WM_CREATE:  
  186.     result = msgCreate(hwnd,msg,mp1,mp2,&fDoDefault); 
  187.     break;
  188.  
  189.   case WM_CLOSE:
  190.     result = msgClose(hwnd,msg,mp1,mp2,&fDoDefault); 
  191.     break;
  192.  
  193.   case WM_DESTROY: 
  194.     result = msgDestroy(hwnd,msg,mp1,mp2,&fDoDefault); 
  195.     break;
  196.  
  197.   case WM_COMMAND:
  198.     result = msgCommand(hwnd,msg,mp1,mp2,&fDoDefault); 
  199.     break;
  200.  
  201.   case WM_PAINT:   
  202.     result = msgPaint(hwnd,msg,mp1,mp2,&fDoDefault); 
  203.     break;
  204.  
  205.   case WM_CONTROL: 
  206.     result = msgControl(hwnd,msg,mp1,mp2,&fDoDefault); 
  207.     break;
  208.     
  209.   case WM_SIZE: 
  210.     result = msgSize(hwnd,msg,mp1,mp2,&fDoDefault); 
  211.     break;
  212.  
  213.   default: 
  214.     fDoDefault = TRUE;
  215.   }
  216.   result = fDoDefault ? WinDefWindowProc (hwnd, msg, mp1, mp2) : result;
  217.   return result;
  218. }
  219.  
  220. BOOL    StdWindow::queryClientSize( SIZEL *pSize)
  221. {
  222.   RECTL rcl;
  223.   BOOL  fReturn;
  224.   
  225.   fReturn = WinQueryWindowRect( hwndClient, &rcl);
  226.   pSize->cx = rcl.xRight;
  227.   pSize->cy = rcl.yTop;    
  228.   return fReturn;
  229. }
  230.  
  231. BOOL    StdWindow::queryClientPos( POINTL *pPos)
  232. {
  233.   SWP   swp;
  234.   BOOL  fReturn;
  235.   
  236.   fReturn = WinQueryWindowPos( hwndClient, &swp);
  237.   pPos->x = swp.x;
  238.   pPos->y = swp.y;    
  239.   return fReturn;
  240. }
  241.  
  242. BOOL    StdWindow::queryFrameSize( SIZEL *pSize)
  243. {
  244.   RECTL rcl;
  245.   BOOL  fReturn;
  246.   
  247.   fReturn = WinQueryWindowRect( hwndFrame, &rcl);
  248.   pSize->cx = rcl.xRight;
  249.   pSize->cy = rcl.yTop;    
  250.   return fReturn;
  251. }
  252.  
  253. BOOL    StdWindow::queryFramePos( POINTL *pPos)
  254. {
  255.   SWP   swp;
  256.   BOOL  fReturn;
  257.   
  258.   fReturn = WinQueryWindowPos( hwndFrame, &swp);
  259.   pPos->x = swp.x;
  260.   pPos->y = swp.y;    
  261.   return fReturn;
  262. }
  263.  
  264. BOOL    StdWindow::setClientSize( SIZEL *pSize)
  265. {
  266.   RECTL rcl = {0L,0L,0L,0L};
  267.  
  268.   rcl.xRight = pSize->cx;
  269.   rcl.yTop   = pSize->cy;
  270.   WinCalcFrameRect( hwndFrame, &rcl, FALSE);
  271.   return WinSetWindowPos( hwndFrame, HWND_TOP, 
  272.              0, 0, 
  273.              (SHORT)(rcl.xRight - rcl.xLeft), 
  274.              (SHORT)(rcl.yTop   - rcl.yBottom), 
  275.              SWP_SHOW|SWP_SIZE);
  276. }
  277.  
  278. BOOL    StdWindow::setClientPos( POINTL *ptl, SIZEL *pSize)
  279. {
  280.   RECTL rcl = {0L,0L,0L,0L};
  281.  
  282.   rcl.xRight = pSize->cx;
  283.   rcl.yTop   = pSize->cy;
  284.   WinCalcFrameRect( hwndFrame, &rcl, FALSE);
  285.   return WinSetWindowPos( hwndFrame, HWND_TOP, 
  286.              ptl->x, ptl->y, 
  287.              (SHORT)(rcl.xRight - rcl.xLeft), 
  288.              (SHORT)(rcl.yTop   - rcl.yBottom), 
  289.              SWP_SHOW|SWP_SIZE|SWP_MOVE);
  290. }
  291.  
  292. BOOL    StdWindow::setClientPos( POINTL *pPos)
  293. {
  294.   return WinSetWindowPos( hwndClient, HWND_TOP, 
  295.              pPos->x, pPos->y, 0, 0, 
  296.              SWP_SHOW|SWP_MOVE);
  297. }
  298.  
  299. BOOL    StdWindow::setFrameSize( SIZEL *pSize)
  300. {
  301.   return WinSetWindowPos( hwndFrame, HWND_TOP, 
  302.              0, 0, 
  303.              (SHORT)pSize->cx, 
  304.              (SHORT)pSize->cy, 
  305.              SWP_SHOW|SWP_SIZE);
  306. }
  307.  
  308. BOOL    StdWindow::setFramePos( POINTL *pPos)
  309. {
  310.   return WinSetWindowPos( hwndFrame, HWND_TOP, 
  311.              pPos->x, pPos->y, 0, 0, 
  312.              SWP_SHOW|SWP_MOVE);
  313. }
  314.  
  315. BOOL StdWindow::calcFrameRect( RECTL *prcl, BOOL fFrame)
  316. {
  317.   return WinCalcFrameRect( hwndFrame, prcl, fFrame);
  318. }
  319.  
  320. BOOL    StdWindow::show( BOOL fShow)
  321. {
  322.   return WinShowWindow( hwndFrame, fShow); 
  323. }
  324.  
  325. BOOL    StdWindow::enable( BOOL fEnable)
  326. {
  327.   return WinEnableWindow( hwndFrame, fEnable);
  328. }
  329.  
  330. /* PM-called methods */
  331.  
  332. MRESULT StdWindow::msgCreate(HWND hwnd, USHORT msg,
  333.                  MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  334. {
  335.   *fDoDefault = TRUE;
  336.   return 0;
  337. }
  338.  
  339. MRESULT StdWindow::msgClose(HWND hwnd, USHORT msg,
  340.                 MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  341. {
  342.   *fDoDefault = TRUE;
  343.   return 0;
  344. }
  345.  
  346. MRESULT StdWindow::msgDestroy(HWND hwnd, USHORT msg,
  347.                   MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  348. {
  349.   *fDoDefault = TRUE;
  350.   return 0;
  351. }
  352.  
  353. MRESULT StdWindow::msgPaint(HWND hwnd, USHORT msg,
  354.                 MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  355. {
  356.   *fDoDefault = TRUE;
  357.   return 0;
  358. }
  359.  
  360. MRESULT StdWindow::msgCommand(HWND hwnd, USHORT msg,
  361.                   MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  362. {
  363.   *fDoDefault = TRUE;
  364.   return 0;
  365. }
  366.  
  367. MRESULT StdWindow::msgControl(HWND hwnd, USHORT msg,
  368.                   MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  369. {
  370.   *fDoDefault = TRUE;
  371.   return 0;
  372. }
  373.  
  374. MRESULT StdWindow::msgSize(HWND hwnd, USHORT msg,
  375.                MPARAM  mp1, MPARAM  mp2, BOOL *fDoDefault)
  376. {
  377.   *fDoDefault = TRUE;
  378.   return 0;
  379. }
  380.  
  381.  
  382.  
  383. /* E O F */
  384.