클래스 사용시 멤버변수들을 스트링 형식으로 만들어 둘 수 있다면,
에디터 상에서는 직접 스트링을 가져와 각종 컨트롤들로 등록시키고,
-> 예를 들자면, static 컨트롤로 쉽게 출력해 볼수 도 있고,
특히 editcontrol 과 연동시키면 에디터 상에서 직접 값을 주기도 용이 해 집니다.
Light 라는 클래스가 있고,
Light 의 멤버변수인 Diffuse 가 있다고 한다면,
뭐 이런 식으로, 클래스의 멤버변수들을 쭉 다이어로그에 등록시키기가 용이해 진다면,
무척 편리해 질 것입니다.
실제 사용된 소스 부분입니다,
Light 클래스가 있고,
UIProperty_String 를 부모 클래스로 사용합니다,
멤버변수를 등록시키는 데에, UIProperty_Set() 함수를 호출해 주고,
에디터 상에서 수정된 값을 가져오는 데에, UIProperty_Get() 함수를 호출해 줍니다.
물론 멤버변수의 등록은 얼마든지 추가할 수 있겠지요.
class FDynamicLight : public UIProperty_String
{
....
....
....
public:
FColor Diffuse;
public:
const bool UIProperty_Set() //once call
{
if( m_iProperyCount < 1 )
{
CLASS_UI_PROPERTY_SET(Diffuse.A)
CLASS_UI_PROPERTY_SET(Diffuse.R)
CLASS_UI_PROPERTY_SET(Diffuse.G)
CLASS_UI_PROPERTY_SET(Diffuse.B)
return true;
}
return false;
}
const bool UIProperty_Get()
{
if (m_iProperyCount < 1)
return false;
CLASS_UI_PROPERTY_GET(Diffuse.A)
CLASS_UI_PROPERTY_GET(Diffuse.R)
CLASS_UI_PROPERTY_GET(Diffuse.G)
CLASS_UI_PROPERTY_GET(Diffuse.B)
return true;
}
}
에디터에 출력시
FDynamicLight* pL = &QPolyTile::SunLight;
if( pL->UIProperty_Set() )
{
for( int i=0; i<pL->GetPropertyCount(); i++ )
{
//pL->_mpszName[i] 은 멤버변수이름 스트링
//pL->_mpszVal[i] 은 멤버변수값 스트링
EditList.AddEditList( GetHInst(), m_hWnd, pL->_mpszName[i], pL->_mpszVal[i], .... );
}
}
실제 api 나 에디터 관련 코드 부분의 설명은 생략하겠습니다,
제가 설명드리고 싶은 부분은,
클래스 멤버 변수들에 대한 것을 스트링화 시켜 놓으면,
에디터에서 어떠한 컨트롤에 연결시킬 때 작업하기가 매우 쉬워 진다는 것입니다.
많이들 사용해 보았으리라 생각됩니다.
C++ 에서는 매크로 치환 연산자 # 을 사용해서 뭐든지 스트링화 시켜 저장해 둘 수 있습니다,
#deifne STRING(a) #a
이것은 곧
#a = "a"
a 는 문자열로 치환되어 저장됩니다.
'프로그래밍' 카테고리의 다른 글
쉐이더 홈피 하나 추천! (0) | 2014.03.19 |
---|---|
C++ UIProperty_String - 02 (0) | 2014.03.09 |
depth buffer shadow - 깊이 버퍼 그림자 (7) (2) | 2014.01.13 |
depth buffer shadow - 깊이 버퍼 그림자 (6) (0) | 2014.01.13 |
depth buffer shadow - 깊이 버퍼 그림자 (5) (0) | 2014.01.13 |