CLIENT.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:5k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * CLIENT.CPP
  3.  * Patron Chapter 22
  4.  *
  5.  * Implementation of the CPatronClient class that just makes sure
  6.  * we get a CPatronDoc on doc creation and that we initialize fully.
  7.  *
  8.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  9.  *
  10.  * Kraig Brockschmidt, Microsoft
  11.  * Internet  :  kraigb@microsoft.com
  12.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  13.  */
  14. #include "patron.h"
  15. /*
  16.  * CPatronClient::CPatronClient
  17.  * CPatronClient::~CPatronClient
  18.  *
  19.  * Constructor Parameters:
  20.  *  hInst           HINSTANCE of the application.
  21.  *  pFR             PCFrame to the frame object.
  22.  */
  23. CPatronClient::CPatronClient(HINSTANCE hInst, PCFrame pFR)
  24.     : CClient(hInst, pFR)
  25.     {
  26.     return;
  27.     }
  28. CPatronClient::~CPatronClient(void)
  29.     {
  30.     return;
  31.     }
  32. /*
  33.  * CPatronClient::CreateCDocument
  34.  *
  35.  * Purpose:
  36.  *  Constructs a new document specific to the application.
  37.  *
  38.  * Parameters:
  39.  *  None
  40.  *
  41.  * Return Value:
  42.  *  PCDocument      Pointer to the new document object.
  43.  */
  44. PCDocument CPatronClient::CreateCDocument(void)
  45.     {
  46.     return (PCDocument)(new CPatronDoc(m_hInst, m_pFR, m_pAdv));
  47.     }
  48. //CHAPTER22MOD
  49. /*
  50.  * CPatronClient::SetMenu
  51.  *
  52.  * Purpose:
  53.  *  Changes the frame-level menu, isolating the rest of the
  54.  *  application from MDI/SDI considerations.
  55.  *
  56.  * Parameters:
  57.  *  hWndFrame       HWND of the frame window.
  58.  *  hMenu           HMENU to set in the frame for the current
  59.  *                  document.
  60.  *  hMenuWin        HMENU of the window menu.
  61.  *
  62.  * Return Value:
  63.  *  None
  64.  */
  65. void CPatronClient::SetMenu(HWND hWndFrame, HMENU hMenu
  66.     , HMENU hMenuWin)
  67.     {
  68.    #ifdef MDI
  69.      MDISETMENU(m_hWnd, hMenu, hMenuWin);
  70.      MDIREFRESHMENU(m_hWnd);
  71.    #else
  72.     if (NULL!=hMenu)
  73.         ::SetMenu(hWndFrame, hMenu);
  74.    #endif
  75.     DrawMenuBar(hWndFrame);
  76.     return;
  77.     }
  78. /*
  79.  * CPatronClient::MoveWithoutFamily
  80.  *
  81.  * Purpose:
  82.  *  This specific in-place activation function applies moves the
  83.  *  client window but to leave all child windows within it exactly
  84.  *  where they are to keep in-place objects in the same absolute
  85.  *  screen position.
  86.  *
  87.  * Parameters:
  88.  *  prc             LPRECT containing the new space for the client
  89.  *  dx, dy          ints specifying how much to move the client
  90.  *
  91.  * Return Value:
  92.  *  None
  93.  */
  94. void CPatronClient::MoveWithoutFamily(LPRECT prc, int dx, int dy)
  95.     {
  96.     RECT        rc;
  97.     HWND        hWndFrame;
  98.     HWND        hWnd;
  99.     POINT       pt;
  100.     hWndFrame=GetParent(m_hWnd);
  101.     SendMessage(hWndFrame, WM_SETREDRAW, FALSE, 0L);
  102.     ShowWindow(m_hWnd, SW_HIDE);
  103.     SetWindowPos(m_hWnd, NULL, prc->left, prc->top
  104.         , prc->right-prc->left, prc->bottom-prc->top
  105.         , SWP_NOZORDER | SWP_NOACTIVATE);
  106.     //Move all children of the client
  107.     hWnd=GetWindow(m_hWnd, GW_CHILD);
  108.     while (NULL!=hWnd)
  109.         {
  110.         GetWindowRect(hWnd, &rc);
  111.         SETPOINT(pt, rc.left, rc.top);
  112.         ScreenToClient(m_hWnd, &pt);
  113.         if (pt.x!=dx && pt.y!=dy && !IsZoomed(hWnd))
  114.             {
  115.             //Move window in the opposite direction as the client
  116.             SetWindowPos(hWnd, NULL, pt.x-dx, pt.y-dy
  117.                 , rc.right-rc.left, rc.bottom-rc.top
  118.                 , SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE);
  119.             }
  120.         hWnd=GetWindow(hWnd, GW_HWNDNEXT);
  121.         }
  122.     SendMessage(hWndFrame, WM_SETREDRAW, TRUE, 0L);
  123.     ShowWindow(m_hWnd, SW_SHOW);
  124.     return;
  125.     }
  126. /*
  127.  * CPatronClient::CallContextHelpOnDocuments
  128.  *
  129.  * Purpose:
  130.  *  Calls IOleInPlaceUIWindow->ContextSensitiveHelp for each
  131.  *  document window as required in an MDI container.  This does
  132.  *  nothing in SDI.
  133.  *
  134.  * Parameters:
  135.  *  fEnterMode      BOOl to pass to the documents
  136.  *
  137.  * Return Value:
  138.  *  None
  139.  */
  140. void CPatronClient::CallContextHelpOnDocuments(BOOL fEnterMode)
  141.     {
  142.     LPOLEINPLACEUIWINDOW    pUIWin;
  143.     HWND                    hWndT;
  144.     PCPatronDoc             pDoc;
  145.     //Loop through the documents calling their functions.
  146.     hWndT=GetWindow(m_hWnd, GW_CHILD);
  147.     for ( ; hWndT; hWndT=GetWindow(hWndT, GW_HWNDNEXT))
  148.         {
  149.         //Skip if icon title window
  150.         if (NULL!=GetWindow(hWndT, GW_OWNER))
  151.             continue;
  152.         pDoc=(PCPatronDoc)SendMessage(hWndT, DOCM_PDOCUMENT
  153.             , 0, 0L);
  154.         if (NULL==pDoc)
  155.             continue;
  156.         pDoc->QueryInterface(IID_IOleInPlaceUIWindow
  157.             , (PPVOID)&pUIWin);
  158.         if (NULL==pUIWin)
  159.             continue;
  160.         pUIWin->ContextSensitiveHelp(fEnterMode);
  161.         pUIWin->Release();
  162.         }
  163.     return;
  164.     }
  165. //End CHAPTER22MOD