152 lines
5 KiB
C++
152 lines
5 KiB
C++
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1993.
|
|
//
|
|
// File: inplace.h
|
|
//
|
|
// Contents: Private API's and classes for the inplace OLE API's
|
|
//
|
|
// Classes: CFrameFilter
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: dd-mmm-yy Author Comment
|
|
// 24-Jan-94 alexgo first pass converting to Cairo style
|
|
// memory allocation
|
|
// 07-Dec-93 alexgo removed inlining
|
|
// 01-Dec-93 alexgo 32bit port
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#if !defined( _INPLACE_H_ )
|
|
#define _INPLACE_H_
|
|
|
|
// This ACCEL structure and the related constants definitions come with WIN32.
|
|
// Win31 also uses the same stuff internally but it's not exposed in the
|
|
// header files.
|
|
|
|
#ifndef FVIRTKEY
|
|
|
|
#define FVIRTKEY TRUE // Assumed to be == TRUE
|
|
#define FLASTKEY 0x80 // Indicates last key in the table
|
|
#define FNOINVERT 0x02
|
|
#define FSHIFT 0x04
|
|
#define FCONTROL 0x08
|
|
#define FALT 0x10
|
|
|
|
#pragma pack(1)
|
|
typedef struct tagACCEL { // Accelerator Table structure
|
|
BYTE fVirt;
|
|
WORD key;
|
|
WORD cmd;
|
|
} ACCEL, FAR* LPACCEL;
|
|
#pragma pack()
|
|
|
|
#endif // FVIRTKEY
|
|
|
|
// private structures
|
|
|
|
typedef struct tagOLEMENUITEM
|
|
{
|
|
UINT item; // index or hwnd
|
|
WORD fwPopup;
|
|
BOOL fObjectMenu;
|
|
} OLEMENUITEM;
|
|
typedef OLEMENUITEM FAR* LPOLEMENUITEM;
|
|
|
|
typedef struct tagOLEMENU
|
|
{
|
|
WORD wSignature;
|
|
DWORD hwndFrame; // Really a hwnd
|
|
DWORD hmenuCombined; // Really a hmenu
|
|
OLEMENUGROUPWIDTHS MenuWidths;
|
|
LONG lMenuCnt;
|
|
OLEMENUITEM menuitem[1];
|
|
} OLEMENU;
|
|
typedef OLEMENU FAR* LPOLEMENU;
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CFrameFilter
|
|
//
|
|
// Purpose: Gets attached to an apps window so we can store various
|
|
// bits of relevant info
|
|
//
|
|
// Interface:
|
|
//
|
|
// History: dd-mmm-yy Author Comment
|
|
// 01-Dec-93 alexgo 32bit port
|
|
//
|
|
// Notes: CSafeRefCount inherits CPrivAlloc
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class FAR CFrameFilter : public CSafeRefCount
|
|
{
|
|
public:
|
|
static HRESULT Create(LPOLEMENU lpOleMenu, HMENU hmenuCombined,
|
|
HWND hwndFrame, HWND hwndActiveObj,
|
|
LPOLEINPLACEFRAME lpFrame,
|
|
LPOLEINPLACEACTIVEOBJECT lpActiveObj);
|
|
|
|
CFrameFilter (HWND hwndFrame, HWND hwndActiveObj);
|
|
~CFrameFilter(void);
|
|
|
|
LRESULT OnSysCommand(WPARAM uParam, LPARAM lParam);
|
|
void OnEnterMenuMode(void);
|
|
void OnExitMenuMode(void);
|
|
void OnEnterAltTabMode(void);
|
|
void OnExitAltTabMode(void);
|
|
LRESULT OnMessage(UINT msg, WPARAM uParam, LPARAM lParam);
|
|
void IsObjectMenu (UINT uMenuItem, UINT fwMenu);
|
|
BOOL IsMenuCollision(WPARAM uParam, LPARAM lParam);
|
|
BOOL DoContextSensitiveHelp();
|
|
STDMETHOD(GetActiveObject) (
|
|
LPOLEINPLACEACTIVEOBJECT *lplpActiveObj);
|
|
|
|
void RemoveWndProc();
|
|
|
|
private:
|
|
HWND m_hwndObject;
|
|
HWND m_hwndFrame;
|
|
LPOLEINPLACEFRAME m_lpFrame;
|
|
LPOLEINPLACEACTIVEOBJECT m_lpObject;
|
|
WNDPROC m_lpfnPrevWndProc;
|
|
BOOL m_fObjectMenu;
|
|
BOOL m_fCurItemPopup;
|
|
BOOL m_fInMenuMode;
|
|
BOOL m_fDiscardWmCommand;
|
|
BOOL m_fGotMenuCloseEvent;
|
|
BOOL m_fRemovedWndProc;
|
|
UINT m_cmdId;
|
|
UINT_PTR m_uCurItemID;
|
|
LPOLEMENU m_lpOleMenu;
|
|
HMENU m_hmenuCombined;
|
|
HWND m_hwndFocusOnEnter;
|
|
int m_cAltTab;
|
|
#ifdef _CHICAGO_
|
|
BOOL m_fInNCACTIVATE;
|
|
#endif
|
|
};
|
|
|
|
typedef CFrameFilter FAR* PCFRAMEFILTER;
|
|
|
|
|
|
STDAPI_(LRESULT) FrameWndFilterProc (HWND hwnd, UINT msg, WPARAM uParam,
|
|
LPARAM lParam);
|
|
STDAPI_(LRESULT) MessageFilterProc(int nCode, WPARAM wParam,
|
|
LPARAM lParam);
|
|
|
|
BOOL IsMDIAccelerator(LPMSG lpMsg, WORD FAR* cmd);
|
|
|
|
inline PCFRAMEFILTER wGetFrameFilterPtr(HWND hwndFrame);
|
|
|
|
LPOLEMENU wGetOleMenuPtr(HOLEMENU holemenu);
|
|
inline void wReleaseOleMenuPtr(HOLEMENU holemenu);
|
|
|
|
#endif // _INPLACE_H
|
|
|