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

Windows编程

开发平台:

Visual C++

  1. //**********************************************************************
  2. // File name: IOIPF.CPP
  3. //
  4. //      Implementation file for COleInPlaceFrame
  5. //
  6. // Functions:
  7. //
  8. //      See IOIPF.H for class definition
  9. //
  10. // Copyright (c) 1992 - 1997 Microsoft Corporation. All rights reserved.
  11. //**********************************************************************
  12. #include "pre.h"
  13. #include "iocs.h"
  14. #include "ias.h"
  15. #include "ioipf.h"
  16. #include "ioips.h"
  17. #include "app.h"
  18. #include "site.h"
  19. #include "doc.h"
  20. //**********************************************************************
  21. //
  22. // CSimpleApp::QueryInterface
  23. //
  24. // Purpose:
  25. //
  26. //      Used for interface negotiation at the Interface level.
  27. //
  28. // Parameters:
  29. //
  30. //      REFIID riid         -   A reference to the interface that is
  31. //                              being queried.
  32. //
  33. //      LPVOID FAR* ppvObj  -   An out parameter to return a pointer to
  34. //                              the interface.
  35. //
  36. // Return Value:
  37. //
  38. //      S_OK    -   The interface is supported.
  39. //      S_FALSE -   The interface is not supported
  40. //
  41. // Function Calls:
  42. //      Function                    Location
  43. //
  44. //      OutputDebugString           Windows API
  45. //      CSimpleApp::QueryInterface  APP.CPP
  46. //
  47. // Comments:
  48. //
  49. //********************************************************************
  50. STDMETHODIMP COleInPlaceFrame::QueryInterface(REFIID riid, LPVOID FAR* ppvObj)
  51. {
  52.         OutputDebugString("In IOIPF::QueryInterfacern");
  53. // delegate to the document Object
  54.         return m_pApp->QueryInterface(riid, ppvObj);
  55. }
  56. //**********************************************************************
  57. //
  58. // CSimpleApp::AddRef
  59. //
  60. // Purpose:
  61. //
  62. //      Adds to the reference count at the interface level.
  63. //
  64. // Parameters:
  65. //
  66. //      None
  67. //
  68. // Return Value:
  69. //
  70. //      ULONG   -   The new reference count of the interface.
  71. //
  72. // Function Calls:
  73. //      Function                    Location
  74. //
  75. //      OutputDebugString           Windows API
  76. //
  77. // Comments:
  78. //
  79. //********************************************************************
  80. STDMETHODIMP_(ULONG) COleInPlaceFrame::AddRef()
  81. {
  82.         OutputDebugString("In IOIPF::AddRefrn");
  83. // delegate to the document Object
  84.         m_pApp->AddRef();
  85. // increment the interface reference count
  86.         return ++m_nCount;
  87. }
  88. //**********************************************************************
  89. //
  90. // CSimpleApp::Release
  91. //
  92. // Purpose:
  93. //
  94. //      Decrements the reference count at this level
  95. //
  96. // Parameters:
  97. //
  98. //      None
  99. //
  100. // Return Value:
  101. //
  102. //      ULONG   -   The new reference count of the interface.
  103. //
  104. // Function Calls:
  105. //      Function                    Location
  106. //
  107. //      OutputDebugString           Windows API
  108. //      CSimpleApp::Release         APP.CPP
  109. //
  110. // Comments:
  111. //
  112. //********************************************************************
  113. STDMETHODIMP_(ULONG) COleInPlaceFrame::Release()
  114. {
  115.         OutputDebugString("In IOIPF::Releasern");
  116. // delegate to the document object
  117.         m_pApp->Release();
  118. // decrement the interface reference count
  119.         return --m_nCount;
  120. }
  121. //**********************************************************************
  122. //
  123. // COleInPlaceFrame::GetWindow
  124. //
  125. // Purpose:
  126. //
  127. //      Returns the frame window handle
  128. //
  129. // Parameters:
  130. //
  131. //      HWND FAR* lphwnd    - Location to return the window handle
  132. //
  133. // Return Value:
  134. //
  135. //      S_OK
  136. //
  137. // Function Calls:
  138. //      Function                    Location
  139. //
  140. //      OutputDebugString           Windows API
  141. //                   OLE API
  142. //
  143. // Comments:
  144. //
  145. //********************************************************************
  146. STDMETHODIMP COleInPlaceFrame::GetWindow (HWND FAR* lphwnd)
  147. {
  148.         OutputDebugString("In IOIPF::GetWindowrn");
  149.         CStabilize stabilize(m_pApp);
  150.         *lphwnd = m_pApp->m_hAppWnd;
  151.         return S_OK;
  152. }
  153. //**********************************************************************
  154. //
  155. // COleInPlaceFrame::ContextSensitiveHelp
  156. //
  157. // Purpose:
  158. //
  159. //      Used in implementing Context sensitive help
  160. //
  161. // Parameters:
  162. //
  163. //      BOOL fEnterMode -   TRUE if starting Context Sensitive help mode
  164. //
  165. // Return Value:
  166. //
  167. //      S_OK
  168. //
  169. // Function Calls:
  170. //      Function                    Location
  171. //
  172. //      OutputDebugString           Windows API
  173. //                   OLE API
  174. //
  175. // Comments:
  176. //
  177. //      Be sure to read the technotes in the OLE toolkit.
  178. //
  179. //********************************************************************
  180. STDMETHODIMP COleInPlaceFrame::ContextSensitiveHelp (BOOL fEnterMode)
  181. {
  182.         OutputDebugString("In IOIPF::ContextSensitiveHelprn");
  183.         CStabilize stabilize(m_pApp);
  184.         m_pApp->m_fMenuMode = fEnterMode;
  185.         return S_OK;
  186. }
  187. //**********************************************************************
  188. //
  189. // COleInPlaceFrame::GetBorder
  190. //
  191. // Purpose:
  192. //
  193. //      Returns the outermost border that frame adornments can be attached
  194. //      during InPlace Activation.
  195. //
  196. // Parameters:
  197. //
  198. //      LPRECT lprectBorder - return parameter to contain the outermost
  199. //                            rect for frame adornments
  200. //
  201. // Return Value:
  202. //
  203. //      S_OK
  204. //
  205. // Function Calls:
  206. //      Function                    Location
  207. //
  208. //      OutputDebugString           Windows API
  209. //      GetClientRect               Windows API
  210. //      CopyRect                    Windows API
  211. //                   OLE API
  212. //
  213. // Comments:
  214. //
  215. //********************************************************************
  216. STDMETHODIMP COleInPlaceFrame::GetBorder (LPRECT lprectBorder)
  217. {
  218.         RECT rect;
  219.         OutputDebugString("In IOIPF::GetBorderrn");
  220.         // get the rect for the entire frame.
  221.         GetClientRect(m_pApp->m_hAppWnd, &rect);
  222.         CopyRect(lprectBorder, &rect);
  223.         return S_OK;
  224. }
  225. //**********************************************************************
  226. //
  227. // COleInPlaceFrame::RequestBorderSpace
  228. //
  229. // Purpose:
  230. //
  231. //      Approves/Denies requests for border space during InPlace
  232. //      negotiation.
  233. //
  234. // Parameters:
  235. //
  236. //      LPCBORDERWIDTHS lpborderwidths  - The width in pixels needed on
  237. //                                        each side of the frame.
  238. //
  239. // Return Value:
  240. //
  241. //      S_OK
  242. //
  243. // Function Calls:
  244. //      Function                    Location
  245. //
  246. //      OutputDebugString           Windows API
  247. //                   OLE API
  248. //
  249. // Comments:
  250. //
  251. //      This implementation doesn't care about how much border space
  252. //      is used.  It always returns S_OK.
  253. //
  254. //********************************************************************
  255. STDMETHODIMP COleInPlaceFrame::RequestBorderSpace (LPCBORDERWIDTHS lpborderwidths)
  256. {
  257.         OutputDebugString("In IOIPF::RequestBorderSpacern");
  258.         // always approve the request
  259.         return S_OK;
  260. }
  261. //**********************************************************************
  262. //
  263. // COleInPlaceFrame::SetBorderSpace
  264. //
  265. // Purpose:
  266. //
  267. //      The object calls this method when it is actually going to
  268. //      start using the border space.
  269. //
  270. // Parameters:
  271. //
  272. //      LPCBORDERWIDTHS lpborderwidths  - Border space actually being used
  273. //                                        by the object
  274. //
  275. // Return Value:
  276. //
  277. //      S_OK
  278. //
  279. // Function Calls:
  280. //      Function                        Location
  281. //
  282. //      CSimpleApp::AddFrameLevelTools  APP.CPP
  283. //      OutputDebugString               Windows API
  284. //      GetClientRect                   Windows API
  285. //      MoveWindow                      Windows API
  286. //                       Windows API
  287. //
  288. // Comments:
  289. //
  290. //      This routine could be a little smarter and check to see if
  291. //      the object is requesting the entire client area of the
  292. //      window.
  293. //
  294. //********************************************************************
  295. STDMETHODIMP COleInPlaceFrame::SetBorderSpace (LPCBORDERWIDTHS lpborderwidths)
  296. {
  297.         OutputDebugString("In IOIPF::SetBorderSpacern");
  298.         CStabilize stabilize(m_pApp);
  299.         if (lpborderwidths == NULL)
  300.                 m_pApp->AddFrameLevelTools();
  301.         else
  302.                 {
  303.                 RECT rect;
  304.                 GetClientRect(m_pApp->m_hAppWnd, &rect);
  305.                 MoveWindow( m_pApp->m_lpDoc->m_hDocWnd,
  306.                                         rect.left + lpborderwidths->left,
  307.                                         rect.top + lpborderwidths->top,
  308.                                         rect.right - lpborderwidths->right - lpborderwidths->left,
  309.                                         rect.bottom - lpborderwidths->bottom - lpborderwidths->top,
  310.                                         TRUE);
  311.                 }
  312.         return S_OK;
  313. }
  314. //**********************************************************************
  315. //
  316. // COleInPlaceFrame::SetActiveObject
  317. //
  318. // Purpose:
  319. //
  320. //
  321. // Parameters:
  322. //
  323. //      LPOLEINPLACEACTIVEOBJECT lpActiveObject     -   Pointer to the
  324. //                                                      objects
  325. //                                                      IOleInPlaceActiveObject
  326. //                                                      interface
  327. //
  328. //@@WTK WIN32, UNICODE
  329. //      //LPCSTR lpszObjName                          -   Name of the object
  330. //      LPCOLESTR lpszObjName                          -   Name of the object
  331. //
  332. // Return Value:
  333. //
  334. //      S_OK
  335. //
  336. // Function Calls:
  337. //      Function                            Location
  338. //
  339. //      OutputDebugString                   Windows API
  340. //      IOleInPlaceActiveObject::AddRef     Object
  341. //      IOleInPlaceActiveObject::Release    Object
  342. //                           OLE API
  343. //
  344. // Comments:
  345. //
  346. //********************************************************************
  347. //@@WTK WIN32, UNICODE
  348. //STDMETHODIMP COleInPlaceFrame::SetActiveObject (LPOLEINPLACEACTIVEOBJECT lpActiveObject,LPCSTR lpszObjName)
  349. STDMETHODIMP COleInPlaceFrame::SetActiveObject (
  350. LPOLEINPLACEACTIVEOBJECT lpActiveObject,
  351. LPCOLESTR lpszObjName)
  352. {
  353.         OutputDebugString("In IOIPF::SetActiveObjectrn");
  354.         CStabilize stabilize(m_pApp);
  355.         // AddRef() it and save it...
  356.         if (lpActiveObject)
  357.                 {
  358.                 lpActiveObject->AddRef();
  359.                 lpActiveObject->GetWindow(&m_pApp->m_hwndUIActiveObj);
  360.                 if (m_pApp->m_hwndUIActiveObj)
  361.                         SendMessage(m_pApp->m_hwndUIActiveObj, WM_QUERYNEWPALETTE, 0, 0L);
  362.                 }
  363.         else
  364.                 {
  365.                 if (m_pApp->m_lpDoc->m_lpActiveObject)
  366.                         m_pApp->m_lpDoc->m_lpActiveObject->Release();
  367.                 m_pApp->m_hwndUIActiveObj = NULL;
  368.                 }
  369.         // in an MDI app, this method really shouldn't be called,
  370.         // this method associated with the doc is called instead.
  371.         m_pApp->m_lpDoc->m_lpActiveObject = lpActiveObject;
  372.         // should set window title here
  373.         return S_OK;
  374. }
  375. //**********************************************************************
  376. //
  377. // COleInPlaceFrame::InsertMenus
  378. //
  379. // Purpose:
  380. //
  381. //      Inserts the container menu into the combined menu
  382. //
  383. // Parameters:
  384. //
  385. //      HMENU hmenuShared                   -   Menu Handle to be set.
  386. //      LPOLEMENUGROUPWIDTHS lpMenuWidths   -   Width of menus
  387. //
  388. // Return Value:
  389. //
  390. // Function Calls:
  391. //      Function                    Location
  392. //
  393. //      OutputDebugString           Windows API
  394. //      AppendMenu                  Windows API
  395. //                   OLE API
  396. //
  397. // Comments:
  398. //
  399. //********************************************************************
  400. STDMETHODIMP COleInPlaceFrame::InsertMenus (HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths)
  401. {
  402.         OutputDebugString("In IOIPF::InsertMenusrn");
  403.         CStabilize stabilize(m_pApp);
  404.   //@@WTK WIN32, UNICODE
  405.         //AppendMenu(hmenuShared, MF_BYPOSITION | MF_POPUP, m_pApp->m_hFileMenu, "&File");
  406.         //AppendMenu(hmenuShared, MF_BYPOSITION | MF_POPUP, m_pApp->m_hHelpMenu, "&Other");
  407.         AppendMenu(hmenuShared, MF_BYPOSITION | MF_POPUP, (UINT)m_pApp->m_hFileMenu, "&File");
  408.         AppendMenu(hmenuShared, MF_BYPOSITION | MF_POPUP, (UINT)m_pApp->m_hHelpMenu, "&Other");
  409.         lpMenuWidths->width[0] = 1;
  410.         lpMenuWidths->width[2] = 0;
  411.         lpMenuWidths->width[4] = 1;
  412.         return S_OK;
  413. }
  414. //**********************************************************************
  415. //
  416. // COleInPlaceFrame::SetMenu
  417. //
  418. // Purpose:
  419. //
  420. //      Sets the application menu to the combined menu
  421. //
  422. // Parameters:
  423. //
  424. //      HMENU hmenuShared       - The combined menu
  425. //
  426. //      HOLEMENU holemenu       - Used by OLE
  427. //
  428. //      HWND hwndActiveObject   - Used by OLE
  429. //
  430. // Return Value:
  431. //
  432. //      S_OK
  433. //
  434. // Function Calls:
  435. //      Function                    Location
  436. //
  437. //      OutputDebugString           Windows API
  438. //      SetMenu                     Windows API
  439. //      OleSetMenuDescriptor        OLE API
  440. //                   OLE API
  441. //
  442. // Comments:
  443. //
  444. //********************************************************************
  445. STDMETHODIMP COleInPlaceFrame::SetMenu (HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject)
  446. {
  447.         OutputDebugString("In IOIPF::SetMenurn");
  448.         CStabilize stabilize(m_pApp);
  449.         HMENU hMenu = m_pApp->m_hMainMenu;
  450.         if (holemenu)
  451.                 hMenu = hmenuShared;
  452.         // call the windows api, not this method
  453.         ::SetMenu (m_pApp->m_hAppWnd, hMenu);
  454.         OleSetMenuDescriptor(holemenu, m_pApp->m_hAppWnd, hwndActiveObject, this, m_pApp->m_lpDoc->m_lpActiveObject);
  455.         return S_OK;
  456. }
  457. //**********************************************************************
  458. //
  459. // COleInPlaceFrame::RemoveMenus
  460. //
  461. // Purpose:
  462. //
  463. //      Removes the container menus from the combined menu
  464. //
  465. // Parameters:
  466. //
  467. //      HMENU hmenuShared   - Handle to the combined menu.
  468. //
  469. // Return Value:
  470. //
  471. //      S_OK
  472. //
  473. // Function Calls:
  474. //      Function                    Location
  475. //
  476. //      OutputDebugString           Windows API
  477. //      GetMenuItemCount            Windows API
  478. //      RemoveMenu                  Windows API
  479. //                   OLE API
  480. //
  481. // Comments:
  482. //
  483. //********************************************************************
  484. STDMETHODIMP COleInPlaceFrame::RemoveMenus (HMENU hmenuShared)
  485. {
  486.         int retval;
  487.         OutputDebugString("In IOIPF::RemoveMenusrn");
  488.         while ((retval = GetMenuItemCount(hmenuShared)) && (retval != -1))
  489.                 RemoveMenu(hmenuShared, 0, MF_BYPOSITION);
  490.         return S_OK;
  491. }
  492. //**********************************************************************
  493. //
  494. // COleInPlaceFrame::SetStatusText
  495. //
  496. // Purpose:
  497. //
  498. //      Not Implemented
  499. //
  500. // Parameters:
  501. //
  502. //      Not Implemented
  503. //
  504. // Return Value:
  505. //
  506. //      Not Implemented
  507. //
  508. // Function Calls:
  509. //      Function                    Location
  510. //
  511. //      OutputDebugString           Windows API
  512. //
  513. // Comments:
  514. //
  515. //      This function is not implemented due to the fact
  516. //      that this application does not have a status bar.
  517. //
  518. //********************************************************************
  519. //@@WTK WIN32, UNICODE
  520. //STDMETHODIMP COleInPlaceFrame::SetStatusText (LPCSTR lpszStatusText)
  521. STDMETHODIMP COleInPlaceFrame::SetStatusText (LPCOLESTR lpszStatusText)
  522. {
  523.         OutputDebugString("In IOIPF::SetStatusTextrn");
  524.         return E_FAIL;
  525. }
  526. //**********************************************************************
  527. //
  528. // COleInPlaceFrame::EnableModeless
  529. //
  530. // Purpose:
  531. //
  532. //      Enables/Disables container modeless dialogs
  533. //
  534. // Parameters:
  535. //
  536. //      BOOL fEnable    - Enable/Disable
  537. //
  538. // Return Value:
  539. //
  540. //      S_OK
  541. //
  542. // Function Calls:
  543. //      Function                    Location
  544. //
  545. //      OutputDebugString           Windows API
  546. //
  547. // Comments:
  548. //
  549. //      There are no modeless dialogs in this application, so the
  550. //      implementation of this method is trivial.
  551. //
  552. //********************************************************************
  553. STDMETHODIMP COleInPlaceFrame::EnableModeless (BOOL fEnable)
  554. {
  555.         OutputDebugString("In IOIPF::EnableModelessrn");
  556.         return S_OK;
  557. }
  558. //**********************************************************************
  559. //
  560. // COleInPlaceFrame::TranslateAccelerator
  561. //
  562. // Purpose:
  563. //
  564. //      Not Implemented
  565. //
  566. // Parameters:
  567. //
  568. //      Not Implemented
  569. //
  570. // Return Value:
  571. //
  572. //      Not Implemented
  573. //
  574. // Function Calls:
  575. //      Function                    Location
  576. //
  577. //      OutputDebugString           Windows API
  578. //
  579. // Comments:
  580. //
  581. //      Not Implemented
  582. //
  583. //********************************************************************
  584. STDMETHODIMP COleInPlaceFrame::TranslateAccelerator (LPMSG lpmsg, WORD wID)
  585. {
  586.         OutputDebugString("In IOIPF::TranslateAcceleratorrn");
  587.         return S_FALSE;
  588. }