| 1 |
#ifndef __SFJP_MYU__AGH_ScreenBase_H__ |
| 2 |
#define __SFJP_MYU__AGH_ScreenBase_H__ |
| 3 |
|
| 4 |
// Class Definitation |
| 5 |
class CScreenBase : public CWindowBase, public CControlBase |
| 6 |
{ |
| 7 |
protected: |
| 8 |
// Must Override!! Methods. |
| 9 |
//virtual _AGH_POINT GetCurPos()=0; |
| 10 |
virtual _AGH_POINT GetCurPos(){ |
| 11 |
throw CAghNotImplementedException("Can't use CScreenBase::GetCurPos() because not Overrided."); |
| 12 |
/*_AGH_POINT point; |
| 13 |
//ZeroMemory(&point, sizeof(point)); |
| 14 |
point.x = -1; |
| 15 |
point.y = -1; |
| 16 |
return point;*/ |
| 17 |
} |
| 18 |
|
| 19 |
protected: |
| 20 |
// ******* Utilities (Not shuold using) ****************** |
| 21 |
//std::vector<agh::CControlBase*> m_ctrlPtrAry; -> 既にアリマシタ… |
| 22 |
|
| 23 |
// Get Control Pointer from Position |
| 24 |
CControlBase* GetPosControl(int x, int y) |
| 25 |
{ |
| 26 |
// コントロールで該当するものがあるか? |
| 27 |
for(int i=0; i<m_ctrlPtrAry.size(); i++) |
| 28 |
{ |
| 29 |
CControlBase *p = m_ctrlPtrAry[i]; |
| 30 |
_AGH_RECT& rect = p->GetRect(); |
| 31 |
|
| 32 |
if ( agh::IsRectInternal(&rect, x, y) ){ |
| 33 |
return p; |
| 34 |
} |
| 35 |
} |
| 36 |
return NULL; |
| 37 |
} |
| 38 |
CControlBase* GetCurPosControl(){ |
| 39 |
_AGH_POINT point = GetCurPos(); |
| 40 |
return GetPosControl( point.x, point.y ); |
| 41 |
} |
| 42 |
|
| 43 |
///////////////////////////////////////////////// |
| 44 |
|
| 45 |
_AGH_EVENT_ACCESS_MODIFIER: |
| 46 |
/* |
| 47 |
// 左クリック系 : Left Click Events |
| 48 |
virtual void OnBackgroundLButtonClick(int x, int y){} |
| 49 |
virtual void OnBackgroundLButtonDblClk(int x, int y){} |
| 50 |
virtual void OnBackgroundLButtonDown(int x, int y){} |
| 51 |
virtual void OnBackgroundLButtonUp(int x, int y){} |
| 52 |
|
| 53 |
// 右クリック系 : Right Click Events |
| 54 |
virtual void OnBackgroundRButtonClick(int x, int y){} |
| 55 |
virtual void OnBackgroundRButtonDblClk(int x, int y){} |
| 56 |
virtual void OnBackgroundRButtonDown(int x, int y){} |
| 57 |
virtual void OnBackgroundRButtonUp(int x, int y){} |
| 58 |
|
| 59 |
// 真中クリック系 : Center(Wheel) Click Events |
| 60 |
virtual void OnBackgroundCButtonClick(int x, int y){} |
| 61 |
virtual void OnBackgroundCButtonDblClk(int x, int y){} |
| 62 |
virtual void OnBackgroundCButtonDown(int x, int y){} |
| 63 |
virtual void OnBackgroundCButtonUp(int x, int y){} |
| 64 |
virtual void OnBackgroundMButtonClick(int x, int y){} |
| 65 |
virtual void OnBackgroundMButtonDblClk(int x, int y){} |
| 66 |
virtual void OnBackgroundMButtonDown(int x, int y){} |
| 67 |
virtual void OnBackgroundMButtonUp(int x, int y){} |
| 68 |
|
| 69 |
// マウス移動 : Move Mouse Events |
| 70 |
virtual void OnBackgroundMouseMove(int nPosX, int nPosY, int nMoveX, int nMoveY){}*/ |
| 71 |
|
| 72 |
// ホイール : Wheel Events |
| 73 |
virtual void OnBackgroundWheelUp(int count){} |
| 74 |
virtual void OnBackgroundWheelDown(int count){} |
| 75 |
|
| 76 |
/* |
| 77 |
#define _AGH_CScreenBase_EVTIMPL2(EVT_NAME, V1, V2) \ |
| 78 |
agh::CControlBase *pControl = GetCurPosControl(); \ |
| 79 |
if ( pControl == NULL ) \ |
| 80 |
pControl->On##EVT_NAME(x,y); \ |
| 81 |
else \ |
| 82 |
OnBackground##EVT_NAME(x,y); |
| 83 |
|
| 84 |
virtual void OnLButtonClick(int x, int y){ _AGH_CScreenBase_EVTIMPL2(LButtonClick,x,y) } |
| 85 |
virtual void OnLButtonDblClk(int x, int y){ _AGH_CScreenBase_EVTIMPL2(LButtonDblClk,x,y)} |
| 86 |
*/ |
| 87 |
|
| 88 |
// 1 Paramator |
| 89 |
#define _AGH_CScreenBase_EVT1(EVT_NAME, TYPE1, V1) \ |
| 90 |
virtual void On##EVT_NAME(TYPE1 V1) \ |
| 91 |
{ \ |
| 92 |
agh::CControlBase *pControl = GetCurPosControl(); \ |
| 93 |
if ( pControl != NULL ) \ |
| 94 |
pControl->On##EVT_NAME(V1); \ |
| 95 |
else \ |
| 96 |
OnBackground##EVT_NAME(V1); \ |
| 97 |
} |
| 98 |
|
| 99 |
|
| 100 |
/*agh::CControlBase *pControl = GetCurPosControl(); \ |
| 101 |
if ( pControl != NULL ) \ |
| 102 |
/*pControl->On##EVT_NAME(V1,V2);*//* \ |
| 103 |
OnControl##EVT_NAME(pControl,V1,V2); \ |
| 104 |
else \ |
| 105 |
OnBackground##EVT_NAME(V1,V2); \*/ |
| 106 |
|
| 107 |
// 2 Paramator |
| 108 |
#define _AGH_CScreenBase_EVT2(EVT_NAME, TYPE1, V1, TYPE2, V2) \ |
| 109 |
virtual void On##EVT_NAME(TYPE1 V1, TYPE2 V2) \ |
| 110 |
{ \ |
| 111 |
bool bExist = false; \ |
| 112 |
for(int i=0; i<m_ctrlPtrAry.size(); i++) \ |
| 113 |
{ \ |
| 114 |
CControlBase *p = m_ctrlPtrAry[i]; \ |
| 115 |
_AGH_RECT& rect = p->GetRect(); \ |
| 116 |
\ |
| 117 |
if ( agh::IsRectInternal(&rect, x, y) ){ \ |
| 118 |
OnControl##EVT_NAME(p,V1,V2); \ |
| 119 |
bExist = true; \ |
| 120 |
} \ |
| 121 |
else \ |
| 122 |
OnControl##EVT_NAME##Outer(p,V1,V2); \ |
| 123 |
} \ |
| 124 |
if ( !bExist ) \ |
| 125 |
OnBackground##EVT_NAME(V1,V2); \ |
| 126 |
else \ |
| 127 |
OnBackground##EVT_NAME##Outer(V1,V2); \ |
| 128 |
} \ |
| 129 |
\ |
| 130 |
/** Background Method Define **/ \ |
| 131 |
virtual void OnBackground##EVT_NAME(TYPE1 V1, TYPE2 V2){} \ |
| 132 |
\ |
| 133 |
/** Control Method Define **/ \ |
| 134 |
virtual void OnControl##EVT_NAME(CControlBase *pControl, TYPE1 V1, TYPE2 V2){ \ |
| 135 |
pControl->On##EVT_NAME(V1,V2); \ |
| 136 |
} \ |
| 137 |
\ |
| 138 |
/** Background Method Define **/ \ |
| 139 |
virtual void OnBackground##EVT_NAME##Outer(TYPE1 V1, TYPE2 V2){} \ |
| 140 |
\ |
| 141 |
/** Control Method Define **/ \ |
| 142 |
virtual void OnControl##EVT_NAME##Outer(CControlBase *pControl, TYPE1 V1, TYPE2 V2){ \ |
| 143 |
pControl->On##EVT_NAME##Outer(V1,V2); \ |
| 144 |
} |
| 145 |
|
| 146 |
// 4 Paramator |
| 147 |
#define _AGH_CScreenBase_EVT4(EVT_NAME, TYPE1, V1, TYPE2, V2, TYPE3, V3, TYPE4, V4) \ |
| 148 |
virtual void On##EVT_NAME(TYPE1 V1, TYPE2 V2, TYPE3 V3, TYPE4 V4) \ |
| 149 |
{ \ |
| 150 |
bool bExist = false; \ |
| 151 |
for(int i=0; i<m_ctrlPtrAry.size(); i++) \ |
| 152 |
{ \ |
| 153 |
CControlBase *p = m_ctrlPtrAry[i]; \ |
| 154 |
_AGH_RECT& rect = p->GetRect(); \ |
| 155 |
\ |
| 156 |
if ( agh::IsRectInternal(&rect, nPosX, nPosY) ){ \ |
| 157 |
OnControl##EVT_NAME(p,V1,V2,V3,V4); \ |
| 158 |
bExist = true; \ |
| 159 |
} \ |
| 160 |
else \ |
| 161 |
OnControl##EVT_NAME##Outer(p,V1,V2,V3,V4); \ |
| 162 |
} \ |
| 163 |
if ( !bExist ) \ |
| 164 |
OnBackground##EVT_NAME(V1,V2,V3,V4); \ |
| 165 |
else \ |
| 166 |
OnBackground##EVT_NAME##Outer(V1,V2,V3,V4); \ |
| 167 |
} \ |
| 168 |
\ |
| 169 |
/** Background Method Define **/ \ |
| 170 |
virtual void OnBackground##EVT_NAME(TYPE1 V1, TYPE2 V2, TYPE3 V3, TYPE4 V4){} \ |
| 171 |
\ |
| 172 |
/** Control Method Define **/ \ |
| 173 |
virtual void OnControl##EVT_NAME(CControlBase *pControl, TYPE1 V1, TYPE2 V2, TYPE3 V3, TYPE4 V4){ \ |
| 174 |
pControl->On##EVT_NAME(V1,V2,V3,V4); \ |
| 175 |
} \ |
| 176 |
\ |
| 177 |
/** Background Method Define **/ \ |
| 178 |
virtual void OnBackground##EVT_NAME##Outer(TYPE1 V1, TYPE2 V2, TYPE3 V3, TYPE4 V4){} \ |
| 179 |
\ |
| 180 |
/** Control Method Define **/ \ |
| 181 |
virtual void OnControl##EVT_NAME##Outer(CControlBase *pControl, TYPE1 V1, TYPE2 V2, TYPE3 V3, TYPE4 V4){ \ |
| 182 |
pControl->On##EVT_NAME##Outer(V1,V2,V3,V4); \ |
| 183 |
} |
| 184 |
|
| 185 |
|
| 186 |
// 左クリック系 : Left Click Events |
| 187 |
_AGH_CScreenBase_EVT2(LButtonClick, int, x, int, y); |
| 188 |
_AGH_CScreenBase_EVT2(LButtonDblClk, int, x, int, y); |
| 189 |
_AGH_CScreenBase_EVT2(LButtonDown, int, x, int, y); |
| 190 |
_AGH_CScreenBase_EVT2(LButtonUp, int, x, int, y); |
| 191 |
|
| 192 |
// 右クリック系 : Right Click Events |
| 193 |
_AGH_CScreenBase_EVT2(RButtonClick, int, x, int, y); |
| 194 |
_AGH_CScreenBase_EVT2(RButtonDblClk, int, x, int, y); |
| 195 |
_AGH_CScreenBase_EVT2(RButtonDown, int, x, int, y); |
| 196 |
_AGH_CScreenBase_EVT2(RButtonUp, int, x, int, y); |
| 197 |
|
| 198 |
// 真中クリック系 : Center(Wheel) Click Events |
| 199 |
_AGH_CScreenBase_EVT2(CButtonClick, int, x, int, y); |
| 200 |
_AGH_CScreenBase_EVT2(CButtonDblClk, int, x, int, y); |
| 201 |
_AGH_CScreenBase_EVT2(CButtonDown, int, x, int, y); |
| 202 |
_AGH_CScreenBase_EVT2(CButtonUp, int, x, int, y); |
| 203 |
_AGH_CScreenBase_EVT2(MButtonClick, int, x, int, y); |
| 204 |
_AGH_CScreenBase_EVT2(MButtonDblClk, int, x, int, y); |
| 205 |
_AGH_CScreenBase_EVT2(MButtonDown, int, x, int, y); |
| 206 |
_AGH_CScreenBase_EVT2(MButtonUp, int, x, int, y); |
| 207 |
|
| 208 |
// マウス移動 : Move Mouse Events |
| 209 |
_AGH_CScreenBase_EVT4(MouseMove, int, nPosX, int, nPosY, int, nMoveX, int, nMoveY); |
| 210 |
|
| 211 |
// ホイール : Wheel Events |
| 212 |
_AGH_CScreenBase_EVT1(WheelUp, int, count); |
| 213 |
_AGH_CScreenBase_EVT1(WheelDown, int, count); |
| 214 |
}; |
| 215 |
|
| 216 |
|
| 217 |
#endif//__SFJP_MYU__AGH_ScreenBase_H__ |