winsite.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:11k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. /****************************************************************************
  36.  *  $Id: winsite.h,v 1.1.1.1 2002/10/18 02:05:16 ping Exp $
  37.  */
  38. #ifndef _WINSITE_H_
  39. #define _WINSITE_H_
  40. #include "hxslist.h"
  41. #include "hxmap.h"
  42. #include "chxpckts.h"
  43. #include "hxwin.h"
  44. #include "hxsite2.h"
  45. #include "hxcomm.h"
  46. #include "hxengin.h"
  47. #include "winroot.h"
  48. #include "basesite.h"
  49. #include "winsurf.h"
  50. class  CHXWinSite;
  51. class  CHXWinFullScreenWindow;
  52. class  ColorFuncAccess;
  53. LRESULT HXEXPORT HXxWinHookSiteProc(HWND hWnd, UINT message, WPARAM uParam, LPARAM lParam);
  54. LRESULT HXEXPORT HXxWinHookChar(int nCode,WPARAM wParam,LPARAM lParam);
  55. LRESULT HXEXPORT HXxWinHookAllMessages(int nCode,WPARAM wParam,LPARAM lParam);
  56. /*
  57. *  reasons to schedule call backs.
  58. */
  59. #define REPAINT 0
  60. #define CLIP    1
  61. #define MOUSE   2
  62. struct CParentWindowThreadData
  63. {
  64.     HHOOK     m_hHook;
  65.     HHOOK     m_hHookAllMessage;
  66.     CHXSimpleList   m_ListOfTopLevelSites;
  67. };
  68. /****************************************************************************
  69. *  Class:
  70. *
  71. *       CHXWinSite
  72. *
  73. *  Purpose:
  74. *
  75. *       Implementation for IHXSite objects which are associated with
  76. *       platform specific window objects on Microsoft Windows and X-Windows.
  77. *
  78. */
  79. class CHXWinSite : public CHXBaseSite
  80. {
  81.         friend class    CWinRootSurface;
  82.         
  83. public:
  84.     CHXWinSite(IUnknown* pContext, IUnknown* pUnkOuter = NULL, INT32 lZorder = 0);
  85.         
  86.     static CHXMapPtrToPtr   zm_ParentWnds;
  87.     static CHXMapPtrToPtr   zm_ParentsThreadList;
  88.     static CHXMapPtrToPtr   zm_SubclassedWnds;
  89.     static CHXMapPtrToPtr   zm_ScrollBarWnds;
  90.     static CHXMapPtrToPtr   zm_ListOfHiddenWindows;
  91.     static char*     zm_pszWindowClassName;
  92.     static char*     zm_pszWindowName;
  93.     static INT32     zm_nInstanceCount;
  94.     WNDPROC     m_oldWndProc;
  95.     void    ReHookParents();
  96.     void    HookParents();
  97.         
  98.     void    HandleParentMessages(HWND hWnd,UINT message,WPARAM uParam,LPARAM lParam);
  99.     BOOL    HandleWndProc(HWND hWnd,UINT message,WPARAM uParam,LPARAM lParam, LRESULT& lResult);
  100.         
  101. private:
  102.                 
  103.     UINT32                  m_ulSiteThreadID;
  104.         
  105. protected:
  106.     virtual     ~CHXWinSite();
  107.     PRIVATE_DESTRUCTORS_ARE_NOT_A_CRIME
  108.     void        UnHookParents();
  109.     void        RegisterClass();
  110.     void        UnRegisterClass(); 
  111.         
  112.     void        _SizeSliders();
  113.         
  114.         virtual void        _NeedWindowedSite();
  115.         virtual void        _AttachWindow();
  116.         virtual void        _DetachWindow();
  117.         virtual void*       _Create(void* ParentWindow, UINT32 style);
  118.         virtual void        _Destroy(HXxWindow* pWindow);
  119.         virtual void        _SetSize(HXxSize size);
  120.         virtual void        _SetPosition(HXxPoint position);
  121.         virtual void        _DamageRect(HXxRect rect);
  122.         virtual void        _DamageRegion(HXxRegion rect);
  123.         virtual BOOL        _ShouldEnterForceRedraw();
  124.         virtual void        _ExitForceRedraw();
  125.         virtual void        _SendOSUpdateMessage();
  126.         virtual void        _ShowSite(BOOL bShow);
  127.         virtual BOOL        _AtSystemTime();
  128.         virtual HX_RESULT   _EventOccurred(HXxEvent* /*IN*/ pEvent);
  129.         virtual void        _GetDeviceCaps( void* hdc,
  130.                                                                                 UINT16& uBitesPerPixel,
  131.                                                                                 UINT16& uHorzRes,
  132.                                                                                 UINT16& uVertRes);
  133.         virtual void        _GetWindowRect(HXxRect* destRect);
  134.         virtual void        _DestroySliders();
  135.         virtual BOOL        _HandleOSEvents(HXxEvent* /*IN*/ pEvent);
  136.         virtual BOOL        _ConvertToHXEvent( HXxEvent* pEvent );
  137.         virtual void        _GenerateOSEvent(HXxEvent* pEvent, HXxEvent* pEvent2);
  138.         virtual void        _GenerateSetCursorEvent();
  139.         virtual HX_RESULT   _EnterFullScreen();
  140.         virtual HX_RESULT   _ExitFullScreen();
  141.         virtual HX_RESULT   _TestFullScreen(void* hTestBitmap,
  142.                                                                                 const char* pszStatusText);
  143.         virtual void _TryCreateXSlider();
  144.         virtual void _SetXSliderValues(INT32 range, INT32 pageSize);
  145.         virtual void _TryCreateYSlider();
  146.         virtual void _SetYSliderValues(INT32 range, INT32 pageSize);
  147.         virtual void _GetSystemSizeOfSliders(INT32* pWidth, INT32* pHeight);
  148.         virtual BOOL _IsWindowVisible();
  149.         virtual void _ShowXSlider(BOOL bShow);
  150.         virtual void _MoveXSlider(INT32 left, INT32 top,
  151.                                                                 INT32 right, INT32 bottom,
  152.                                                                 BOOL bRedraw);
  153.         virtual void _ShowYSlider(BOOL bShow);
  154.         virtual void _MoveYSlider(INT32 left, INT32 top,
  155.                                                                 INT32 right, INT32 bottom,
  156.                                                                 BOOL bRedraw);
  157.         virtual BOOL _DoesXSliderExist();
  158.         virtual void*_GetContainingWindow(); // XXXAH void*? Not HXxWindow??
  159.         virtual void _GetCursorPos(HXxPoint* pPoint);
  160.         virtual void _MapPointToOSWindow(HXxPoint* pPt, void** pWindowHandle);
  161.         
  162.         //This returns the OS specific window handle, as void*, that the
  163.         //pointer is currently in.
  164.         virtual void* _GetWindowWithCursor();
  165.         virtual void  _ReInitPrimarySurface(); // XXXAH may want to move this to root.
  166.         
  167.         virtual BOOL  _MoveWindow( void* ,
  168.                                                                 INT32 X, INT32 Y,
  169.                                                                 INT32 nWidth, INT32 nHeight,
  170.                                                                 BOOL bRepaint);
  171.         virtual BOOL  _UpdateWindow(void* hWnd);
  172.         virtual BOOL  _ShowWindow(void* hWnd, INT32 nCmdShow);
  173.         virtual BOOL  _SetWindowPos(void* hWnd,
  174.                                                                 void* hWndInsertAfter,
  175.                                                                 INT32 X, INT32 Y,
  176.                                                                 INT32 cx, INT32 cy,
  177.                                                                 INT32 uFlags);
  178.         int _CreateXSlider(int range);
  179.         int _CreateYSlider(int range);
  180.         
  181.         // this is going to be a nice one.
  182.         virtual BOOL _SetWindowRgn(void* hWnd, HXREGION* hRgn, BOOL bRedraw);
  183.         // XXXAH it would be nice to get the return value here
  184.         virtual void _SetFocus(void* pWindow);
  185.         virtual void _DrawFocusRect(UCHAR* pImage,
  186.                                     HXBitmapInfoHeader* pImageInfo,
  187.                                     HXxRect* pImageSize,
  188.                                     void* pOsSpecificData=NULL);
  189.     /*
  190.      * crap from windowless
  191.      */
  192. public:
  193.         /*
  194.      *  SetCapture Support
  195.      */
  196.     void SetCaptureMessage(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  197.     void CheckCapture();
  198.     /*
  199.      *  Supporting windowed renderers
  200.      */
  201.     HXxWindow* GetTopLevelWindow() {return &(m_pTopLevelSite->m_TopLevelWindow);}
  202. //    void DrawAllSites();
  203.         HX_RESULT InternalTestFullScreen(LPVOID hTestBitmap,const char* pszStatusText);
  204.         HX_RESULT TestMode(const char* pszModeDescription, void* hTestBitmap, const char* pszText);
  205.         int TestFullScreenPerformance(void* hTestBitmap, const char* pszText);
  206.         // Windowless stuff
  207.     CRITICAL_SECTION            m_CriticalSection;
  208. protected:
  209.     /*
  210.      *  Slider Support
  211.      */
  212.     HWND                    m_hXSlider;
  213.     HWND                    m_hYSlider;
  214. private:
  215.     HWND                        m_windowParent;
  216.     CHXWinFullScreenWindow*     m_pContainingWindow;
  217. };
  218. class CHXWinFullScreenWindow
  219. {
  220. public:
  221.     void        RegisterClass();
  222.     void        UnRegisterClass();
  223.     HX_RESULT   Create();
  224.     HX_RESULT   Destroy();
  225.     HX_RESULT   Show();
  226.     HX_RESULT   Hide();
  227.     BOOL        IsVisible() {return m_bIsVisible;}
  228.     static LRESULT HXEXPORT WindowProc(HWND hWnd,UINT message,WPARAM uParam,LPARAM lParam);
  229.         
  230.     CHXWinFullScreenWindow(CHXWinSite* pSite);
  231.     ~CHXWinFullScreenWindow();
  232.     HWND GetWindow() {return m_hWnd;}
  233.     void ForceExitFullScreen(UINT message, WPARAM  wParam, LPARAM  lParam);
  234.         
  235. private:
  236.     HWND                m_hWnd;
  237.     HWND                m_hOldFocus;
  238.     HWND                m_hOldForegroudWindow;
  239.     CHXWinSite*         m_pWindowless;
  240.     static UINT32       zm_nInstanceCount; 
  241.     static char*        zm_pszWindowClassName;
  242.     static char*        zm_pszWindowName;
  243.     static BOOL         zm_bHideFullScreenWindow;
  244.     BOOL                m_bIsVisible;
  245. };
  246. #endif /* _WINSITE_H_ */