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