home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / dho.zip / DHO / SRC / WINDOW.CC < prev    next >
C/C++ Source or Header  |  1995-09-03  |  12KB  |  518 lines

  1. /****************************************/
  2. /*    Developer Helper Object Set       */
  3. /*  (C) 1994-95 Thomas E. Bednarz, Jr.  */
  4. /*     All rights reserved              */
  5. /***************************************/
  6.  
  7. /* $Id: window.cc 1.22 1995/09/03 01:38:41 teb Exp $ */
  8.  
  9.  
  10. #include"window.h"
  11. #include"applicat.h"
  12. #include<os2.h>
  13.  
  14.  
  15. BOOL TWindow::fInitialized = FALSE;
  16.  
  17.  
  18.  
  19. TWindow *temp_win_THIS;
  20.  
  21. MRESULT EXPENTRY DHOWndProc(HWND hWnd,ULONG iMessage, 
  22.                                       MPARAM mParam1, MPARAM mParam2);
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29. //-------------------------------------------------------------------
  30. //  paintWindow
  31. void TWindow::paintWindow(HPS ps, RECTL rcl)
  32. {
  33.  
  34. }
  35.  
  36.  
  37.  
  38. //-------------------------------------------------------------------
  39. //  getWindowProc
  40. PFNWP TWindow::getWindowProc()
  41. {
  42.    return (PFNWP)DHOWndProc;
  43. }
  44.  
  45. //-------------------------------------------------------------------
  46. //  TWindow
  47. TWindow::TWindow(ULONG id, TWinBase *parent):
  48.    TWinBase(id)
  49. {
  50.    temp_win_THIS = this;
  51.    fParent = parent;
  52.    fId = id;
  53.    oldWndProc = (PFNWP)NULL;
  54. }
  55.  
  56.  
  57. //-------------------------------------------------------------------
  58. //  ~TWindow
  59. TWindow::~TWindow()
  60. {
  61.  
  62. }
  63.  
  64.  
  65. //-------------------------------------------------------------------
  66. //  Init
  67. BOOL TWindow::init()
  68. {
  69.    HWND hwndOwner;
  70.  
  71.    if (!fParent)
  72.       hwndOwner = HWND_DESKTOP;
  73.    else
  74.       hwndOwner = fParent->getHWND();
  75.  
  76.    if (!fInitialized)
  77.       Register();
  78.  
  79.    hwnd = WinCreateWindow (hwndOwner,(PSZ)WC_DHOWINDOW, NULL,
  80.                0 ,0,0,0,0,hwndOwner,HWND_BOTTOM, fId ,NULL, NULL);
  81.  
  82.    return (hwnd!=(HWND)NULL);
  83. }
  84.  
  85.  
  86.  
  87. //-------------------------------------------------------------------
  88. //  WndProc
  89. MRESULT TWindow::WndProc(HWND hWnd, ULONG Message, MPARAM mParam1, MPARAM mParam2 )
  90. {
  91.    WinMsg msg;
  92.    msg.hwnd = hWnd;
  93.    msg.msg = Message;
  94.    msg.mp1 = mParam1;
  95.    msg.mp2 = mParam2;
  96.  
  97.    switch(Message)
  98.    {
  99.       case WM_ERASEBACKGROUND:
  100.          return (MRESULT)TRUE;
  101.  
  102.       case WM_COMMAND:
  103.             doCommand(msg);
  104.             return (MRESULT)FALSE;
  105.          break;
  106.       case WM_CONTROL:
  107.             doControl(msg);
  108.             return (MRESULT)FALSE;
  109.          break;
  110.       case WM_HELP:
  111.             doHelp(msg);
  112.             return (MRESULT) FALSE;
  113.             break;
  114.       case WM_DESTROY:
  115.             doDestroy(msg);
  116.             return (MRESULT)FALSE;
  117.          break;
  118.       case WM_CLOSE:
  119.             doClose(msg);
  120.             return (MRESULT)FALSE;
  121.          break;
  122.       case WM_ACTIVATE:
  123.             doActivate(msg);
  124.             return (MRESULT)FALSE;
  125.          break;
  126.       case WM_CHAR:
  127.             doChar(msg);
  128.             return (MRESULT)FALSE;
  129.           break;
  130.       case WM_BUTTON1UP:
  131.               doButton1Up(msg);
  132.               return (MRESULT)FALSE;
  133.            break;
  134.       case WM_BUTTON1DOWN:
  135.               doButton1Down(msg);
  136.               return (MRESULT)FALSE;
  137.            break;
  138.       case WM_BUTTON1DBLCLK:
  139.               doButton1DblClick(msg);
  140.               return (MRESULT)FALSE;
  141.            break;
  142.        case WM_BUTTON2UP:
  143.               doButton2Up(msg);
  144.               return (MRESULT)FALSE;
  145.            break;
  146.        case WM_BUTTON2DOWN:
  147.               doButton2Down(msg);
  148.               return (MRESULT)FALSE;
  149.            break;
  150.        case WM_BUTTON2DBLCLK:
  151.               doButton1DblClick(msg);
  152.               return (MRESULT)FALSE;
  153.            break;
  154.        case WM_BUTTON3UP:
  155.               doButton3Up(msg);
  156.               return (MRESULT)FALSE;
  157.            break;
  158.       case WM_BUTTON3DOWN:
  159.               doButton3Down(msg);
  160.               return (MRESULT)FALSE;
  161.            break;
  162.        case WM_BUTTON3DBLCLK:
  163.               doButton3DblClick(msg);
  164.               return (MRESULT)FALSE;
  165.            break;
  166.       case WM_PAINT:
  167.            doPaint(msg);
  168.            return (MRESULT)FALSE;
  169.          break;
  170.       case WM_ADJUSTWINDOWPOS:
  171.             doAdjustWindowPos(msg);
  172.             return (MRESULT)FALSE;
  173.          break;
  174.       case WM_TIMER:
  175.             doTimer(msg);
  176.             return (MRESULT)FALSE;
  177.       case WM_SIZE:
  178.             doSize(msg);
  179.             return (MRESULT)FALSE;
  180.       case WM_SETFOCUS:
  181.             doSetFocus(msg);
  182.             return (MRESULT)FALSE;
  183.  
  184.       default:
  185.          return WinDefWindowProc(hWnd, Message, mParam1, mParam2);
  186.    }
  187.    return (MRESULT)WinDefWindowProc(hWnd, Message, mParam1, mParam2);
  188. }
  189.  
  190.  
  191. //-------------------------------------------------------------------
  192. //  getClassName
  193. const char *TWindow::getClassName(void)
  194. {
  195.    return "TWindow";
  196. }
  197.  
  198.  
  199. //-------------------------------------------------------------------
  200. //  Register
  201. void TWindow::Register()
  202. {
  203.    BOOL reg;
  204.  
  205.    HAB anchor_block = getApplication()->getAnchorBlock();
  206.    if (!fInitialized)
  207.    {
  208.      reg = WinRegisterClass(anchor_block, (PSZ)WC_DHOWINDOW,
  209.                     (PFNWP)DHOWndProc, CS_SIZEREDRAW | CS_SYNCPAINT
  210.                     ,sizeof(TWindow));
  211.  
  212. #ifdef DEBUG
  213.      if (!reg)
  214.          WinMessageBox(HWND_DESKTOP,HWND_DESKTOP, 
  215.             (PSZ)"Window class not registered correctly!!",
  216.             (PSZ)"Warning",0, MB_MOVEABLE | MB_CANCEL ); 
  217. #endif     
  218.      fInitialized = reg;
  219.    }
  220.  
  221. }
  222.  
  223. //-------------------------------------------------------------------
  224. //  
  225. void TWindow::setTitle(char *title)
  226. {
  227.    WinSetWindowText(getHWND(), (PSZ)title);
  228. }
  229.  
  230. //-------------------------------------------------------------------
  231. //  doCommand
  232. void TWindow::doCommand(WinMsg wm)
  233. {
  234.    if (oldWndProc)
  235.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  236.    else
  237.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  238. }
  239.  
  240.  
  241.  
  242. //-------------------------------------------------------------------
  243. //  doControl
  244. void TWindow::doControl(WinMsg wm)
  245. {
  246.    if (oldWndProc)
  247.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  248.    else
  249.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  250. }
  251.  
  252. //-------------------------------------------------------------------
  253. //  doDestroy
  254. void TWindow::doDestroy(WinMsg wm)
  255. {
  256.    if (oldWndProc)
  257.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  258.    else
  259.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  260. }
  261.  
  262.  
  263. //-------------------------------------------------------------------
  264. //  doClose
  265. void TWindow::doClose(WinMsg wm)
  266. {
  267.    if (oldWndProc)
  268.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  269.    else
  270.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  271. }
  272.  
  273. //-------------------------------------------------------------------
  274. //  doPaint
  275. void TWindow::doPaint(WinMsg wm)
  276. {
  277.    RECTL rcl;
  278.    HPS ps;
  279.  
  280.    if (oldWndProc)
  281.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  282.    else
  283.    {
  284.       ps = WinBeginPaint(wm.hwnd, NULLHANDLE, &rcl);
  285.       paintWindow(ps, rcl);
  286.       WinEndPaint(ps);
  287.    }
  288. }
  289.  
  290.  
  291. //-------------------------------------------------------------------
  292. //  doSize
  293. void TWindow::doSize(WinMsg wm)
  294. {
  295.    if (oldWndProc)
  296.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  297.    else
  298.    {
  299.       height = SHORT1FROMMP(wm.mp2);
  300.       width  = SHORT2FROMMP(wm.mp2);
  301.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  302.    }
  303. }
  304.  
  305.  
  306.  
  307.  
  308. //-------------------------------------------------------------------
  309. //  doRealizePallette
  310. void TWindow::doRealizePallette(WinMsg wm)
  311. {
  312.    if (oldWndProc)
  313.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  314.    else
  315.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  316. }
  317.  
  318.  
  319.  
  320.  
  321. //-------------------------------------------------------------------
  322. //  doHelp
  323. void TWindow::doHelp(WinMsg wm)
  324. {
  325.    if (oldWndProc)
  326.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  327.    else
  328.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  329. }
  330.  
  331.  
  332. //-------------------------------------------------------------------
  333. //  doActivate
  334. void TWindow::doActivate(WinMsg wm)
  335. {
  336.    if (oldWndProc)
  337.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  338.    else
  339.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  340. }
  341.  
  342.  
  343. //-------------------------------------------------------------------
  344. //  doChar
  345. void TWindow::doChar(WinMsg wm)
  346. {
  347.    if (oldWndProc)
  348.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  349.    else
  350.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  351. }
  352.  
  353. //-------------------------------------------------------------------
  354. //  do
  355. void TWindow::doButton1Up(WinMsg wm)
  356. {
  357.    if (oldWndProc)
  358.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  359.    else
  360.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  361. }
  362.  
  363. //-------------------------------------------------------------------
  364. //  do
  365. void TWindow::doButton1Down(WinMsg wm)
  366. {
  367.    if (oldWndProc)
  368.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  369.    else
  370.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  371. }
  372.  
  373.  
  374. //-------------------------------------------------------------------
  375. //  do
  376. void TWindow::doButton1DblClick(WinMsg wm)
  377. {
  378.    if (oldWndProc)
  379.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  380.    else
  381.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  382. }
  383.  
  384. //-------------------------------------------------------------------
  385. //  do
  386. void TWindow::doButton2Up(WinMsg wm)
  387. {
  388.    if (oldWndProc)
  389.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  390.    else
  391.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  392. }
  393.  
  394.  
  395. //-------------------------------------------------------------------
  396. //  do
  397. void TWindow::doButton2Down(WinMsg wm)
  398. {
  399.    if (oldWndProc)
  400.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  401.    else
  402.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  403. }
  404.  
  405.  
  406. //-------------------------------------------------------------------
  407. //  do
  408. void TWindow::doButton2DblClick(WinMsg wm)
  409. {
  410.    if (oldWndProc)
  411.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  412.    else
  413.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  414. }
  415.  
  416.  
  417. //-------------------------------------------------------------------
  418. //  do
  419. void TWindow::doButton3Up(WinMsg wm)
  420. {
  421.    if (oldWndProc)
  422.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  423.    else
  424.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  425. }
  426.  
  427.  
  428. //-------------------------------------------------------------------
  429. //  do
  430. void TWindow::doButton3Down(WinMsg wm)
  431. {
  432.    if (oldWndProc)
  433.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  434.    else
  435.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  436. }
  437.  
  438.  
  439. //-------------------------------------------------------------------
  440. //  do
  441. void TWindow::doButton3DblClick(WinMsg wm)
  442. {
  443.    if (oldWndProc)
  444.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  445.    else
  446.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  447. }
  448.  
  449.  
  450.  
  451. //-------------------------------------------------------------------
  452. //  do
  453. void TWindow::doAdjustWindowPos(WinMsg wm)
  454. {
  455.    if (oldWndProc)
  456.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  457.    else
  458.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  459. }
  460.  
  461.  
  462.  
  463. //-------------------------------------------------------------------
  464. //  doTimer
  465. void TWindow::doTimer(WinMsg wm)
  466. {
  467.    if (oldWndProc)
  468.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  469.    else
  470.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  471. }
  472.  
  473.  
  474.  
  475.  
  476. //-------------------------------------------------------------------
  477. //  doTimer
  478. void TWindow::doSetFocus(WinMsg wm)
  479. {
  480.    if (oldWndProc)
  481.       (*oldWndProc)(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  482.    else
  483.       WinDefWindowProc(wm.hwnd, wm.msg, wm.mp1, wm.mp2);
  484. }
  485.  
  486.  
  487.  
  488. //-------------------------------------------------------------------
  489. //  DHOWndProc
  490. MRESULT EXPENTRY DHOWndProc(HWND hWnd,ULONG iMessage,
  491.     MPARAM mParam1, MPARAM mParam2)
  492. {
  493.  
  494.     TWindow *pWindow = (TWindow *)WinQueryWindowULong(hWnd,0);
  495.  
  496.     if (pWindow == 0) 
  497.     {
  498.         if (iMessage == WM_CREATE) 
  499.         {
  500.            pWindow = temp_win_THIS;
  501.             WinSetWindowULong(hWnd,0,(ULONG)pWindow);
  502.             return pWindow->WndProc(hWnd,iMessage,mParam1,mParam2);
  503.         } 
  504.         else
  505.             return WinDefWindowProc(hWnd,iMessage,mParam1,mParam2);
  506.     } 
  507.     else
  508.         return pWindow->WndProc(hWnd,iMessage,mParam1,mParam2);
  509. }
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.