home *** CD-ROM | disk | FTP | other *** search
/ Troubleshooting Netware Systems / CSTRIAL0196.BIN / attach / msj / v10n03 / bocole.exe / OCFHLPR.H < prev    next >
C/C++ Source or Header  |  1995-03-01  |  15KB  |  534 lines

  1. // ---------------------------------------------------------------------------
  2. // Copyright (C) 1994 Borland International
  3. // ---------------------------------------------------------------------------
  4. #if !defined(_OCFHLPR_H)
  5. #define _OCFHLPR_H
  6.  
  7. #pragma option  -Vh-          // Don't coerce huge classes
  8. #include <ocf/ocfpch.h>
  9. #include <ocf/ocapp.h>
  10. #include <ocf/ocdoc.h>
  11. #include <ocf/ocview.h>
  12. #include <ocf/ocremvie.h>
  13. #include <ocf/ocpart.h>
  14. #include <windowsx.h>
  15. #pragma option  -Vh.
  16.  
  17. //
  18. // Forward ref.
  19. //
  20. class TOleWin;
  21.  
  22.  
  23. //
  24. // Prototypes of Accessors
  25. //
  26. TOcApp*   GetOcApp();
  27.  
  28.  
  29. //
  30. // Encapsulates a clientDC configured for OLE operations
  31. //
  32. class OleClientDC {
  33.   public:
  34.     OleClientDC(TOleWin&, bool scale = true);
  35.    ~OleClientDC();
  36.  
  37.     //
  38.     // HDC conversion operator for convenience
  39.     //
  40.     operator        HDC () const;
  41.  
  42.   protected:
  43.     HDC             Hdc;          //  Actual Handle to Device Context
  44.     HWND            HWnd;         //  Handle of Window whose DC was retrieved
  45. };
  46.  
  47.  
  48. //
  49. // Class encapsulating menu description for menu merging purposes
  50. //
  51. class MenuDescr : public TOcMenuDescr {
  52.   public:
  53.     MenuDescr(HMENU,
  54.               int fileGrp = 0, int editGrp = 0,
  55.               int contGrp = 0, int objGrp = 0,
  56.               int winGrp  = 0, int hlpGrp = 0);
  57.     //
  58.     // HMENU conversion operator for easy handling
  59.     //
  60.     operator HMENU() const { return HMenu; }
  61.  
  62.   private:
  63.     MenuDescr(const TOcMenuDescr&);
  64. };
  65.  
  66.  
  67. //
  68. // Object which initializes OLE and creates the basic OCF Helper objects
  69. // required by any application supporting Linking and Embedding
  70. //
  71. class TOleInit : public TOleAllocator {
  72.   public:
  73.     TOleInit(TRegList& regInfo,
  74.              TComponentFactory callback,
  75.              string& cmdLine, TRegLink* linkHead = 0,
  76.              HINSTANCE hInst = ::_hInstance);
  77.    ~TOleInit();
  78.  
  79.   protected:
  80.     TOcRegistrar*   OcRegistrar;
  81.     TOcApp*&        OcApp;
  82. };
  83.  
  84.  
  85. //
  86. // Handles OCF messages/events for an OLE Frame Window
  87. //
  88. class TOleFrameWin {
  89.   public:
  90.     TOleFrameWin(HWND);
  91.  
  92.     void            OnCreate();
  93.     void            OnDestroy();
  94.     void            OnActivateApp(bool);
  95.     operator        HWND() const {return Hwnd; };
  96.   protected:
  97.     HWND            Hwnd;
  98. };
  99.  
  100.  
  101. //
  102. // Object which handles OCF messages/events for an OLE Window and
  103. // provide various default behaviour.
  104. //
  105. class TOleWin : public TOcMenuDescr {
  106.   public:
  107.     TOleWin(HWND hwnd);
  108.     virtual ~TOleWin();
  109.  
  110.     operator        HWND() const {return Hwnd; };
  111.     void            SetWinMenu(const TOcMenuDescr& menuDescr);
  112.     HMENU           GetWinMenu() const {return HMenu; };
  113.     HMENU           GetMergedMenu() const {return MergedMenu; };
  114.  
  115.     //
  116.     // Windows message handlers
  117.     //
  118.     void            OnCreate();
  119.     void            OnDestroy();
  120.     void            OnSize();
  121.     void            OnPaint(HDC hdc, PAINTSTRUCT& ps);
  122.  
  123.     bool            OnCommand(UINT);
  124.     void            OnInitMenuPopup(HMENU hMenu, int item);
  125.     void            OnInitMenu(HMENU hMenu);
  126.  
  127.     bool            OnLButtonDown(int x, int y, UINT keyFlags);
  128.     bool            OnLButtonUp(int x, int y, UINT keyFlags);
  129.     bool            OnLButtonDblClk(int x, int y, UINT keyFlags);
  130.     bool            OnRButtonDown(int x, int y, UINT keyFlags);
  131.  
  132.     void            OnActivate(bool);
  133.     void            OnSetFocus(HWND lostFocus);
  134.  
  135.     //
  136.     // OCF event handlers
  137.     //
  138.     const char far* OnOcViewTitle();
  139.     void            OnOcViewSetTitle(const char far*);
  140.     bool            OnOcViewSetSiteRect(TRect far*);
  141.     bool            OnOcViewGetScale(TOcScaleFactor far*);
  142.     bool            OnOcViewPartInvalid(TOcPartChangeInfo far*);
  143.     bool            OnOcViewGetSiteRect(TRect far*);
  144.     bool            OnOcViewDrop(TOcDragDrop far*);
  145.     LRESULT         OnOcEvent(WPARAM wParam, LPARAM lParam);
  146.  
  147.     //
  148.     // The following events are actually sent to the frame
  149.     // However, the latter can delegate to the OLE Window
  150.     //
  151.     bool            OnOcAppInsMenus(TOcMenuDescr far* sharedMenu);
  152.     HMENU           OnOcAppMenus(TOcMenuDescr far* menuDescr);
  153.     HMENU           OnOcAppRestoreUI();
  154.  
  155.     //
  156.     // OLE UI Dialog methods
  157.     //
  158.     void            EditInsertObject();
  159.     void            EditPasteSpecial();
  160.     void            EditConvert();
  161.     void            EditLinks();
  162.  
  163.     //
  164.     // OCF Helper functions
  165.     //
  166.     bool            Deactivate();
  167.     void            DeactivateParts();
  168.     void            SetSelection(TOcPart*);
  169.     bool            Select(UINT, TPoint& pt);
  170.     void            GetInsertPosition(TRect& rect);
  171.     void            InvalidatePart(TOcInvalidate invalid);
  172.     bool            PaintParts(HDC dc, bool erase, TRect& rect, bool metafile);
  173.     void            GetLogPerUnit(TSize&);
  174.     void            SetupDC(HDC dc, bool scale = true);
  175.     bool            OleShutDown();
  176.     TOcView*        CreateOcView(TRegLink*, bool isRemote, IUnknown* outer);
  177.  
  178.     //
  179.     // Accessors
  180.     //
  181.     TOcDocument*    GetOcDoc() {return OcDoc;}
  182.     TOcView*        GetOcView() {return OcView;}
  183.     TOcRemView*     GetOcRemView() {return TYPESAFE_DOWNCAST(OcView, TOcRemView);}
  184.     bool            SelectEmbedded();
  185.  
  186.     bool            IsOpenEditing() const;
  187.     bool            IsRemote() const { return Remote; }
  188.  
  189.     //
  190.     // extra user info
  191.     //
  192.     void*           GetUserInfo()         {return UserInfo;}
  193.     void*           SetUserInfo(void* ui);
  194.  
  195.   protected:
  196.     HWND            Hwnd;
  197.     TOcDocument*    OcDoc;
  198.     TOcView*        OcView;
  199.     TOcScaleFactor  Scale;
  200.     TOcPart*        DragPart;
  201.     bool            Remote;
  202.     TRect           Pos;
  203.     bool            ShowObjects;
  204.     HMENU           MergedMenu;
  205.     void*           UserInfo;
  206.     OleClientDC*    DragDC;
  207.     TRect           DragRect;
  208. };
  209.  
  210.  
  211. inline
  212. OleClientDC::OleClientDC(TOleWin& win, bool scale)
  213.             :HWnd(win), Hdc(GetDC(win))
  214. {
  215.   win.SetupDC(*this, scale);
  216. }
  217.  
  218.  
  219. inline
  220. OleClientDC::operator HDC() const
  221. {
  222.   return Hdc;
  223. }
  224.  
  225.  
  226. inline
  227. OleClientDC::~OleClientDC()
  228. {
  229.   ReleaseDC(HWnd, Hdc);
  230. }
  231.  
  232.  
  233. //
  234. //
  235. //
  236. inline
  237. MenuDescr::MenuDescr(HMENU menu, int fileGrp, int editGrp,
  238.                      int contGrp, int objGrp,
  239.                      int winGrp, int hlpGrp)
  240. {
  241.   HMenu = menu;
  242.   Width[0] = fileGrp;
  243.   Width[1] = editGrp;
  244.   Width[2] = contGrp;
  245.   Width[3] = objGrp;
  246.   Width[4] = winGrp;
  247.   Width[5] = hlpGrp;
  248. }
  249.  
  250.  
  251. bool MergeContainerMenu(TOcMenuDescr& dst, const TOcMenuDescr& src);
  252. bool MergeServerMenu(TOcMenuDescr& dst, const TOcMenuDescr& src);
  253.  
  254. // -------------------------------------------------------------------------
  255. // Debugging aids
  256. // -------------------------------------------------------------------------
  257. char*   GetOcString(WPARAM id);
  258.  
  259.  
  260. // -------------------------------------------------------------------------
  261. // Wrappers for common Windows routines
  262. // -------------------------------------------------------------------------
  263. bool GetOpenFileName(HWND owner, const char* filter, char* fileName,
  264.                      int size, DWORD flags = OFN_OVERWRITEPROMPT);
  265. bool GetSaveFileName(HWND owner, const char* filter, char* fileName,
  266.                      int size, DWORD flags = OFN_OVERWRITEPROMPT);
  267.  
  268.  
  269.  
  270. // -------------------------------------------------------------------------
  271. // Macros/templates to simplify OCF Event handling
  272. // -------------------------------------------------------------------------
  273.  
  274. //
  275. // Function template to send OCF events
  276. //
  277. template <class T> inline LRESULT
  278. SendOCFEvent(HWND hwnd, int ocfCode, const T far* t = 0)
  279. {
  280.   return SendMessage(hwnd, WM_OCEVENT, ocfCode, LPARAM(t));
  281. }
  282.  
  283.  
  284. // -------------------------------------------------------------------------
  285. //  Frame Events
  286. // -------------------------------------------------------------------------
  287.  
  288. //
  289. // LRESULT MainWnd_OnOcEvent(HWND hwnd, WPARAM wParam, LPARAM lParam)
  290. //
  291. #define HANDLE_WM_OCEVENT(hwnd, wParam, lParam, fn)\
  292.   (LRESULT)(fn)((hwnd), (wParam), (lParam))
  293.  
  294. //
  295. // macros for WM_OCEVENT subdispatching
  296. //
  297. #define HANDLE_OCF(hwnd, message, fn) \
  298.   case (message): return (LRESULT)HANDLE_##message((hwnd), (lParam), (fn))
  299.  
  300. //
  301. // bool Cls_OnOcAppInsMenus(HWND hwnd, TOcMenuDescr far* menuDescr)
  302. //
  303. #define HANDLE_OC_APPINSMENUS(hwnd, lParam, fn) \
  304.     (LRESULT)(UINT)(bool)(fn)((hwnd), (TOcMenuDescr far*)(lParam))
  305.  
  306. //
  307. // bool Cls_OnOcAppMenus(HWND hwnd, TOcMenuDescr far* menuDescr)
  308. //
  309. #define HANDLE_OC_APPMENUS(hwnd, lParam, fn) \
  310.     (LRESULT)(UINT)(bool)(fn)((hwnd), (TOcMenuDescr far*)(lParam))
  311.  
  312. //
  313. // bool Cls_OnOcAppProcessMsg(HWND hwnd, MSG far* msg)
  314. //
  315. #define HANDLE_OC_APPPROCESSMSG(hwnd, lParam, fn) \
  316.     (LRESULT)(UINT)(fn)((hwnd), (MSG far*)(lParam))
  317.  
  318. //
  319. // bool Cls_OnOcAppFrameRect(HWND hwnd, TRect far* rect)
  320. //
  321. #define HANDLE_OC_APPFRAMERECT(hwnd, lParam, fn) \
  322.     (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  323.  
  324. //
  325. // bool Cls_OnOcAppBorderSpaceReq(HWND hwnd, TRect far* rect)
  326. //
  327. #define HANDLE_OC_APPBORDERSPACEREQ(hwnd, lParam, fn) \
  328.     (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  329.  
  330. //
  331. // bool Cls_OnOcAppBorderSpaceSet(HWND hwnd, TRect far* rect)
  332. //
  333. #define HANDLE_OC_APPBORDERSPACESET(hwnd, lParam, fn) \
  334.     (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  335.  
  336. //
  337. // void Cls_OnOcAppStatusText(HWND hwnd, const char far* text)
  338. //
  339. #define HANDLE_OC_APPSTATUSTEXT(hwnd, lParam, fn) \
  340.     ((fn)((hwnd), (const char far*)(lParam)), 0L)
  341.  
  342. //
  343. // void Cls_OnOcAppRestoreUI(HWND hwnd)
  344. //
  345. #define HANDLE_OC_APPRESTOREUI(hwnd, lParam, fn) \
  346.     ((fn)((hwnd)), 0L)
  347.  
  348. //
  349. // void Cls_OnOcAppDialogHelp(HWND hwnd, TOcDialogHelp far* dialogHelp)
  350. //
  351. #define HANDLE_OC_APPDIALOGHELP(hwnd, lParam, fn) \
  352.     ((fn)((hwnd), (TOcDialogHelp far*)(lParam)), 0L)
  353.  
  354. //
  355. // TOcView far* Cls_OnOcAppCreateComp(HWND hwnd, TDocTemplate far* docTemplate)
  356. //
  357. #define HANDLE_OC_APPCREATECOMP(hwnd, lParam, fn) \
  358.     (LRESULT)(fn)((hwnd), (TDocTemplate far*)(lParam))
  359.  
  360. //
  361. // bool Cls_OnOcAppShutDown(HWND hwnd)
  362. //
  363. #define HANDLE_OC_APPSHUTDOWN(hwnd, lParam, fn) \
  364.     (LRESULT)(UINT)(fn)((hwnd))
  365.  
  366.  
  367. // -------------------------------------------------------------------------
  368. // View events
  369. // -------------------------------------------------------------------------
  370.  
  371. //
  372. // const char far* Cls_OnOcViewTitle(HWND hwnd)
  373. //
  374. #define HANDLE_OC_VIEWTITLE(hwnd, lParam, fn) \
  375.     (LRESULT)(fn)((hwnd))
  376.  
  377. //
  378. // void Cls_OnOcViewSetTitle(HWND hwnd, const char far* title)
  379. //
  380. #define HANDLE_OC_VIEWSETTITLE(hwnd, lParam, fn) \
  381.   ((fn)((hwnd), (const char far*)(lParam)), 0)
  382.  
  383. //
  384. // bool Cls_OnOcViewBorderSpaceReq(HWND hwnd, TRect far* rect)
  385. //
  386. #define HANDLE_OC_VIEWBORDERSPACEREQ(hwnd, lParam, fn) \
  387.     (LRESULT)(UINT)(fn)((hwnd), (TRECT far*)(lParam))
  388.  
  389. //
  390. // bool Cls_OnOcViewBorderSpaceSet(HWND hwnd, TRect far* rect)
  391. //
  392. #define HANDLE_OC_VIEWBORDERSPACESET(hwnd, lParam, fn) \
  393.     (LRESULT)(UINT)(fn)((hwnd), (TRECT far*)(lParam))
  394.  
  395. //
  396. // bool Cls_OnOcViewDrop(HWND hwnd, TOcDragDrop far* dragDropInfo)
  397. //
  398. #define HANDLE_OC_VIEWDROP(hwnd, lParam, fn) \
  399.     (LRESULT)(fn)((hwnd), (TOcDragDrop far*)(lParam))
  400.  
  401. //
  402. // bool Cls_OnOcViewDrag(HWND hwnd, TOcDragDrop far* dragDropInfo)
  403. //
  404. #define HANDLE_OC_VIEWDRAG(hwnd, lParam, fn) \
  405.   (LRESULT)(UINT)(fn)((hwnd), (TOcDragDrop far*)(lParam))
  406.  
  407. //
  408. // bool Cls_OnOcViewScroll(HWND hwnd, TOcScrollDir far* scrollDir)
  409. //
  410. #define HANDLE_OC_VIEWSCROLL(hwnd, lParam, fn) \
  411.   (LRESULT)(UINT)(fn)((hwnd), (TOcScrollDir far*)(lParam))
  412.  
  413. //
  414. // bool Cls_OnOcViewPartInvalid(HWND hwnd, TOcPartChangeInfo far* part)
  415. //
  416. #define HANDLE_OC_VIEWPARTINVALID(hwnd, lParam, fn) \
  417.   (LRESULT)(UINT)(fn)((hwnd), (TOcPartChangeInfo far*)(lParam))
  418.  
  419. //
  420. // bool Cls_OnOcViewPaint(HWND hwnd, TOcViewPaint far* paintInfo)
  421. //
  422. #define HANDLE_OC_VIEWPAINT(hwnd, lParam, fn) \
  423.   (LRESULT)(UINT)(fn)((hwnd), (TOcViewPaint far*)(lParam))
  424.  
  425. //
  426. // bool Cls_OnOcViewLoadPart(HWND hwnd, TOcSaveLoad far* loadInfo)
  427. //
  428. #define HANDLE_OC_VIEWLOADPART(hwnd, lParam, fn) \
  429.   (LRESULT)(UINT)(fn)((hwnd), (TOcSaveLoad far*)(lParam))
  430.  
  431. //
  432. // bool Cls_OnOcViewSavePart(HWND hwnd, TOcSaveLoad far* saveInfo)
  433. //
  434. #define HANDLE_OC_VIEWSAVEPART(hwnd, lParam, fn) \
  435.   (LRESULT)(UINT)(fn)((hwnd), (TOcSaveLoad far*)(lParam))
  436.  
  437. //
  438. // bool Cls_OnOcViewClose(HWND hwnd)
  439. //
  440. #define HANDLE_OC_VIEWCLOSE(hwnd, lParam, fn) \
  441.   (LRESULT)(UINT)(fn)((hwnd))
  442.  
  443. //
  444. // bool Cls_OnOcViewInsMenus(HWND hwnd, TOcMenuDescr far* menuDescr)
  445. //
  446. #define HANDLE_OC_VIEWINSMENUS(hwnd, lParam, fn) \
  447.   (LRESULT)(UINT)(fn)((hwnd), (TOcMenuDescr far*)(lParam))
  448.  
  449. //
  450. // bool Cls_OnOcViewShowTools(HWND hwnd, TOcToolBar far* toolBarInfo)
  451. //
  452. #define HANDLE_OC_VIEWWSHOWTOOLS(hwnd, lParam, fn) \
  453.   (LRESULT)(UINT)(fn)((hwnd), (TOcToolBar far*)(lParam))
  454.  
  455. //
  456. // bool Cls_OnOcViewGetPalette(HWND hwnd, LOGPALETTE far* far* paletteInfo)
  457. //
  458. #define HANDLE_OC_VIEWGETPALETTE(hwnd, lParam, fn) \
  459.   (LRESULT)(UINT)(fn)((hwnd), (LOGPALETTE far* far*)(lParam))
  460.  
  461. //
  462. // HANDLE Cls_OnOcViewClipData(HWND hwnd, TOcFormat far* formatInfo)
  463. //
  464. #define HANDLE_OC_VIEWCLIPDATA(hwnd, lParam, fn) \
  465.   (LRESULT)(fn)((hwnd), (TOcFormat far*)(lParam))
  466.  
  467. //
  468. // bool Cls_OnOcViewPartSize(HWND hwnd, TRect far* rect)
  469. //
  470. #define HANDLE_OC_VIEWPARTSIZE(hwnd, lParam, fn) \
  471.   (LRESULT)(UINT)(fn)((hwnd), (TRECT far*)(lParam))
  472.  
  473. //
  474. // bool Cls_OnOcViewOpenDoc(HWND hwnd, const char far* text)
  475. //
  476. #define HANDLE_OC_VIEWOPENDOC(hwnd, lParam, fn) \
  477.   (LRESULT)(UINT)(fn)((hwnd), (const char far*)(lParam))
  478.  
  479. //
  480. // bool Cls_OnOcViewAttachWindow(HWND hwnd)
  481. //
  482. #define HANDLE_OC_VIEWATTACHWINDOW(hwnd, lParam, fn) \
  483.   (LRESULT)(UINT)(fn)((hwnd))
  484.  
  485. //
  486. // bool Cls_OnOcViewSetScale(HWND hwnd, TOcScaleFactor* scaleInfo)
  487. //
  488. #define HANDLE_OC_VIEWSETSCALE(hwnd, lParam, fn) \
  489.   (LRESULT)(UINT)(fn)((hwnd), (TOcScaleFactor*)(lParam))
  490.  
  491. //
  492. // bool Cls_OnOcViewGetScale(HWND hwnd, TOcScaleFactor* scaleInfo)
  493. //
  494. #define HANDLE_OC_VIEWGETSCALE(hwnd, lParam, fn) \
  495.   (LRESULT)(UINT)(fn)((hwnd), (TOcScaleFactor*)(lParam))
  496.  
  497. //
  498. // bool Cls_OnOcViewGetSiteRect(HWND hwnd, TRect far* rect)
  499. //
  500. #define HANDLE_OC_VIEWGETSITERECT(hwnd, lParam, fn) \
  501.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  502.  
  503. //
  504. // bool Cls_OnOcViewSetSiteRect(HWND hwnd, TRect far* rect)
  505. //
  506. #define HANDLE_OC_VIEWSETSITERECT(hwnd, lParam, fn) \
  507.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  508.  
  509. //
  510. // bool Cls_OnOcViewGetItemName(HWND hwnd, TOcItemName far* ocItemName)
  511. //
  512. #define HANDLE_OC_VIEWGETITEMNAME(hwnd, lParam, fn) \
  513.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  514.  
  515. //
  516. // bool Cls_OnOcViewSetLink(HWND hwnd, TOcLinkView far* ocLinkView)
  517. //
  518. #define HANDLE_OC_VIEWSETLINK(hwnd, lParam, fn) \
  519.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  520.  
  521. //
  522. // bool Cls_OnOcViewBreakLink(HWND hwnd, TOcLinkView far* ocLinkView)
  523. //
  524. #define HANDLE_OC_VIEWBREAKLINK(hwnd, lParam, fn) \
  525.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  526.  
  527. //
  528. // bool Cls_OnOcViewPartActivate(HWND hwnd, TOcPart far* ocPart)
  529. //
  530. #define HANDLE_OC_VIEWPARTACTIVATE(hwnd, lParam, fn) \
  531.   (LRESULT)(UINT)(fn)((hwnd), (TRect far*)(lParam))
  532.  
  533. #endif  //  _OCFHLPR_H
  534.