mwinsite.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:7k
源码类别:

Symbian

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Source last modified: $Id: mwinsite.cpp,v 1.3.20.1 2004/07/09 01:59:19 hubbe Exp $
  3.  * 
  4.  * Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
  5.  * 
  6.  * The contents of this file, and the files included with this file,
  7.  * are subject to the current version of the RealNetworks Public
  8.  * Source License (the "RPSL") available at
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed
  10.  * the file under the current version of the RealNetworks Community
  11.  * Source License (the "RCSL") available at
  12.  * http://www.helixcommunity.org/content/rcsl, in which case the RCSL
  13.  * will apply. You may also obtain the license terms directly from
  14.  * RealNetworks.  You may not use this file except in compliance with
  15.  * the RPSL or, if you have a valid RCSL with RealNetworks applicable
  16.  * to this file, the RCSL.  Please see the applicable RPSL or RCSL for
  17.  * the rights, obligations and limitations governing use of the
  18.  * contents of the file.
  19.  * 
  20.  * Alternatively, the contents of this file may be used under the
  21.  * terms of the GNU General Public License Version 2 or later (the
  22.  * "GPL") in which case the provisions of the GPL are applicable
  23.  * instead of those above. If you wish to allow use of your version of
  24.  * this file only under the terms of the GPL, and not to allow others
  25.  * to use your version of this file under the terms of either the RPSL
  26.  * or RCSL, indicate your decision by deleting the provisions above
  27.  * and replace them with the notice and other provisions required by
  28.  * the GPL. If you do not delete the provisions above, a recipient may
  29.  * use your version of this file under the terms of any one of the
  30.  * RPSL, the RCSL or the GPL.
  31.  * 
  32.  * This file is part of the Helix DNA Technology. RealNetworks is the
  33.  * developer of the Original Code and owns the copyrights in the
  34.  * portions it created.
  35.  * 
  36.  * This file, and the files included with this file, is distributed
  37.  * and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
  38.  * KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
  39.  * ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
  40.  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
  41.  * ENJOYMENT OR NON-INFRINGEMENT.
  42.  * 
  43.  * Technology Compatibility Kit Test Suite(s) Location:
  44.  *    http://www.helixcommunity.org/content/tck
  45.  * 
  46.  * Contributor(s):
  47.  * 
  48.  * ***** END LICENSE BLOCK ***** */
  49. #include "minisite.h"
  50. #include "mwinsite.h"
  51. #include "hlxosstr.h"
  52. char*   CHXWinSite::zm_pszWindowClassName   = "HXWinVideoClass";
  53. char*   CHXWinSite::zm_pszWindowName        = "HXWinVideoWindow";
  54. INT32   CHXWinSite::zm_nInstanceCount       = 0;
  55. /************************************************************************
  56.  *  Function:
  57.  *    CHXWinSiteWindowedProc
  58.  */
  59. LRESULT HXEXPORT CHXWinSiteWindowedProc
  60. (
  61.     HWND hWnd,
  62.     UINT message,
  63.     WPARAM uParam,
  64.     LPARAM lParam
  65.     )
  66. {
  67.     return (DefWindowProc(hWnd, message, uParam, lParam));
  68. }
  69. /************************************************************************
  70.  *  Method:
  71.  *    Constructor
  72.  */
  73. CHXWinSite::CHXWinSite(IUnknown* pContext, IUnknown* pUnkOuter, INT32 lZorder)
  74.  :  CMiniBaseSite(pContext, pUnkOuter, lZorder)
  75. {
  76. }
  77. /************************************************************************
  78.  *  Method:
  79.  *    Destructor
  80.  */
  81. CHXWinSite::~CHXWinSite()
  82. {                   
  83. }
  84. /************************************************************************
  85.  *  Method:
  86.  *    IHXSiteWindowed::Create
  87.  */
  88. void* 
  89. CHXWinSite::_Create(void* ParentWindow, UINT32 style)
  90. {
  91.     /*
  92.      * Make sure the window class is registered.
  93.      */
  94. OS_STRING_TYPE osstrWindowClassName(zm_pszWindowClassName);
  95.     if (0 == zm_nInstanceCount)
  96.     {
  97.         WNDCLASS wndClass;
  98.         
  99.         wndClass.style = 0; 
  100.         wndClass.lpfnWndProc = CHXWinSiteWindowedProc; 
  101.         wndClass.cbClsExtra = 0; 
  102.         wndClass.cbWndExtra = 0; 
  103.         wndClass.hInstance = GetModuleHandle(NULL);
  104.         wndClass.hIcon = NULL; 
  105.         wndClass.hCursor = NULL; 
  106.         wndClass.hbrBackground = NULL;
  107.         wndClass.lpszMenuName = NULL; 
  108.         wndClass.lpszClassName = osstrWindowClassName; 
  109.         
  110.         ::RegisterClass(&wndClass);
  111.     }
  112.     
  113.     zm_nInstanceCount++;
  114.     
  115.     HWND hWnd = CreateWindowEx(NULL,
  116.                                OS_STRING(zm_pszWindowClassName), 
  117.                                OS_STRING(zm_pszWindowName), 
  118.                                style, 
  119.                                0, 
  120.                                0,
  121.                                0,
  122.                                0,
  123.                                (HWND)ParentWindow, 
  124.                                NULL, 
  125.                                GetModuleHandle(NULL), 
  126.                                NULL);
  127.     
  128.     return hWnd;
  129. }
  130. /************************************************************************
  131.  *  Method:
  132.  *    IHXSiteWindowed::Destroy
  133.  */
  134. void 
  135. CHXWinSite::_Destroy(HXxWindow* pWindow) 
  136. {
  137.     BOOL retVal = ::DestroyWindow((HWND) pWindow->window);
  138.     
  139.     if (zm_nInstanceCount > 0)
  140.     {
  141.         zm_nInstanceCount--;
  142.     }
  143.     
  144.     if (0 == zm_nInstanceCount)
  145.     {
  146.         ::UnregisterClass(OS_STRING(zm_pszWindowClassName), GetModuleHandle(NULL));
  147.     }
  148. }
  149. void
  150. CHXWinSite::_SetSize(HXxSize size)
  151. {
  152.     /*
  153.      * Change the size of the window using platform specific calls.
  154.      * Note: the size being requested is the "client" size for the
  155.      * window, so we need to actually determine the outer rect size.
  156.      * We do this by getting the current window rect and client rect,
  157.      * the difference is the "extra" size associated with any window
  158.      * dressing.
  159.      */
  160.     HWND tempHwnd = (HWND) GetWindow()->window;
  161.     RECT rect1,
  162.          clientRect;
  163.     ::GetWindowRect(tempHwnd,&rect1);  
  164.     ::GetClientRect(tempHwnd, &clientRect);
  165.     // Make the window's client size equal to the video's size
  166.     int nWidthDelta = (rect1.right - rect1.left) -
  167.                       (clientRect.right - clientRect.left);
  168.     int nHeightDelta = (rect1.bottom - rect1.top) -
  169.                        (clientRect.bottom - clientRect.top); 
  170.     MapWindowPoints(NULL, GetParent(tempHwnd), (POINT*)&rect1, 2);
  171.     _MoveWindow(tempHwnd,
  172.                 (int)rect1.left, (int)rect1.top,
  173.                 (int)size.cx + nWidthDelta,
  174.                 (int)size.cy + nHeightDelta,
  175.                 TRUE);
  176. }
  177. void CHXWinSite::_SetPosition(HXxPoint position)
  178. {
  179.     //Since I just flattened the window structure this function has to
  180.     //me modified to take that into account.
  181.     if(m_pWindow->window && !m_bWindowCreatedByCreate)
  182.     {
  183.         //_MoveWindow((HWND)m_pWindow->window,
  184.         //            (int)m_topleft.x,
  185.         //            (int)m_topleft.y,
  186.         //            (int)m_size.cx ,
  187.         //            (int)m_size.cy ,
  188.         //            TRUE);
  189.     }
  190.     else
  191.     {
  192.         _MoveWindow((HWND) GetWindow()->window,
  193.                     (int)position.x,
  194.                     (int)position.y,
  195.                     (int)m_size.cx ,
  196.                     (int)m_size.cy ,
  197.                     TRUE);
  198.     }
  199. }
  200. BOOL CHXWinSite::_MoveWindow( void* win,
  201.                               INT32 X,
  202.                               INT32 Y,
  203.                               INT32 nWidth,
  204.                               INT32 nHeight,
  205.                               BOOL bRepaint)
  206. {
  207.     return ::MoveWindow((HWND)win,X,Y,nWidth,nHeight,bRepaint);
  208. }