2009년 10월 28일 수요일

이제야 알게된 Property Sheet... (Oh Shit!)

VC++에서 가장 코딩하기 지저분한 것 중 하나가 Tab control이다.
넓다랗게 Tab control을 달아도 탭의 내용이 자동으로 변하지도 않아, 일일이 show/hide 해야되고, 각 컨트롤의 z-order를 일일이 정해줘야 한다.

그래서 난 보통 Tab control을 쓸 때는 아래 캡쳐 화면처럼 탭 영역만 쓰고 컨트롤은 창 자체에다 위치시켰다.
나만의 꼼수랄까...

사용자 삽입 이미지

탭 영역만 스브적 사용...


그런데, 오늘 보니 Property Sheet이란 게 있더라.
그냥 제어판에서 많이 사용하는 탭 컨트롤이더라.
(솔까말, 난 제어판 화면을 보며 언제나 대단하단 생각을 했었다. 어떻게 이렇게 깔끔하게 컨트롤을 배치할 수 있었을까?)

Property Sheet는 Property Page를 여러개 관리할 수 있는데, 이 Property Page는 CDialog를 상속받은 놈이란 거...
즉, CDialog를 그린 뒤에 베이스 클래스만 슬쩍 CPropertyPage로 바꿔준 뒤 CPropertySheet에 AddPage() 하면 된다.

코드구루: Creating a Property Sheet Inside a Dialog (Property Sheet을 Dialog 위에 붙이는 방법)
FunctionX: Property Sheets and Property Pages (단순히 Property Sheet을 만드는 방법)

특히 코드구루의 글은 1998년의 글이니 11년 전의 글이다.
난 지금까지 뭐하고 산 거냐...


댓글 11개:

  1. 전 엄두도 안났는데 ㅠ.ㅠ 한번 해봐야겠어요 ㅎ

    답글삭제
  2. @구차니 - 2009/10/28 10:09
    세상은 넓고 지존은 많은 겁니다!

    답글삭제
  3. vc++ , 코드구루... 몇 년만에 들어보는 이름인지... 코딩세계를 떠난지 오래된 일이지만 역시나 코딩은 듣는것만으로도 짜증나는 일이네요 -_-;

    답글삭제
  4. 흠... 작년 납품 프로그램 짜면서 했던 것이군요 ^^

    저런... 저도 작년에야 알았다능...

    답글삭제
  5. @naturis - 2009/10/29 02:51
    짜증이라... ㅎㅎㅎ

    답글삭제
  6. @JAFO - 2009/10/29 02:57
    오... 그럼 비교적 신기술인 건가효? ㅠ.ㅠ

    답글삭제
  7. 헉~ 나는 첨부터 이걸로 해서리 나중에 탭콘트롤이 더 힘들었다는~ ㅋㅋㅋ

    대신 이놈은 Apply 에 대한 처리를 해줘야 한다는...

    처리를 안해주면 다이얼로그에 들어간 것들에 대한 처리가 좀 애매하다는...

    답글삭제
  8. @oneniner - 2009/10/29 17:40
    Apply가 좀 걸리더군.

    이게 창은 하나라도 결국 분리된 클래스라 개념 설정이 은근히 모호하긴 해.

    답글삭제
  9. 안녕하세요^^ 구글링하다가 쓰신 글을 보고 사막에서 오아시스를 발견한 느낌을 받고 한달음에 방문했습니다.

    제가 지금 CDialog based로 된 다이얼로그를 다 디자인해 놓고, 나중에서야 Property Sheet의 필요성을 깨달아

    살짝쿵 base class만 바꾸려고 하는데요,, 근데 어떻게 바꾸나요...?;; ㅠㅠ 상속하는 클래스만 바꾸면, 생성자들이 맞지않아 에러가 납니다.. 생성자들도 바꾸자니 이미 구현해놓은 DDX 컨트롤들이 에러가 납니다.. 아무리 구글링해봐도 base class를 바꾸는 방법은 안나옵니다.. 목이 마를대로 마른 영혼에게 단비를 내려주시면 정말 감사하겠습니다.ㅠㅠ

    답글삭제
  10. ㅋㅋ 간만에 UI 작업하느라 구글링하는데 여기서 검색되실줄이야~~ ㅎ 잘 지내시죠? ^^

    답글삭제
  11. @연병장 - 2010/12/02 10:15
    방가방가. 건강하지? 해가 가기 전에 한번 보면 좋겠다.

    답글삭제