카테고리 없음

[MFC] MFC 이미지 콤보상자 만들기(Extended combo box 컨트롤 만들기)

성엽이 2014. 4. 2. 22:39

 

 

 

 

1. 대화상자 기반 MFC 에서 다이얼로그에 Extended Combo Box 를 클릭하고 아무대나 추가한다.

 

 

 

2. Extended Combo Box 를 오른쪽 클릭해서 변수추가를 누른다. 아래와같은 변수를 입력하고 마침

 

 

 

3. 클래스에 CImageList m_ImgList;  추가

 

4. 소스의 OnInitDialog() 메서드에 아래 내용 추가

 

 

// 이미지 리스트 생성
 CBitmap Bmp;
 Bmp.LoadBitmapW(IDB_BITMAP1);

 m_ImgList.Create(15,15, ILC_COLOR24, 8 ,0);
 m_ImgList.Add(&Bmp, RGB(255,0,0));
 m_ComboEx2.SetImageList(&m_ImgList); //SetImageList 메서드를 호출하여 이미지목록 연결

 

// 리스트 아이템 추가

 

 CString strTmp = _T("");


 COMBOBOXEXITEM cbi;


 ::ZeroMemory(&cbi, sizeof(cbi));

 

 cbi.mask = CBEIF_IMAGE | CBEIF_SELECTEDIMAGE | CBEIF_TEXT;

 

 for(int i = 0; i <7; ++i)
 {
  strTmp.Format(_T("%d th Item"), i);

  cbi.iItem = i;
  cbi.iImage = i;
  cbi.iSelectedImage = i;

  cbi.pszText =(LPWSTR)(LPCTSTR)strTmp;    

 

m_ComboEx2.InsertItem(&cbi);  
 }

 

m_ComboEx2.SetCurSel(0); //초기화시 인덱스의 위치 // 1로하면 초기화시에 1번인덱스에 가있다

 

 


설명

 

typedef struct tagCOMBOBOXEXITEMW
{
    UINT mask;  //구조체의 멤버들중에서 어떠한 멤버의 값이 유효한지 들어갑니다.  (소스에선 iItem , iImage , iSelectedImage )
    INT_PTR iItem; // 추가할 항목의 인덱스(여기선 for문으로 증가)
    LPWSTR pszText;  //문자열을 저장한 버퍼의 주소
    int cchTextMax; //문자열최대길이
    int iImage; // 최초상태에서 출력할 이미지 인덱스
    int iSelectedImage; //선택한 상태에서 출력할 이미지 인덱스 여기선 같다
    int iOverlay; // 드래그 이미지의 인덱스(소스에선 사용 x)
    int iIndent; // 들여쓰기할 크기 (자세한건 msdn ㅠㅠ)
    LPARAM lParam; //msdn.
} COMBOBOXEXITEMW, *PCOMBOBOXEXITEMW;

 

 m_ComboEx2.SetCurSel(0);