GSI

CTabCtrl 컨트롤을 사용하게 되면 탭의 내용을 추가해주어야 합니다.

아래와 같이 하나하나 추가 하게 되는데요.
m_tbMain.InsertItem(0, "Pixel Map");
m_tbMain.InsertItem(1, "Programming");
m_tbMain.InsertItem(2, "Color...");


사실 이렇게 하게 되면 탭이 늘어나거나 코드의 분량이 많아 지거나 하는 조금 지저분하게 되는 경향이 생기기도 합니다. 중간에 고치기 위해서 해당 코드를 찾아야 하구요.
그래서 아래와 같이 바꿔 보았습니다.

탭 컨트롤이 많은 어플에서는 유용할지도 모르겠어요.

탭에 들어갈 이름을 배열로 선언해 놓습니다.
TCHAR * tab_MainHeadersName[] = {
        _T("Pixel Map"),
        _T("Programming"),
        _T("Color..."),
        NULL };


이것을 사용하기 위해서 아래와 같이 for문을 사용해서 자동으로 입력 받습니다.
for (int i = 0; ; i++) {
 if (tab_MainHeadersName[i] == NULL) break;
 m_tbMain.InsertItem(i, tab_MainHeadersName[i]);
}


이렇게 하게 되면 코드 분량도 작아 지고 수정도 용이 하게 됩니다.
하지만 이런 코드를 컨트롤마다 다 넣어 주자니 귀찮아 집니다. ^^
그래서 아래와 같이 디파인으로 묶어 보았습니다. ^^

// 탭 컨트롤 해당 헤더 정보를 사용해서 자동으로 이름 부여 하는 디파인
#define TABCTRL_AUTOINPUT_INSERTITEM(ctl, headerlist) \
 for (int i = 0; ; i++) {       \
  if (headerlist[i] == NULL) break;    \
  ctl.InsertItem(i, headerlist[i]);    \
 }


이제 코드에서는 한줄로 해당 탭 이름을 추가할 수 있습니다.
// 탭 추가
TABCTRL_AUTOINPUT_INSERTITEM(m_tbMain, tab_MainHeadersName);
// 첫번째 항목이 선택되게.
m_tbMain.SetCurSel(0);


어때요?.
코드의 정리 면에서 더 효율이 있을가요? ^^
이런 항목들이 많아 진다면 config.h, cpp 등을 두어서 그쪽에 다 모아 놓으면 될거 같구요.
mfc를 할때는 그냥 stdafx.h, cpp 에 몰아 놓고 작업할때도 있어요.

나름대로 정리해본 내용입니다.
더 좋은 방법이 있다면 연락 주시거나 코멘트 남겨 주세요.
Posted by gsi
: