대화상자에서 작업을 하다 AutoCAD에서 작업을 하기 위해 포커스를 AutoCAD에 주고 AutoCAD에서의 작업이 끝이나면 다시 포커스를 대화상자에 주는 식의 코딩을 합니다.
물론 대화상자는 모달리스형식으로 생성을 해야되겠죠.
아래와 같은 대략적인 코드가 될것입니다.
하지만 코드 중간에서(AutoCAD에서의 작업) 함수를 빠져나가는 부분이 있다면 그 부분마다 m_bFocus = TRUE라는 코드를 삽입해줘야 합니다.
이 얼마나 지저분하고 손이 많이 가는 작업입니까?
피곤할 노릇이죠.
그래서 클래스로 m_bFocus의 값을 저장해 두었다가 함수를 빠져 나갈때 즉 클래스의 소멸자에서 m_bFocus에 저장해 두었던 값을 되돌려주는 클래스를 만들게 되었습니다.
물론 대화상자는 모달리스형식으로 생성을 해야되겠죠.
아래와 같은 대략적인 코드가 될것입니다.
m_bFocus = FALSE;
.... /// AutoCAD에서의 작업
m_bFocus = TRUE;
일반적으로 위는 잘 작동합니다.하지만 코드 중간에서(AutoCAD에서의 작업) 함수를 빠져나가는 부분이 있다면 그 부분마다 m_bFocus = TRUE라는 코드를 삽입해줘야 합니다.
이 얼마나 지저분하고 손이 많이 가는 작업입니까?
피곤할 노릇이죠.
그래서 클래스로 m_bFocus의 값을 저장해 두었다가 함수를 빠져 나갈때 즉 클래스의 소멸자에서 m_bFocus에 저장해 두었던 값을 되돌려주는 클래스를 만들게 되었습니다.
template<class T>
class CSaveStatus
{
CSaveStatus(const CSaveStatus<T>&){}
public:
CSaveStatus(T& t) : unnamed(t)
{
value = t;
}
CSaveStatus<T>::~CSaveStatus()
{
unnamed = value;
}
private:
T& unnamed;
T value;
};
댓글
댓글 쓰기