home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / dho.zip / DHO / SRC / SOURCE.ZIP / framewin.cc < prev    next >
C/C++ Source or Header  |  1995-08-27  |  6KB  |  259 lines

  1. /****************************************/
  2. /*    Developer Helper Object Set       */
  3. /*  (C) 1994-95 Thomas E. Bednarz, Jr.  */
  4. /*     All rights reserved              */
  5. /***************************************/
  6.  
  7. /* $Id: framewin.cc 1.15 1995/08/27 08:21:15 teb Exp $ */
  8.  
  9. #include"framewin.h"
  10. #include"applicat.h"
  11. #include"pmutils.h"
  12. #define INCL_WIN
  13. #include<os2.h>
  14.  
  15.  
  16.  
  17.  
  18. TFrameWindowAttr defFrame = {   TRUE,TRUE, FALSE,FALSE,TRUE, TRUE,
  19.                             TRUE, TRUE,FALSE, FALSE, FALSE, TRUE, 0,0,0,0};
  20.  
  21. //-------------------------------------------------------------------
  22. //   TFrameWindow
  23. TFrameWindow::TFrameWindow(ULONG id, char *title):
  24.    TWindow(id, NULL)
  25. {
  26.    fFrAttr = defFrame;
  27.    fCreateFlags = 0;
  28.    fShellPos = FALSE;
  29.    getDefWindowPlacement(fX, fY, fcX, fcY);   
  30.  
  31.    fTitle = title;
  32. }
  33.  
  34.  
  35. //-------------------------------------------------------------------
  36. //   ~TFrameWindow
  37. TFrameWindow::~TFrameWindow()
  38. {
  39.  
  40. }
  41.  
  42.  
  43. //-------------------------------------------------------------------
  44. //   Init
  45. BOOL TFrameWindow::init()
  46. {
  47.    if (fFrAttr.titlebar)
  48.       fCreateFlags |= FCF_TITLEBAR;
  49.    if (fFrAttr.sysmenu)
  50.       fCreateFlags |= FCF_SYSMENU;
  51.    if (fFrAttr.menu)
  52.       fCreateFlags |= FCF_MENU;
  53.    if (fFrAttr.icon)
  54.       fCreateFlags |= FCF_ICON;
  55.    if (fFrAttr.minbutton)
  56.       fCreateFlags |= FCF_MINBUTTON;
  57.    if (fFrAttr.maxbutton)
  58.       fCreateFlags |= FCF_MAXBUTTON;
  59.    if (fFrAttr.sizeborder)
  60.       fCreateFlags |= FCF_SIZEBORDER;
  61.    if (fFrAttr.tasklist)
  62.       fCreateFlags |= FCF_TASKLIST;
  63.    if (fFrAttr.vscroll)
  64.       fCreateFlags |= FCF_VERTSCROLL;
  65.    if (fFrAttr.hscroll)
  66.       fCreateFlags |= FCF_HORZSCROLL;
  67.    if (fFrAttr.acceltable)
  68.       fCreateFlags |= FCF_ACCELTABLE;
  69.    if (fFrAttr.shellPos)
  70.    {
  71.       fCreateFlags |= FCF_SHELLPOSITION;
  72.       fShellPos = TRUE;
  73.    }
  74.  
  75.    fcdata.cb = sizeof(FRAMECDATA);
  76.    fcdata.flCreateFlags = fCreateFlags;
  77.    fcdata.hmodResources = (HMODULE)NULL;
  78.    fcdata.idResources = fId;
  79.  
  80.    hwnd = WinCreateWindow(
  81.                 HWND_DESKTOP,
  82.                 WC_FRAME,
  83.                 (PSZ)fTitle,
  84.                 0,0,0,0,0,
  85.                 NULL, HWND_TOP,
  86.                 fId,
  87.                 &fcdata,
  88.                 NULL);
  89.  
  90.    if (hwnd != (HWND)NULL)
  91.    {
  92.       WinSetWindowULong(hwnd,0,(ULONG)this);
  93.  
  94.       fOldWindProc = WinSubclassWindow(hwnd, (PFNWP)getWindowProc());
  95.       if (fOldWindProc==NULL)
  96.       {
  97.          WinDestroyWindow(hwnd);    
  98.          return FALSE;
  99.       }
  100.       if (! fShellPos)
  101.       {
  102.          setWindowPosition(fFrAttr.x, fFrAttr.y);
  103.          setWindowSize(fFrAttr.width, fFrAttr.height);
  104.       }
  105.       return TRUE;
  106.    }
  107.    return FALSE;
  108. }
  109.  
  110.  
  111. //-------------------------------------------------------------------
  112. //   getClassName
  113. const char *TFrameWindow::getClassName()
  114. {
  115.    return "TFrameWindow";
  116. }
  117.  
  118.  
  119. //-------------------------------------------------------------------
  120. //   setIcon
  121. void TFrameWindow::setIcon(HPOINTER icon)
  122. {
  123.    WinSendMsg(getHWND(), WM_SETICON, (MPARAM)icon, NULL);
  124.  
  125. }
  126.  
  127. //-------------------------------------------------------------------
  128. //   setFrameTitle
  129. void TFrameWindow::setTitle(char *title)
  130. {
  131.    WinSetWindowText(hwnd, (PSZ)title);
  132.  
  133. }
  134.  
  135.  
  136.  
  137. //-------------------------------------------------------------------
  138. //   maximize
  139. void TFrameWindow::maximize()
  140. {
  141.    SWP swpCurr;
  142.    WinQueryWindowPos(getHWND(), &swpCurr);
  143.    WinSetWindowPos(getHWND(), (HWND)NULL, swpCurr.x, swpCurr.y,
  144.                         swpCurr.cx, swpCurr.cy, SWP_MAXIMIZE | 
  145.                         SWP_SIZE | SWP_MOVE);
  146. }
  147.  
  148.  
  149. //-------------------------------------------------------------------
  150. //   minimize
  151. void TFrameWindow::minimize()
  152. {
  153.    SWP swpCurr;
  154.    WinQueryWindowPos(getHWND(), &swpCurr);
  155.    WinSetWindowPos(getHWND(), (HWND)NULL, swpCurr.x, swpCurr.y,
  156.                         swpCurr.cx, swpCurr.cy, SWP_MINIMIZE | 
  157.                         SWP_SIZE | SWP_MOVE );
  158. }
  159.  
  160.  
  161.  
  162. //-------------------------------------------------------------------
  163. //  doCommand
  164. void TFrameWindow::doCommand(WinMsg wm)
  165. {
  166.    WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  167. }
  168.  
  169.  
  170. //-------------------------------------------------------------------
  171. //  doCommand
  172. void TFrameWindow::doControl(WinMsg wm)
  173. {
  174.    WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  175. }
  176.  
  177.  
  178. void TFrameWindow::doInitMenu(WinMsg wm)
  179. {
  180.    WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  181. }
  182.  
  183. //-------------------------------------------------------------------
  184. //  getHWNDframe
  185. HWND TFrameWindow::getHWND()
  186. {
  187.    return hwnd;
  188. }
  189.  
  190.  
  191. //-------------------------------------------------------------------
  192. //  WndProc
  193. MRESULT TFrameWindow::WndProc(HWND hWnd, ULONG Message, MPARAM mParam1, MPARAM mParam2 )
  194. {
  195.    HPS ps;
  196.    RECTL rcl;
  197.    WinMsg msg;
  198.    msg.hwnd = hWnd;
  199.    msg.msg = Message;
  200.    msg.mp1 = mParam1;
  201.    msg.mp2 = mParam2;
  202.  
  203.    if (Message == WM_COMMAND)
  204.    {
  205.       doCommand(msg);
  206.       return (MRESULT)FALSE;
  207.    }
  208.    else if (Message == WM_CONTROL)
  209.    {
  210.       doControl(msg);
  211.       return (MRESULT)FALSE;
  212.    }
  213.    else if (Message == WM_INITMENU)
  214.    {
  215.       doInitMenu(msg);
  216.       return (MRESULT)FALSE;
  217.    }
  218.    else
  219.      return (MRESULT)(*fOldWindProc)(hWnd, Message, mParam1, mParam2);
  220.  
  221.    return (MRESULT)(*fOldWindProc)(hWnd, Message, mParam1, mParam2);
  222. }
  223.  
  224.  
  225. //----------------------------------------------------------
  226. //  getClientArea
  227. BOOL TFrameWindow::getClientArea(PRECTL prectl)
  228. {
  229.    RECTL frameRct, tbRct;
  230.  
  231.    if (WinQueryWindowRect(WinWindowFromID(hwnd, FID_TITLEBAR), &tbRct))
  232.       if (WinQueryWindowRect(hwnd, &frameRct))
  233.   {
  234.  
  235.       prectl->xLeft = frameRct.xLeft;
  236.       prectl->yBottom = frameRct.yBottom;
  237.       prectl->xRight = frameRct.xRight;
  238.       prectl->yTop = frameRct.yTop - tbRct.yTop-2;
  239.       return TRUE;
  240.    }
  241.    return FALSE;
  242. }
  243.  
  244. //----------------------------------------------------------
  245. //  enableMenuItem
  246. void TFrameWindow::enableMenuItem(ULONG menuItemId)
  247. {
  248.    WinEnableMenuItem(WinWindowFromID(this->getHWND(),FID_MENU),
  249.                          menuItemId, TRUE);
  250. }
  251.  
  252. //----------------------------------------------------------
  253. //  disableMenuItem
  254. void TFrameWindow::disableMenuItem(ULONG menuItemId)
  255. {
  256.    WinEnableMenuItem(WinWindowFromID(this->getHWND(),FID_MENU),
  257.                          menuItemId, FALSE);
  258. }
  259.