mwinsite.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:7k
源码类别:

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. #include "minisite.h"
  36. #include "mwinsite.h"
  37. #include "hlxosstr.h"
  38. char*   CHXWinSite::zm_pszWindowClassName   = "HXWinVideoClass";
  39. char*   CHXWinSite::zm_pszWindowName        = "HXWinVideoWindow";
  40. INT32   CHXWinSite::zm_nInstanceCount       = 0;
  41. /************************************************************************
  42.  *  Function:
  43.  *    CHXWinSiteWindowedProc
  44.  */
  45. LRESULT HXEXPORT CHXWinSiteWindowedProc
  46. (
  47.     HWND hWnd,
  48.     UINT message,
  49.     WPARAM uParam,
  50.     LPARAM lParam
  51.     )
  52. {
  53.     return (DefWindowProc(hWnd, message, uParam, lParam));
  54. }
  55. /************************************************************************
  56.  *  Method:
  57.  *    Constructor
  58.  */
  59. CHXWinSite::CHXWinSite(IUnknown* pContext, IUnknown* pUnkOuter, INT32 lZorder)
  60.  :  CMiniBaseSite(pContext, pUnkOuter, lZorder)
  61. {
  62. }
  63. /************************************************************************
  64.  *  Method:
  65.  *    Destructor
  66.  */
  67. CHXWinSite::~CHXWinSite()
  68. {                   
  69. }
  70. /************************************************************************
  71.  *  Method:
  72.  *    IHXSiteWindowed::Create
  73.  */
  74. void* 
  75. CHXWinSite::_Create(void* ParentWindow, UINT32 style)
  76. {
  77.     /*
  78.      * Make sure the window class is registered.
  79.      */
  80. OS_STRING_TYPE osstrWindowClassName(zm_pszWindowClassName);
  81.     if (0 == zm_nInstanceCount)
  82.     {
  83.         WNDCLASS wndClass;
  84.         
  85.         wndClass.style = 0; 
  86.         wndClass.lpfnWndProc = CHXWinSiteWindowedProc; 
  87.         wndClass.cbClsExtra = 0; 
  88.         wndClass.cbWndExtra = 0; 
  89.         wndClass.hInstance = GetModuleHandle(NULL);
  90.         wndClass.hIcon = NULL; 
  91.         wndClass.hCursor = NULL; 
  92.         wndClass.hbrBackground = NULL;
  93.         wndClass.lpszMenuName = NULL; 
  94.         wndClass.lpszClassName = osstrWindowClassName; 
  95.         
  96.         ::RegisterClass(&wndClass);
  97.     }
  98.     
  99.     zm_nInstanceCount++;
  100.     
  101.     HWND hWnd = CreateWindowEx(NULL,
  102.                                OS_STRING(zm_pszWindowClassName), 
  103.                                OS_STRING(zm_pszWindowName), 
  104.                                style, 
  105.                                0, 
  106.                                0,
  107.                                0,
  108.                                0,
  109.                                (HWND)ParentWindow, 
  110.                                NULL, 
  111.                                GetModuleHandle(NULL), 
  112.                                NULL);
  113.     
  114.     return hWnd;
  115. }
  116. /************************************************************************
  117.  *  Method:
  118.  *    IHXSiteWindowed::Destroy
  119.  */
  120. void 
  121. CHXWinSite::_Destroy(HXxWindow* pWindow) 
  122. {
  123.     BOOL retVal = ::DestroyWindow((HWND) pWindow->window);
  124.     
  125.     if (zm_nInstanceCount > 0)
  126.     {
  127.         zm_nInstanceCount--;
  128.     }
  129.     
  130.     if (0 == zm_nInstanceCount)
  131.     {
  132.         ::UnregisterClass(OS_STRING(zm_pszWindowClassName), GetModuleHandle(NULL));
  133.     }
  134. }
  135. void
  136. CHXWinSite::_SetSize(HXxSize size)
  137. {
  138.     /*
  139.      * Change the size of the window using platform specific calls.
  140.      * Note: the size being requested is the "client" size for the
  141.      * window, so we need to actually determine the outer rect size.
  142.      * We do this by getting the current window rect and client rect,
  143.      * the difference is the "extra" size associated with any window
  144.      * dressing.
  145.      */
  146.     HWND tempHwnd = (HWND) GetWindow()->window;
  147.     RECT rect1,
  148.          clientRect;
  149.     ::GetWindowRect(tempHwnd,&rect1);  
  150.     ::GetClientRect(tempHwnd, &clientRect);
  151.     // Make the window's client size equal to the video's size
  152.     int nWidthDelta = (rect1.right - rect1.left) -
  153.                       (clientRect.right - clientRect.left);
  154.     int nHeightDelta = (rect1.bottom - rect1.top) -
  155.                        (clientRect.bottom - clientRect.top); 
  156.     MapWindowPoints(NULL, GetParent(tempHwnd), (POINT*)&rect1, 2);
  157.     _MoveWindow(tempHwnd,
  158.                 (int)rect1.left, (int)rect1.top,
  159.                 (int)size.cx + nWidthDelta,
  160.                 (int)size.cy + nHeightDelta,
  161.                 TRUE);
  162. }
  163. void CHXWinSite::_SetPosition(HXxPoint position)
  164. {
  165.     //Since I just flattened the window structure this function has to
  166.     //me modified to take that into account.
  167.     if(m_pWindow->window && !m_bWindowCreatedByCreate)
  168.     {
  169.         //_MoveWindow((HWND)m_pWindow->window,
  170.         //            (int)m_topleft.x,
  171.         //            (int)m_topleft.y,
  172.         //            (int)m_size.cx ,
  173.         //            (int)m_size.cy ,
  174.         //            TRUE);
  175.     }
  176.     else
  177.     {
  178.         _MoveWindow((HWND) GetWindow()->window,
  179.                     (int)position.x,
  180.                     (int)position.y,
  181.                     (int)m_size.cx ,
  182.                     (int)m_size.cy ,
  183.                     TRUE);
  184.     }
  185. }
  186. BOOL CHXWinSite::_MoveWindow( void* win,
  187.                               INT32 X,
  188.                               INT32 Y,
  189.                               INT32 nWidth,
  190.                               INT32 nHeight,
  191.                               BOOL bRepaint)
  192. {
  193.     return ::MoveWindow((HWND)win,X,Y,nWidth,nHeight,bRepaint);
  194. }