00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 #ifndef INC_GRE_GROUP_H
00131 #define INC_GRE_GROUP_H
00132
00133 #ifndef INC_GRE_VIEWABLE_H
00134 #include <gre/viewable.h>
00135 #endif
00136
00137 #ifndef INC_GRE_LAYER_H
00138 #include <gre/layer.h>
00139 #endif
00140
00141 #ifndef INC_MI32_MATTE_H
00142 #include <mi32/matte.h>
00143 #endif
00144
00145 #ifndef INC_MI32_REGION2D_H
00146 #include <mi32/region2d.h>
00147 #endif
00148
00149 class GEOCAT_DIALOG;
00150
00151
00152
00153
00154 #define GROUPFLAG_None 0x00000000
00155 #define GROUPFLAG_Ignore 0x00000001
00156 #define GROUPFLAG_NoFixAspectLL 0x00000002
00157 #define GROUPFLAG_SingleLayer 0x00000004
00158 #define GROUPFLAG_Clip 0x00000008
00159 #define GROUPFLAG_OrientMatchRasterOnly 0x00000010
00160 #define GROUPFLAG_OrientMatchRasterOther 0x00000020
00161 #define GROUPFLAG_OrientMatchLayer 0x00000040
00162 #define GROUPFLAG_3D 0x00000200
00163 #define GROUPFLAG_ShowLatLonCoords 0x00001000
00164 #define GROUPFLAG_NoLockZoom 0x00004000
00165 #define GROUPFLAG_ShowLayerList 0x00008000
00166 #define GROUPFLAG_NoClipToAttachedGroup 0x00010000
00167 #define GROUPFLAG_CombineLayersInLegend 0x00020000
00168 #define GROUPFLAG_TemplateSaveLayersAsIs 0x00040000
00169 #define GROUPFLAG_NoClipToRectOnly 0x00080000
00170 #define GROUPFLAG_NoLegacyRectExtents 0x00100000
00171
00172 #define GROUPFLAG_OrientMask 0x00000070
00173 #define GROUPFLAG_NoNotifyMask GROUPFLAG_TemplateSaveLayersAsIs
00174 #define GROUPFLAG_Mask_NoRedraw (GROUPFLAG_ShowLatLonCoords | GROUPFLAG_NoLockZoom | GROUPFLAG_ShowLayerList | GROUPFLAG_CombineLayersInLegend | GROUPFLAG_TemplateSaveLayersAsIs)
00175
00176 #define ATTACHMENT_None 0
00177 #define ATTACHMENT_Left 1
00178 #define ATTACHMENT_Bottom 1
00179 #define ATTACHMENT_Center 2
00180 #define ATTACHMENT_Right 3
00181 #define ATTACHMENT_Top 3
00182 #define ATTACHMENT_Geographic 4
00183
00184 #define ATTACHREF_None 0
00185 #define ATTACHREF_Group 1
00186 #define ATTACHREF_Page 2
00187 #define ATTACHREF_Margin 3
00188
00189 struct MDISPGROUPPOSN {
00190 GRE_GROUP *refgroup;
00191 UINT8 AttachRefType;
00192 UINT8 AttachmentThis;
00193 UINT8 AttachmentRef;
00194 UINT8 PosnSet;
00195 double offset;
00196 mutable MIUNICODE refgroupname[GRE_GROUP_NAMELEN];
00197 };
00198
00199 class GRE_GROUP : public GRE_VIEWABLE, public SERIALIZABLE {
00200
00201 public:
00202
00203
00204 enum CREATEFLAGS {
00205 CREATEFLAG_None = 0x0000,
00206 CREATEFLAG_NoCallCreateCB = 0x0001,
00207 CREATEFLAG_Temporary = 0x0002,
00208 CREATEFLAG_3D = 0x0004,
00209 CREATEFLAG_NoAutoMatch = 0x0008,
00210 CREATEFLAG_NoSetActive = 0x0010,
00211 CREATEFLAG_DeferCreate = 0x0020
00212 };
00213
00214 enum ORIENTATION_BASE {
00215 ORIENTATION_BASE_Projection = 0,
00216 ORIENTATION_BASE_North = 1
00217 };
00218
00219 enum LABEL_MANAGEMENT_MODE {
00220 LABEL_MANAGEMENT_MODE_RenderWithLayer = 0,
00221 LABEL_MANAGEMENT_MODE_RenderLast
00222 };
00223
00224 #ifdef X_NATIVE
00225 class OBJMGRFORM {
00226 public:
00227
00228
00229 OBJMGRFORM (
00230 GRE_GROUP *group
00231 );
00232
00233
00234 ~OBJMGRFORM (
00235 );
00236
00237
00238 Widget Create (
00239 );
00240
00241 Widget GetForm (
00242 ) const { return (m_form); }
00243
00244 void HideLayers (
00245 );
00246
00247
00248 short SetObjMgrPos (
00249 short pindex = -2
00250 );
00251
00252 void ShowLayers (
00253 );
00254
00255 private:
00256 #ifndef GENERATING_DOXYGEN_OUTPUT
00257
00258 GRE_GROUP *m_group;
00259 Widget m_form;
00260 Widget m_ActiveTB;
00261 Widget m_ShowLayersTB;
00262 Widget m_VisibleIcon[GRE_MAXVIEWS];
00263 Widget m_GroupNameP;
00264 MIUNICODE m_GroupNameStr[64];
00265
00266 static void CB_CmdGroupControls (Widget, GRE_GROUP *group, void*);
00267 static void CB_CmdGroupDelete (Widget, GRE_GROUP *group, void*);
00268 static void CB_CmdGroupDeleteActiveLayer (Widget, GRE_GROUP *group, void*);
00269 static void CB_CmdGroupDeleteAllLayers (Widget, GRE_GROUP *group, void*);
00270 static void CB_CmdGroupViewpoint (Widget, GRE_GROUP *group, void*);
00271 static void CB_CmdLayerAddAny (Widget, GRE_GROUP *group, void*);
00272 static void CB_CmdLayerAdd (Widget, void *vlayertype, void*);
00273 static void CB_CmdLayerControls (Widget, GRE_GROUP *group, void*);
00274 static void CB_CmdLayerOrder (Widget, void *voption, void*);
00275 static void CB_EditGroupName (MxPromptCallbackStruct*, void *vgroup);
00276 static void CB_NotifyGreObject (const GRE_CALLBACK_MSG *msg, void *vpObjMgrForm);
00277 static void CB_NotifyGreView (const GRE_CALLBACK_MSG *msg, void*);
00278 static void CB_ToggleActive (Widget, void *vgroup, XmToggleButtonCallbackStruct*);
00279 static void CB_ToggleShowLayers (Widget, void *vpObjMgrForm, XmToggleButtonCallbackStruct*);
00280 static void CB_ToggleVisibleInViewNum (Widget, void *vViewNum, XmToggleButtonCallbackStruct*);
00281
00282 void DestroyForm ();
00283 void OnNotifyGreObject (const GRE_CALLBACK_MSG& msg);
00284
00285 OBJMGRFORM (const OBJMGRFORM&);
00286 OBJMGRFORM& operator= (const OBJMGRFORM&);
00287
00288 #endif
00289 };
00290 #endif
00291
00292 GRE_LAYER *firstlayer;
00293 GRE_LAYER *lastlayer;
00294 GRE_LAYER *activelayer;
00295 GRE_LAYER *matchedlayer;
00296 UINT8 RotBase;
00297 double AspectX;
00298 double AspectY;
00299 double RotAngle;
00300 double zinit;
00301 double zlast;
00302 GRE_GROUP *prevgroup;
00303 GRE_GROUP *nextgroup;
00304 GRE_LAYOUT *layout;
00305 UINT32 groupflags;
00306 MDISPGROUPPOSN xposn, yposn;
00307 GRE_VIEWPOINT3D *m_ViewPoint3D;
00308 UINT32 VisibleViewLayout;
00309
00310 #ifdef X_NATIVE
00311
00312 static GRE_GROUP* GetFromWidget (
00313 Widget w
00314 );
00315 #endif
00316
00317
00318 static void SMLClassInstall (
00319 SMLCONTEXT *context
00320 );
00321
00322
00323 explicit GRE_GROUP (
00324 CREATEFLAGS createflags = CREATEFLAG_None
00325 );
00326
00327
00328 GRE_GROUP (
00329 GRE_LAYOUT *layout,
00330 CREATEFLAGS createflags = CREATEFLAG_None,
00331 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00332 GRE_GROUP *refgroup = 0
00333 );
00334
00335
00336 virtual ~GRE_GROUP ();
00337
00338
00339 bool AdjLatLon (
00340 );
00341
00342
00343 bool AdjLatLonCanSet (
00344 );
00345
00346
00347 bool ChangeListPos (
00348 GRE_GROUP* refgroup,
00349 GRE::LISTPOS listpos
00350 );
00351
00352
00353 ERRVALUE CheckAddLayer (
00354 GRE_LAYER::TYPE layertype = GRE_LAYER::TYPE_None
00355 ) const;
00356
00357
00358 void CheckGeorefCompatible (
00359 ) const;
00360
00361
00362 void ComputeLayoutExtents (
00363 );
00364
00365
00366 ERRVALUE ComputeMapExtents (
00367 );
00368
00369 ERRVALUE ComputeRegionFromLayers (
00370 REGION2D& region,
00371 bool IncludeMargins,
00372 GRE_LAYER::FILTER *filter = 0
00373 ) const;
00374
00375 #ifndef GENERATING_DOXYGEN_OUTPUT
00376
00377 GRE::GROUPVIEW* ConstructGroupView (
00378 GRE_VIEW *view
00379 );
00380 #endif
00381
00382
00383 void Create (
00384 CREATEFLAGS createflags = CREATEFLAG_None
00385 );
00386
00387
00388 void DestroyAllLayers (
00389 );
00390
00391
00392 void DestroyLayer (
00393 GRE_LAYER* layer
00394 );
00395
00396
00397 ERRVALUE DrawActiveOverlay (
00398 GRE::DRAWFLAGS DrawFlags = GRE::DRAWFLAG_UpdateScreen,
00399 GRE_VIEW *view = 0
00400 );
00401
00402 #if defined(X_NATIVE) || defined(WIN32_MFC)
00403
00404 ERRVALUE DlgGetClipSettings (
00405 MDLGPARENT dlgparent
00406 );
00407 #endif
00408
00409
00410 virtual GRE_LAYER *FindLayerByID (
00411 UINT32 LayerID
00412 ) const;
00413
00414
00415 ERRVALUE GeoCatDlgOpen (
00416 );
00417
00418
00419 void GeoCatDlgSetSearchPoint (
00420 const DPOINT2D& SearchPoint,
00421 const SPATREF::COORDREFSYS& PointCRS
00422 ) const;
00423
00424
00425
00426 GRE_LAYER* GetActiveLayer (
00427 ) const { return (activelayer); }
00428
00429
00430 const REGION2D& GetClipRegion (
00431 ) const;
00432
00433
00434 bool GetClipToMatchedLayer (
00435 ) const { return (m_ClipToMatchedLayer); }
00436
00437
00438 ERRVALUE GetExtents (
00439 DRECT2D* extents,
00440 UINT32 flags
00441 );
00442
00443
00444 GRE_LAYER* GetFirstLayer (
00445 ) const { return (firstlayer); }
00446
00447
00448 UINT32 GetFlags (
00449 ) const { return (groupflags); }
00450
00451
00452 virtual void GetFullName (
00453 MISTRING& name
00454 ) const;
00455
00456 const REGION2D& GetFullRegion (
00457 ) const { return (m_FullRegion); }
00458
00459 LABEL_MANAGEMENT_MODE GetLabelManagementMode (
00460 ) const { return (m_LabelManagementMode); }
00461
00462
00463 GRE_LAYER* GetLastLayer (
00464 ) const { return (lastlayer); }
00465
00466
00467 GRE_LAYER* GetLayerZoom1X (
00468 bool PreferredOnly
00469 ) const;
00470
00471
00472
00473 GRE_LAYOUT * GetLayout (
00474 ) const { return (layout); }
00475
00476 const DRECT2D& GetLayoutExtents (
00477 ) const { return (m_LayoutExtents); }
00478
00479
00480
00481 int GetListPos (
00482 );
00483
00484
00485 GRE_GROUP* GetMatchedGroup (
00486 bool firstonly = false
00487 ) const;
00488
00489 MATTE& GetMatte (
00490 ) { return (m_Matte); }
00491
00492
00493 UINT32 GetMutualExclusiveGroupSet (
00494 ) const { return (m_MutualExclusiveGroupSet); }
00495
00496
00497 const MISTRING& GetName (
00498 ) const { return (m_name); }
00499
00500
00501 bool GetNeedUpdateExtents (
00502 ) const { return (m_NeedUpdateExtents); }
00503
00504
00505 GRE_GROUP* GetNext (
00506 ) const { return (nextgroup); }
00507
00508
00509 virtual UINT32 GetNextLayerID (
00510 ) const;
00511
00512 #ifdef X_NATIVE
00513 OBJMGRFORM& GetObjMgrForm (
00514 ) { return (m_ObjMgrForm); }
00515 #endif
00516
00517
00518 GRE_GROUP* GetPrevious (
00519 ) const { return (prevgroup); }
00520
00521
00522 double GetRelativeScale (
00523 ) const { return (m_RelativeScale); }
00524
00525
00526 const SPATREF::COORDREFSYS& GetRenderCoordRefSys (
00527 ) const { return (m_RenderCRS); }
00528
00529
00530 double GetRotationAngle (
00531 ) const { return (RotAngle); }
00532
00533
00534
00535 SERIALIZER* GetSerializer (
00536 ) const { return (m_pSerializer); }
00537
00538
00539 virtual ERRVALUE GetSizeMeters (
00540 DPOINT2D& sizemeters
00541 );
00542
00543
00544 const TRANS2D_AFFINE& GetTransViewToGroup (
00545 ) const { return (m_ViewToGroup); }
00546
00547
00548 const SPATREF::COORDREFSYS& GetUsedCoordRefSys (
00549 ) const;
00550
00551 GRE_VIEWPOINT3D* GetViewPoint3D (
00552 ) const { return (m_ViewPoint3D); }
00553
00554
00555 void GetVisibleScaleRange (
00556 double& MinScaleVisible,
00557 double& MaxScaleVisible
00558 ) { MinScaleVisible = m_MinScaleVisible; MaxScaleVisible = m_MaxScaleVisible; return; }
00559
00560
00561 bool HasAttachedGroups (
00562 ) const;
00563
00564
00565 bool HasHighlightableLayer (
00566 GRE_VIEW *view = 0
00567 ) const;
00568
00569
00570 virtual bool HasLayers (
00571 ) const;
00572
00573
00574 bool HasLegend (
00575 ) const { return ((this->groupflags & GROUPFLAG_CombineLayersInLegend) != 0); }
00576
00577
00578 bool HasMutuallyExclusiveLayers (
00579 ) const { return (m_HasMutuallyExclusiveLayers); }
00580
00581
00582 bool HasTempLayers (
00583 ) const;
00584
00585
00586 void HighlightSetupDefault (
00587 GRE_VIEW *view = 0
00588 );
00589
00590
00591 void InvalidateAllViews (
00592 GRE::RENDERTARGET Target = GRE::RENDERTARGET_GroupAll | GRE::RENDERTARGET_LayerAll
00593 );
00594
00595
00596 bool Is3D (
00597 ) const { return (!layout || (groupflags & GROUPFLAG_3D)); }
00598
00599 bool IsBeingLoaded (
00600 ) const { return (m_pSerializer != 0); }
00601
00602
00603 bool IsClipped (
00604 ) const;
00605
00606
00607 bool IsClippedToMatchedLayer (
00608 ) const { return (m_ClipToMatchedLayer && GetMatchedLayer() != 0); }
00609
00610
00611
00612 bool IsCreated (
00613 ) const { return (m_IsCreated); }
00614
00615
00616 bool IsIgnored (
00617 ) const;
00618
00619
00620 bool IsSingleLayer (
00621 ) const { return ((groupflags & GROUPFLAG_SingleLayer) != 0); }
00622
00623
00624 bool IsValid (
00625 ) const;
00626
00627
00628 bool IsVisibleAtScale (
00629 double scale
00630 ) const { return (!layout || (scale >= m_MinScaleVisible && (m_MaxScaleVisible <= 0.0 || scale <= m_MaxScaleVisible))); }
00631
00632
00633 bool IsVisibleInView (
00634 const GRE_VIEW *view
00635 ) const;
00636
00637
00638 virtual ERRVALUE SerialRead (
00639 SERIALIZER& serializer
00640 );
00641
00642
00643 virtual ERRVALUE SerialWrite (
00644 SERIALIZER& serializer,
00645 const char *tagname = 0
00646 ) const;
00647
00648
00649 void Set2D (
00650 );
00651
00652
00653 void SetActiveLayer (
00654 GRE_LAYER *layer
00655 );
00656
00657
00658 void SetClipRect (
00659 const DRECT2D& ClipRect,
00660 const SPATREF::COORDREFSYS& RectCRS,
00661 bool notify = true
00662 );
00663
00664
00665
00666
00667
00668
00669
00670
00671 void SetClipToMatchedLayer (
00672 bool ClipToMatchedLayer,
00673 bool notify = true
00674 );
00675
00676
00677 void SetFlags (
00678 UINT32 flags,
00679 UINT32 mask
00680 );
00681
00682 void SetLabelManagementMode (
00683 LABEL_MANAGEMENT_MODE mode
00684 ) { m_LabelManagementMode = mode; }
00685
00686
00687 void SetListPos (
00688 int newpos
00689 );
00690
00691
00692 void SetModified (
00693 bool notify = true,
00694 bool ViewsNeedRedraw = true
00695 );
00696
00697
00698 void SetMutualExclusiveGroupSet (
00699 UINT32 GroupSet
00700 );
00701
00702
00703 void SetMutuallyExclusiveLayers (
00704 bool LayersMutuallyExclusive = true
00705 );
00706
00707
00708 ERRVALUE SetName (
00709 const MISTRING& newname
00710 );
00711
00712
00713 void SetNeedUpdateExtents (
00714 ) { m_NeedUpdateExtents = true; }
00715
00716
00717 void SetOrientation (
00718 UINT8 NewRotBase,
00719 double NewRotAngle
00720 ) { RotBase = NewRotBase; RotAngle = NewRotAngle; }
00721
00722
00723 void SetProjView (
00724 const GRE_LAYER *layer
00725 );
00726
00727
00728 void SetRelativeScale (
00729 double RelativeScale,
00730 bool notify = true
00731 );
00732
00733
00734 ERRVALUE SetRenderCoordRefSys (
00735 const SPATREF::COORDREFSYS& RenderCRS
00736 );
00737
00738
00739 ERRVALUE SetupEquirectangular (
00740 SPATREF::COORDREFSYS& CoordRefSys,
00741 const DPOINT2D& center
00742 ) const;
00743
00744
00745 void SetVisible (
00746 UINT32 flags,
00747 bool set
00748 );
00749
00750
00751 void SetVisibleScaleRange (
00752 double MinScaleVisible,
00753 double MaxScaleVisible
00754 ) { m_MinScaleVisible = MinScaleVisible; m_MaxScaleVisible = MaxScaleVisible; }
00755
00756
00757 void SetVisibleView (
00758 GRE_VIEW *view,
00759 bool visible
00760 );
00761
00762
00763 ERRVALUE TemplateWrite (
00764 SERIALIZER& serializer,
00765 const char *tagname = 0
00766 );
00767
00768 protected:
00769
00770 #ifdef X_NATIVE
00771
00772 virtual void ObjMgrInitItems (
00773 );
00774 #endif
00775
00776 private:
00777
00778 #ifndef GENERATING_DOXYGEN_OUTPUT
00779
00780 #ifdef X_NATIVE
00781 OBJMGRFORM m_ObjMgrForm;
00782 GEOCAT_DIALOG *m_GeoCatDlg;
00783 MXDHANDLE m_pDlgObjMgr;
00784 #endif
00785
00786 SERIALIZER *m_pSerializer;
00787 bool m_IsCreated;
00788 bool m_NeedUpdateExtents;
00789 double m_MinScaleVisible;
00790 double m_MaxScaleVisible;
00791 double m_DesignScale;
00792 double m_RelativeScale;
00793 mutable MIUNICODE m_ActiveLayerName[64];
00794 bool m_ClipToMatchedLayer;
00795 bool m_HasMutuallyExclusiveLayers;
00796 GRE::HIGHLIGHTMODE m_ElemHighlightMode;
00797 UINT32 m_MutualExclusiveGroupSet;
00798 MATTE m_Matte;
00799 MISTRING m_name;
00800 SPATREF::COORDREFSYS m_RenderCRS;
00801 REGION2D m_ClipRegion;
00802 REGION2D m_FullRegion;
00803 TRANS2D_AFFINE m_ViewToGroup;
00804 DRECT2D m_LayoutExtents;
00805 LABEL_MANAGEMENT_MODE m_LabelManagementMode;
00806
00807 static void GRECB_Group (
00808 const GRE_CALLBACK_MSG *msg,
00809 void *vgroup
00810 );
00811
00812 static const SERIALIZER::ITEMDEF* SerialGetItemDef (
00813 SERIALIZER& serializer
00814 );
00815
00816 static ERRVALUE SerializerCB_OldClipProj (SERIALIZER&, const SERIALIZER::ITEMDEF*, void *vgroup, SERIALIZER::ITEMDEF::ACTION);
00817 static ERRVALUE SerializerCB_OldClipRect (SERIALIZER&, const SERIALIZER::ITEMDEF*, void *vgroup, SERIALIZER::ITEMDEF::ACTION);
00818 static ERRVALUE SerializerCB_OldGroupFlags (SERIALIZER&, const SERIALIZER::ITEMDEF*, void *vgroup, SERIALIZER::ITEMDEF::ACTION);
00819
00820 void Init ();
00821
00822
00823 GRE_LAYER *GetMatchedLayer () const;
00824
00825 #ifdef X_NATIVE
00826 virtual void OnNotifyGreObjMgr (const GRE_CALLBACK_MSG& msg);
00827 #endif
00828
00829
00830 virtual bool v_Destroy (bool NotifyParent);
00831 virtual MICON v_GetIcon () const;
00832 virtual const char* v_GetTypeName () const;
00833
00834
00835 #ifdef X_NATIVE
00836 virtual void v_DlgObjMgrClose ();
00837 virtual ERRVALUE v_DlgObjMgrCreate (MDLGPARENT dlgparent, const MISTRING& title);
00838 virtual void v_DlgObjMgrDestroy ();
00839 virtual bool v_DlgObjMgrIsOpen () const;
00840 virtual void v_DlgObjMgrOpen ();
00841 #endif
00842 virtual ERRVALUE v_DrawAllViews (GRE::DRAWCONDITION condition);
00843 virtual double v_GetDesignScale () const;
00844 virtual const DRECT2D& v_GetExtents () const;
00845 virtual void v_SetDesignScale (double DesignScale, bool notify);
00846
00847 GRE_GROUP (const GRE_GROUP&);
00848 GRE_GROUP& operator= (const GRE_GROUP&);
00849
00850 friend class GRE_LAYOUT;
00851 #ifdef X_NATIVE
00852 friend class GRE_GROUP::OBJMGRFORM;
00853 #endif
00854
00855 #endif
00856 };
00857
00858 DEFINE_ENUM_OP_BITWISE(GRE_GROUP::CREATEFLAGS)
00859
00860
00861
00862
00863 #ifdef WIN32_MFC
00864
00865 #ifndef GENERATING_DOXYGEN_OUTPUT
00866 class GRE_MFC_GROUP : public GRE_MFC_VIEWABLE {
00867 protected:
00868
00869 GRE_MFC_GROUP ();
00870 DECLARE_DYNCREATE(GRE_MFC_GROUP)
00871
00872 public:
00873
00874 GRE_GROUP* GetGroup (
00875 ) const { return (m_group); }
00876
00877 virtual ~GRE_MFC_GROUP();
00878
00879 protected:
00880 GRE_GROUP *m_group;
00881
00882 DECLARE_MESSAGE_MAP()
00883 };
00884 #endif
00885
00886 #endif
00887
00888
00889
00890 #endif