text: #define TestWF(hwnd, f) (GetWindowLong(hwnd, GWL_STYLE) & (f))
  #define TestWX(hwnd, f) (GetWindowLong(hwnd, GWL_EX_STYLE) & (f))
  
  BOOL DVAIsClipped(HDC hdc, RECT& rc)
  {
      RECT rcClip;
  
      if (GetClipBox(hdc, &rcClip) != SIMPLEREGION)
          return TRUE;
  
      if (rc.left   < rcClip.left  ||
          rc.top    < rcClip.top   ||
          rc.right  > rcClip.right ||
          rc.bottom > rcClip.bottom)
  
          return TRUE;
  
      return FALSE;
  }
  
  int DVAGetClipList(HWND hwnd, LPRECT prc, LPRECT RectList, int RectCount)
  {
      RECT rc;
      HWND hwndP;
      HWND hwndT;
  
      if (RectCount == 0 || !IsVisible(hwnd))
          return 0;
  
      //
      // get the client area of the window
      //
      GetClientRect(hwnd, RectList);
  
      if (prc)
          IntersectRect(RectList, RectList, prc);
  
      ClientToScreen(hwnd, (LPPOINT)RectList);
      ClientToScreen(hwnd, (LPPOINT)RectList + 1);
  
      RectCount = 1;
      RectList[1] = RectList[0];
  
      //
      // walk all children of hwnd and remove them if needed
      //
      if (TestWF(hwnd, WS_CLIPCHILDREN))
      {
          RectCount = ExcludeWindowRects(RectList, RectCount,
              GetWindow(hwnd, GW_CHILD), NULL);
  
          if (RectCount == 0)
              return 0;
      }
  
      //
      // walk all the siblings of hwnd and exclude them from the list.
      //
      for (; (hwndP = GetWindow(hwnd, GW_PARENT)) != NULL; hwnd = hwndP)
      {
          GetWindowRect(hwndP, &rc);
          RectCount = IntersectRectList(RectList, RectCount, &rc;
  
          if (RectCount == 0)
              return 0;
  
          if (TestWF(hwnd, WS_CLIPSIBLINGS))
          {
              RectCount = ExcludeWindowRects(RectList, RectCount,
                  GetWindow(hwndP, GW_CHILD), hwnd);
  
              if (RectCount == 0)
                  return 0;
          }
      }
  
      return RectCount;
  }
  
  int ExcludeWindowRects(LPRECT RectList, int RectCount, HWND hwndA, HWND hwndB)
  {
      RECT rc;
  
      for (hwnd = hwndA; hwnd != NULL && hwnd != hwndB; hwnd = GetWindow(hwnd, GW_HWNDNEXT))
      {
          if (!IsWindowVisible(hwnd))
  	    continue;
  
          //
  	// Don't subtract off transparent windows...
  	//
          if (TestWX(hwnd, WS_EX_TRANSPARENT))
              continue;
  
          GetWindowRect(hwnd, &rc);
  
          RectCount = ExcludeRectList(RectList, RectCount, &rc);
  
          if (RectCount == 0)
              return 0;
      }
  
      return RectCount;
  }
  
  
  int ExcludeRectList(LPRECT RectList, int RectCount, LPRECT prc)
  {
      int i;
      int n;
      RECT rc;
  
      if (RectCount == 0)
          return 0;
  
      SubtractRect(RectList, prc);
  
      for (i=1; i <= RectCount; i++)
      {
          if (!IntersectRect(&rc, &RectList[i], prc))
              continue;
  
          //
          //
          //
  
      }
  }
  