프로그래밍 2014. 3. 9. 17:33
728x90

 

클래스 사용시 멤버변수들을 스트링 형식으로 만들어 둘 수 있다면,

 

에디터 상에서는 직접 스트링을 가져와 각종 컨트롤들로 등록시키고,

-> 예를 들자면, 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 는 문자열로 치환되어 저장됩니다.

 

 

728x90
posted by BK dddDang
: