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