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

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * ENUMRECT.H
  3.  * C/C++ Enumerator Demonstrtion Chapter 2
  4.  *
  5.  * Definitions, classes, and prototypes
  6.  *
  7.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Microsoft
  10.  * Internet  :  kraigb@microsoft.com
  11.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  12.  */
  13. #ifndef _ENUMRECT_H_
  14. #define _ENUMRECT_H_
  15. #define CHAPTER2
  16. #include <inole.h>
  17. #ifndef WIN32
  18. #include <malloc.h>
  19. #endif
  20. #include "ienum.h"  //Interface definitions
  21. //Menu Resource ID and Commands
  22. #define IDR_MENU                    1
  23. #define IDM_ENUMCREATEC             100
  24. #define IDM_ENUMCREATECPP           101
  25. #define IDM_ENUMRELEASE             102
  26. #define IDM_ENUMRUNTHROUGH          103
  27. #define IDM_ENUMEVERYTHIRD          104
  28. #define IDM_ENUMRESET               105
  29. #define IDM_ENUMCLONE               106
  30. #define IDM_ENUMEXIT                107
  31. //Number of rects that objects with IEnumRECT support (for demo)
  32. #define CRECTS      15
  33. //Skip the C++ stuff when this file is included from ENUMC.C
  34. #ifdef __cplusplus
  35. //ENUMRECT.CPP
  36. LRESULT APIENTRY EnumWndProc(HWND, UINT, WPARAM, LPARAM);
  37. class CApp
  38.     {
  39.     friend LRESULT APIENTRY EnumWndProc(HWND, UINT, WPARAM, LPARAM);
  40.     protected:
  41.         HINSTANCE       m_hInst;            //WinMain parameters
  42.         HINSTANCE       m_hInstPrev;
  43.         UINT            m_nCmdShow;
  44.         HWND            m_hWnd;             //Main window handle
  45.         PENUMRECT       m_pIEnumRect;       //Enumerator object
  46.     public:
  47.         CApp(HINSTANCE, HINSTANCE, UINT);
  48.         ~CApp(void);
  49.         BOOL Init(void);
  50.         void Message(LPTSTR);
  51.     };
  52. typedef CApp *PAPP;
  53. #define CBWNDEXTRA          sizeof(PAPP)
  54. #define ENUMWL_STRUCTURE    0
  55. //ENUMCPP.CPP
  56. /*
  57.  * The class definition for an object that singly implements
  58.  * IEnumRECT in C++.
  59.  */
  60. class CEnumRect : public IEnumRECT
  61.     {
  62.     private:
  63.         DWORD           m_cRef;         //Reference count
  64.         DWORD           m_iCur;         //Current enum position
  65.         RECT            m_rgrc[CRECTS]; //RECTS we enumerate
  66.     public:
  67.         CEnumRect(void);
  68.         ~CEnumRect(void);
  69.         STDMETHODIMP         QueryInterface(REFIID, PPVOID);
  70.         STDMETHODIMP_(ULONG) AddRef(void);
  71.         STDMETHODIMP_(ULONG) Release(void);
  72.         //IEnumRECT members
  73.         STDMETHODIMP Next(ULONG, LPRECT, ULONG *);
  74.         STDMETHODIMP Skip(ULONG);
  75.         STDMETHODIMP Reset(void);
  76.         STDMETHODIMP Clone(PENUMRECT *);
  77.     };
  78. typedef CEnumRect *PCEnumRect;
  79. //Function that creates one of these objects
  80. BOOL CreateRECTEnumeratorCPP(PENUMRECT *);
  81. //End of __cplusplus
  82. #else
  83. //Start of non __cplusplus definitions
  84. //ENUMC.C
  85. /*
  86.  * The structure definition for an object that singly implements
  87.  * IEnumRECT in C.  We make a class by reusing the elements of
  88.  * the IEnumRECT structure thereby inheriting from it, albeit
  89.  * manually.
  90.  */
  91. typedef struct tagRECTENUMERATOR
  92.     {
  93.     IEnumRECTVtbl  *lpVtbl;
  94.     DWORD           m_cRef;         //Reference count
  95.     DWORD           m_iCur;         //Current enum position
  96.     RECT            m_rgrc[CRECTS]; //RECTS we enumerate
  97.     } RECTENUMERATOR, *PRECTENUMERATOR;
  98. /*
  99.  * In C we have to separately declare member functions with
  100.  * globally unique names, so prefixing with the class name
  101.  * should remove any conflicts.
  102.  */
  103. PRECTENUMERATOR RECTENUM_Constructor(void);
  104. void            RECTENUM_Destructor(PRECTENUMERATOR);
  105. STDMETHODIMP    RECTENUM_QueryInterface(PENUMRECT, REFIID, PPVOID);
  106. STDMETHODIMP_(ULONG) RECTENUM_AddRef(PENUMRECT);
  107. STDMETHODIMP_(ULONG) RECTENUM_Release(PENUMRECT);
  108. STDMETHODIMP    RECTENUM_Next(PENUMRECT, DWORD, LPRECT, LPDWORD);
  109. STDMETHODIMP    RECTENUM_Skip(PENUMRECT, DWORD);
  110. STDMETHODIMP    RECTENUM_Reset(PENUMRECT);
  111. STDMETHODIMP    RECTENUM_Clone(PENUMRECT, PENUMRECT *);
  112. //End of __cplusplus conditions
  113. #endif
  114. #ifdef __cplusplus
  115. extern "C"
  116.     {
  117. #endif
  118.     //Function that creates one of these objects
  119.     BOOL CreateRECTEnumeratorC(PENUMRECT *);
  120. #ifdef __cplusplus
  121.     }
  122. #endif
  123. #endif //_ENUMRECT_H_