?? afxctl.h
字號:
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
/////////////////////////////////////////////////////////////////////////////
// AFXCTL.H - MFC OLE Control support
#ifndef __AFXCTL_H__
#define __AFXCTL_H__
// make sure afxole.h is included first
#ifndef __AFXOLE_H__
#include <afxole.h>
#endif
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, off)
#endif
#ifndef _AFX_FULLTYPEINFO
#pragma component(mintypeinfo, on)
#endif
/////////////////////////////////////////////////////////////////////////////
// Classes declared in this file
//CWinApp
class COleControlModule; // Module housekeeping for an .OCX
class CFontHolder; // For manipulating font objects
class CPictureHolder; // For manipulating picture objects
//CWnd
class COleControl; // OLE Control
//CDialog
class COlePropertyPage; // OLE Property page
class CStockPropPage;
class CColorPropPage;
class CFontPropPage;
class CPicturePropPage;
class CPropExchange; // Abstract base for property exchange
//CAsyncMonikerFile
class CDataPathProperty; // Asynchronous properties for OLE Controls
class CCachedDataPathProperty; // Cached asynchronous properties for OLE Controls
/////////////////////////////////////////////////////////////////////////////
// Set structure packing
#ifdef _AFX_PACKING
#pragma pack(push, _AFX_PACKING)
#endif
/////////////////////////////////////////////////////////////////////////////
// MFC data definition for data exported from the runtime DLL
#undef AFX_DATA
#define AFX_DATA AFX_OLE_DATA
/////////////////////////////////////////////////////////////////////////////
// COleControlModule - base class for .OCX module
// This object is statically linked into the control.
class COleControlModule : public CWinApp
{
DECLARE_DYNAMIC(COleControlModule)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
};
/////////////////////////////////////////////////////////////////////////////
// Module state macro
#define AfxGetControlModuleContext AfxGetStaticModuleState
#define _afxModuleAddrThis AfxGetStaticModuleState()
/////////////////////////////////////////////////////////////////////////////
// Connection helper functions
BOOL AFXAPI AfxConnectionAdvise(LPUNKNOWN pUnkSrc, REFIID iid,
LPUNKNOWN pUnkSink, BOOL bRefCount, DWORD* pdwCookie);
BOOL AFXAPI AfxConnectionUnadvise(LPUNKNOWN pUnkSrc, REFIID iid,
LPUNKNOWN pUnkSink, BOOL bRefCount, DWORD dwCookie);
/////////////////////////////////////////////////////////////////////////////
// Event maps
enum AFX_EVENTMAP_FLAGS
{
afxEventCustom = 0,
afxEventStock = 1,
};
struct AFX_EVENTMAP_ENTRY
{
AFX_EVENTMAP_FLAGS flags;
DISPID dispid;
LPCTSTR pszName;
LPCSTR lpszParams;
};
struct AFX_EVENTMAP
{
const AFX_EVENTMAP* lpBaseEventMap;
const AFX_EVENTMAP_ENTRY* lpEntries;
DWORD* lpStockEventMask;
};
#define DECLARE_EVENT_MAP() \
private: \
static const AFX_DATA AFX_EVENTMAP_ENTRY _eventEntries[]; \
static DWORD _dwStockEventMask; \
protected: \
static const AFX_DATA AFX_EVENTMAP eventMap; \
virtual const AFX_EVENTMAP* GetEventMap() const;
#define BEGIN_EVENT_MAP(theClass, baseClass) \
const AFX_EVENTMAP* theClass::GetEventMap() const \
{ return &eventMap; } \
const AFX_DATADEF AFX_EVENTMAP theClass::eventMap = \
{ &(baseClass::eventMap), theClass::_eventEntries, \
&theClass::_dwStockEventMask }; \
AFX_COMDAT DWORD theClass::_dwStockEventMask = (DWORD)-1; \
AFX_COMDAT const AFX_DATADEF AFX_EVENTMAP_ENTRY theClass::_eventEntries[] = \
{
#define END_EVENT_MAP() \
{ afxEventCustom, DISPID_UNKNOWN, NULL, NULL }, \
};
#define EVENT_CUSTOM(pszName, pfnFire, vtsParams) \
{ afxEventCustom, DISPID_UNKNOWN, _T(pszName), vtsParams },
#define EVENT_CUSTOM_ID(pszName, dispid, pfnFire, vtsParams) \
{ afxEventCustom, dispid, _T(pszName), vtsParams },
#define EVENT_PARAM(vtsParams) (BYTE*)(vtsParams)
/////////////////////////////////////////////////////////////////////////////
// Stock events
#define EVENT_STOCK_CLICK() \
{ afxEventStock, DISPID_CLICK, _T("Click"), VTS_NONE },
#define EVENT_STOCK_DBLCLICK() \
{ afxEventStock, DISPID_DBLCLICK, _T("DblClick"), VTS_NONE },
#define EVENT_STOCK_KEYDOWN() \
{ afxEventStock, DISPID_KEYDOWN, _T("KeyDown"), VTS_PI2 VTS_I2 },
#define EVENT_STOCK_KEYPRESS() \
{ afxEventStock, DISPID_KEYPRESS, _T("KeyPress"), VTS_PI2 },
#define EVENT_STOCK_KEYUP() \
{ afxEventStock, DISPID_KEYUP, _T("KeyUp"), VTS_PI2 VTS_I2 },
#define EVENT_STOCK_MOUSEDOWN() \
{ afxEventStock, DISPID_MOUSEDOWN, _T("MouseDown"), \
VTS_I2 VTS_I2 VTS_XPOS_PIXELS VTS_YPOS_PIXELS },
#define EVENT_STOCK_MOUSEMOVE() \
{ afxEventStock, DISPID_MOUSEMOVE, _T("MouseMove"), \
VTS_I2 VTS_I2 VTS_XPOS_PIXELS VTS_YPOS_PIXELS },
#define EVENT_STOCK_MOUSEUP() \
{ afxEventStock, DISPID_MOUSEUP, _T("MouseUp"), \
VTS_I2 VTS_I2 VTS_XPOS_PIXELS VTS_YPOS_PIXELS },
#define EVENT_STOCK_ERROREVENT() \
{ afxEventStock, DISPID_ERROREVENT, _T("Error"), \
VTS_I2 VTS_PBSTR VTS_SCODE VTS_BSTR VTS_BSTR VTS_I4 VTS_PBOOL },
#define EVENT_STOCK_READYSTATECHANGE() \
{ afxEventStock, DISPID_READYSTATECHANGE, _T("ReadyStateChange"), \
VTS_I4 },
// Shift state values for mouse and keyboard events
#define SHIFT_MASK 0x01
#define CTRL_MASK 0x02
#define ALT_MASK 0x04
// Button values for mouse events
#define LEFT_BUTTON 0x01
#define RIGHT_BUTTON 0x02
#define MIDDLE_BUTTON 0x04
/////////////////////////////////////////////////////////////////////////////
// Stock properties
#define DISP_PROPERTY_STOCK(theClass, szExternalName, dispid, pfnGet, pfnSet, vtPropType) \
{ _T(szExternalName), dispid, NULL, vtPropType, \
(AFX_PMSG)(void (theClass::*)(void))&pfnGet, \
(AFX_PMSG)(void (theClass::*)(void))&pfnSet, 0, afxDispStock }, \
#define DISP_STOCKPROP_APPEARANCE() \
DISP_PROPERTY_STOCK(COleControl, "Appearance", DISPID_APPEARANCE, \
COleControl::GetAppearance, COleControl::SetAppearance, VT_I2)
#define DISP_STOCKPROP_BACKCOLOR() \
DISP_PROPERTY_STOCK(COleControl, "BackColor", DISPID_BACKCOLOR, \
COleControl::GetBackColor, COleControl::SetBackColor, VT_COLOR)
#define DISP_STOCKPROP_BORDERSTYLE() \
DISP_PROPERTY_STOCK(COleControl, "BorderStyle", DISPID_BORDERSTYLE, \
COleControl::GetBorderStyle, COleControl::SetBorderStyle, VT_I2)
#define DISP_STOCKPROP_CAPTION() \
DISP_PROPERTY_STOCK(COleControl, "Caption", DISPID_CAPTION, \
COleControl::GetText, COleControl::SetText, VT_BSTR)
#define DISP_STOCKPROP_ENABLED() \
DISP_PROPERTY_STOCK(COleControl, "Enabled", DISPID_ENABLED, \
COleControl::GetEnabled, COleControl::SetEnabled, VT_BOOL)
#define DISP_STOCKPROP_FONT() \
DISP_PROPERTY_STOCK(COleControl, "Font", DISPID_FONT, \
COleControl::GetFont, COleControl::SetFont, VT_FONT)
#define DISP_STOCKPROP_FORECOLOR() \
DISP_PROPERTY_STOCK(COleControl, "ForeColor", DISPID_FORECOLOR, \
COleControl::GetForeColor, COleControl::SetForeColor, VT_COLOR)
#define DISP_STOCKPROP_HWND() \
DISP_PROPERTY_STOCK(COleControl, "hWnd", DISPID_HWND, \
COleControl::GetHwnd, SetNotSupported, VT_HANDLE)
#define DISP_STOCKPROP_TEXT() \
DISP_PROPERTY_STOCK(COleControl, "Text", DISPID_TEXT, \
COleControl::GetText, COleControl::SetText, VT_BSTR)
#define DISP_STOCKPROP_READYSTATE() \
DISP_PROPERTY_STOCK(COleControl, "ReadyState", DISPID_READYSTATE, \
COleControl::GetReadyState, SetNotSupported, VT_I4)
/////////////////////////////////////////////////////////////////////////////
// Stock methods
#define DISP_FUNCTION_STOCK(theClass, szExternalName, dispid, pfnMember, vtRetVal, vtsParams) \
{ _T(szExternalName), dispid, vtsParams, vtRetVal, \
(AFX_PMSG)(void (theClass::*)(void))&pfnMember, (AFX_PMSG)0, 0, \
afxDispStock }, \
#define DISP_STOCKFUNC_REFRESH() \
DISP_FUNCTION_STOCK(COleControl, "Refresh", DISPID_REFRESH, \
COleControl::Refresh, VT_EMPTY, VTS_NONE)
#define DISP_STOCKFUNC_DOCLICK() \
DISP_FUNCTION_STOCK(COleControl, "DoClick", DISPID_DOCLICK, \
COleControl::DoClick, VT_EMPTY, VTS_NONE)
/////////////////////////////////////////////////////////////////////////////
// Macros for object factory and class ID
#define BEGIN_OLEFACTORY(class_name) \
protected: \
class class_name##Factory : public COleObjectFactoryEx \
{ \
public: \
class_name##Factory(REFCLSID clsid, CRuntimeClass* pRuntimeClass, \
BOOL bMultiInstance, LPCTSTR lpszProgID) : \
COleObjectFactoryEx(clsid, pRuntimeClass, bMultiInstance, \
lpszProgID) {} \
virtual BOOL UpdateRegistry(BOOL);
#define END_OLEFACTORY(class_name) \
}; \
friend class class_name##Factory; \
static AFX_DATA class_name##Factory factory; \
public: \
static AFX_DATA const GUID guid; \
virtual HRESULT GetClassID(LPCLSID pclsid);
#define DECLARE_OLECREATE_EX(class_name) \
BEGIN_OLEFACTORY(class_name) \
END_OLEFACTORY(class_name)
#define IMPLEMENT_OLECREATE_EX(class_name, external_name, \
l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
const TCHAR _szProgID_##class_name[] = _T(external_name); \
AFX_DATADEF class_name::class_name##Factory class_name::factory( \
class_name::guid, RUNTIME_CLASS(class_name), FALSE, \
_szProgID_##class_name); \
const AFX_DATADEF GUID class_name::guid = \
{ l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; \
HRESULT class_name::GetClassID(LPCLSID pclsid) \
{ *pclsid = guid; return NOERROR; }
/////////////////////////////////////////////////////////////////////////////
// Macros for type name and misc status
#define DECLARE_OLECTLTYPE(class_name) \
virtual UINT GetUserTypeNameID(); \
virtual DWORD GetMiscStatus();
#define IMPLEMENT_OLECTLTYPE(class_name, idsUserTypeName, dwOleMisc) \
UINT class_name::GetUserTypeNameID() { return idsUserTypeName; } \
DWORD class_name::GetMiscStatus() { return dwOleMisc; }
/////////////////////////////////////////////////////////////////////////////
// Macros for property page IDs
#define DECLARE_PROPPAGEIDS(class_name) \
protected: \
virtual LPCLSID GetPropPageIDs(ULONG& cPropPages);
#define BEGIN_PROPPAGEIDS(class_name, count) \
static CLSID _rgPropPageIDs_##class_name[count]; \
AFX_COMDAT ULONG _cPropPages_##class_name = (ULONG)-1; \
LPCLSID class_name::GetPropPageIDs(ULONG& cPropPages) { \
if (_cPropPages_##class_name == (ULONG)-1) { \
_cPropPages_##class_name = count; \
LPCLSID pIDs = _rgPropPageIDs_##class_name; \
ULONG iPageMax = count; \
ULONG iPage = 0;
#define PROPPAGEID(clsid) \
ASSERT(iPage < iPageMax); \
if (iPage < iPageMax) \
pIDs[iPage++] = clsid;
#define END_PROPPAGEIDS(class_name) \
ASSERT(iPage == iPageMax); \
} \
cPropPages = _cPropPages_##class_name; \
return _rgPropPageIDs_##class_name; }
/////////////////////////////////////////////////////////////////////////////
// CFontHolder - helper class for dealing with font objects
class CFontHolder
{
// Constructors
public:
CFontHolder(LPPROPERTYNOTIFYSINK pNotify);
// Attributes
LPFONT m_pFont;
// Operations
void InitializeFont(
const FONTDESC* pFontDesc = NULL,
LPDISPATCH pFontDispAmbient = NULL);
void SetFont(LPFONT pNewFont);
void ReleaseFont();
HFONT GetFontHandle();
HFONT GetFontHandle(long cyLogical, long cyHimetric);
CFont* Select(CDC* pDC, long cyLogical, long cyHimetric);
BOOL GetDisplayString(CString& strValue);
LPFONTDISP GetFontDispatch();
void QueryTextMetrics(LPTEXTMETRIC lptm);
// Implementation
public:
~CFontHolder();
void SetFontNotifySink(LPPROPERTYNOTIFYSINK pNotify);
protected:
DWORD m_dwConnectCookie;
LPPROPERTYNOTIFYSINK m_pNotify;
};
/////////////////////////////////////////////////////////////////////////////
// CPictureHolder - helper class for dealing with picture objects
class CPictureHolder
{
// Constructors
public:
CPictureHolder();
// Attributes
LPPICTURE m_pPict;
// Operations
BOOL CreateEmpty();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -