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

Windows编程

开发平台:

Visual C++

  1. //=--------------------------------------------------------------------------=
  2. // CardCtl.H
  3. //=--------------------------------------------------------------------------=
  4. // Copyright 1995 - 1997 Microsoft Corporation.  All Rights Reserved.
  5. //
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  7. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  8. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  9. // PARTICULAR PURPOSE.
  10. //=--------------------------------------------------------------------------=
  11. //
  12. // class declaration for the Card control.
  13. //
  14. #ifndef _CARDCONTROL_H_
  15. #include "IPServer.H"
  16. #include "CtrlObj.H"
  17. #include "CardInterfaces.h"
  18. #include "Dispids.H"
  19. //=--------------------------------------------------------------------------=
  20. // CCARDControl
  21. //=--------------------------------------------------------------------------=
  22. // our control.
  23. //
  24. class CCardControl :       public COleControl, 
  25.                            public ICard, 
  26.       public ISupportErrorInfo {
  27.   public:
  28.     // IUnknown methods
  29.     //
  30.     DECLARE_STANDARD_UNKNOWN();
  31.     // IDispatch methods
  32.     //
  33.     DECLARE_STANDARD_DISPATCH();
  34.     // ISupportErrorInfo methods
  35.     //
  36.     DECLARE_STANDARD_SUPPORTERRORINFO();
  37.     // ICARD methods
  38.     //
  39.     // TODO: copy over the method declarations from CARDInterfaces.H
  40.     //       don't forget to remove the PURE from them.
  41.     //
  42.     STDMETHOD(get_Number)(THIS_ enumCardNumber * number) ;
  43.     STDMETHOD(put_Number)(THIS_ enumCardNumber number) ;
  44.     STDMETHOD(get_Suite)(THIS_ enumCardSuite * suite) ;
  45.     STDMETHOD(put_Suite)(THIS_ enumCardSuite suite) ;
  46.     STDMETHOD(get_Invert)(THIS_ VARIANT_BOOL * invert) ;
  47.     STDMETHOD(put_Invert)(THIS_ VARIANT_BOOL invert) ;
  48.     STDMETHOD(get_CardAlignment)(THIS_ enumCardAlignment * align) ;
  49.     STDMETHOD(put_CardAlignment)(THIS_ enumCardAlignment align) ;
  50.     STDMETHOD_(void, AboutBox)(THIS) ;
  51.     // OLE Control stuff follows:
  52.     //
  53.     CCardControl(IUnknown *pUnkOuter);
  54.     virtual ~CCardControl();
  55.     // static creation function.  all controls must have one of these!
  56.     //
  57.     static IUnknown *Create(IUnknown *);
  58.   private:
  59.     // overridables that the control must implement.
  60.     //
  61.     STDMETHOD(LoadBinaryState)(IStream *pStream);
  62.     STDMETHOD(SaveBinaryState)(IStream *pStream);
  63.     STDMETHOD(LoadTextState)(IPropertyBag *pPropertyBag, IErrorLog *pErrorLog);
  64.     STDMETHOD(SaveTextState)(IPropertyBag *pPropertyBag, BOOL fWriteDefault);
  65.     STDMETHOD(OnDraw)(DWORD dvaspect, HDC hdcDraw, LPCRECTL prcBounds, LPCRECTL prcWBounds, HDC hicTargetDev, BOOL fOptimize);
  66.     virtual LRESULT WindowProc( UINT msg, WPARAM wParam, LPARAM lParam);
  67.     virtual BOOL    RegisterClassData(void);
  68.     virtual HRESULT InternalQueryInterface(REFIID, void **);
  69.     // private state information.
  70.     //
  71. HRESULT DrawMe( HDC hdcMem );
  72. void DrawBack(void);
  73. // Actual properties
  74. enumCardNumber m_number;
  75. #define DefaultNumber CardAce
  76. void ValidateNumber() 
  77. {
  78. if( m_number < CardAce ) m_number = CardAce;
  79. if( m_number > CardJoker ) m_number = CardJoker;
  80. }
  81. enumCardSuite m_suite;
  82. #define DefaultSuite CardBlank
  83. void ValidateSuite()
  84. {
  85. if( m_suite > CardDiamond ) m_suite = CardDiamond;
  86. }
  87. VARIANT_BOOL m_invert;
  88. enum { DefaultInvert = VARIANT_FALSE };
  89. enumCardAlignment   m_cardalignment;
  90. #define DefaultCardAlignment CardCenter
  91. void ValidateCardAlignment()
  92. {
  93. if( m_cardalignment < CardTopLeft ) m_cardalignment = CardTopLeft;
  94. if( m_cardalignment > CardStretch ) m_cardalignment = CardStretch;
  95. }
  96. HBRUSH BackBrush;
  97. };
  98. // TODO: if you have an array of verbs, then add an extern here with the name
  99. //       of it, so that you can include it in the DEFINE_CONTROLOBJECT.
  100. //       ie.  extern VERBINFO m_CARDCustomVerbs [];
  101. //
  102. extern const GUID    *rgCardPropPages [];
  103. DEFINE_WINDOWLESSCONTROLOBJECT(Card,
  104.     &CLSID_Card,
  105.     "ActiveXCardControl",
  106.     CCardControl::Create,
  107.     1,
  108.     &IID_ICard,
  109.     "CARD.HLP",
  110.     &DIID_DCardEvents,
  111.     OLEMISC_SETCLIENTSITEFIRST|OLEMISC_ACTIVATEWHENVISIBLE|
  112. OLEMISC_RECOMPOSEONRESIZE|OLEMISC_CANTLINKINSIDE|OLEMISC_INSIDEOUT,
  113. FALSE,
  114. FALSE,
  115.     RESID_TOOLBOX_BITMAP,
  116.     "CARDWndClass",
  117.     1,
  118.     rgCardPropPages,
  119.     0,
  120.     NULL);
  121. #define _CARDCONTROL_H_
  122. #endif // _CARDCONTROL_H_