home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1996 January / PCPRO_JAN96.ISO / code / os2 / listing3.txt < prev    next >
Encoding:
Text File  |  1995-11-01  |  2.5 KB  |  114 lines

  1. VOID SubclassTitleBar (
  2.                        HWND hwnd
  3.                       )
  4. {
  5.   HWND    hwndTB;
  6.   PTBDATA pTBData;
  7.  
  8.  
  9.   hwndTB = WinWindowFromID (hwnd, FID_TITLEBAR);
  10.   pTBData = (PTBDATA) calloc (1, sizeof (TBDATA));
  11.  
  12.   WinSetWindowULong (hwndTB, QWL_USER, (ULONG)pTBData);
  13.   pTBData->ulState = 1L;
  14.   pTBData->pfnwpOld = WinSubclassWindow (hwndTB, TitleBarWinProc);
  15. }
  16.  
  17.  
  18.  
  19. MRESULT EXPENTRY TitleBarWinProc (
  20.                                   HWND hwnd,
  21.                                   ULONG msg,
  22.                                   MPARAM mp1,
  23.                                   MPARAM mp2
  24.                                  )
  25. {
  26.   PTBDATA pTBData;
  27.   MRESULT mr = (MRESULT) FALSE;
  28.   ULONG   ulState;
  29.   ULONG   ulNewState;
  30.  
  31.  
  32.   pTBData = (PTBDATA) WinQueryWindowULong (hwnd, QWL_USER);
  33.  
  34.   switch (msg)
  35.   {
  36.     case TBM_QUERYHILITE :
  37.  
  38.       mr = (MRESULT) pTBData->ulState;
  39.       break;
  40.  
  41.     case TBM_SETHILITE :
  42.  
  43.       mr = (MRESULT) TRUE;
  44.       pTBData->ulState = (ULONG) SHORT1FROMMP (mp1);
  45.       PaintTitleBar (hwnd, pTBData->ulState);
  46.       break;
  47.  
  48.     case WM_PAINT :
  49.  
  50.       PaintTitleBar (hwnd, pTBData->ulState);
  51.       break;
  52.  
  53.     case WM_DESTROY :
  54.  
  55.       free (pTBData);
  56.       break;
  57.  
  58.     default :
  59.  
  60.       mr = (*pTBData->pfnwpOld) (hwnd, msg, mp1, mp2);
  61.       break;
  62.   }
  63.  
  64.   return (mr);
  65. }
  66.  
  67.  
  68. VOID PaintTitleBar (
  69.                     HWND hwnd,
  70.                     ULONG ulState
  71.                    )
  72. {
  73.   HPS     hps;
  74.   RECTL   rcl;
  75.   CHAR    szTitle[128];
  76.  
  77.  
  78.   if (! WinIsWindowVisible (hwnd))
  79.     return;
  80.  
  81.   hps = WinBeginPaint (hwnd, 0, 0);
  82.  
  83.   WinQueryWindowRect (hwnd, &rcl);
  84.   WinFillRect (hps,
  85.                &rcl,
  86.                (ulState ? SYSCLR_ACTIVETITLE : SYSCLR_INACTIVETITLE));
  87.  
  88.   WinDrawBorder (hps,
  89.                  &rcl,
  90.                  1L,
  91.                  1L,
  92.                  SYSCLR_BUTTONDARK,
  93.                  SYSCLR_BUTTONLIGHT,
  94.                  DB_DEPRESSED);
  95.  
  96.   WinQueryWindowText (hwnd, 127, szTitle);
  97.   rcl.xLeft += WinQuerySysValue (HWND_DESKTOP, SV_CXALIGN);
  98.   rcl.xRight -= WinQuerySysValue (HWND_DESKTOP, SV_CXALIGN);
  99.  
  100.   WinDrawText (hps,
  101.                -1,
  102.                szTitle,
  103.                &rcl,
  104.                (ulState ?
  105.                 SYSCLR_ACTIVETITLETEXT :
  106.                 SYSCLR_INACTIVETITLETEXT),
  107.                (ulState ?
  108.                 SYSCLR_ACTIVETITLETEXTBGND : 
  109.                 SYSCLR_INACTIVETITLETEXTBGND),
  110.                DT_LEFT | DT_VCENTER);
  111.  
  112.   WinEndPaint (hps);
  113. }
  114.