공통 컨트롤 사용하기

윈도우즈(Windows)를 사용하다 보면 항상 볼 수 있는 컨트롤들이 있습니다. 그런 것들을 공통 컨트롤(Common Control)이라고 하죠. 여기서는 그런 컨트롤들의 사용법에 대해 익혀보기로 하겠습니다.

그럼 기본 컨트롤의 종류부터 알아보죠. 다음 그림은 Visual C++ 6.0 에서 기본적으로 사용하는 컨트롤들입니다. 물론 사용자가 추가로 ocx 컨트롤 같은 걸 추가할 수도 있지요.

그럼 하나씩 사용법을 익혀보기로 하죠.

 

1. 리스트 박스(ListBox)

 다이얼로그 베이스의 프로젝트를 하나 만들고, 다이얼로그 폼 위에 리스트 박스 2개를 아래위로 나란히 올려놓습니다. 그리고 ID는 각각 위의 리스트박스를 IDC_LIST1, 아래의 리스트박스를 IDC_LIST2 로 하죠.

그리고 그 옆에다 에디트박스를 각각 하나씩 놓습니다.  그 ID는 IDC_EDIT1, IDC_EDIT2입니다.

 그리고는 OnInitDialog() 함수에 다음처럼 코드를 추가합니다.

 

BOOL CControlDlg::OnInitDialog()
{
        ...................

        // TODO: Add extra initialization here

        CListBox *pList = (CListBox *)GetDlgItem(IDC_LIST1);
        pList->AddString("리스트 박스 예제");
        pList->AddString("ListBox Sample");
        pList->AddString("test1");
        pList->AddString("test2");
        pList->AddString("test3");
        pList->AddString("test4");
        pList->AddString("test5");

        return TRUE;  // return TRUE  unless you set the focus to a control
}

 

그리고는 클래스 위저드를 실행시켜서 IDC_LIST1IDC_LIST2LBN_SELCHANGE 메시지에 대한 핸들러를 각각 다음처럼 작성합니다.

// 리스트 박스1에 변동이 있을 경우
void CControlDlg::OnSelchangeList1()
{
        // TODO: Add your control notification handler code here
        CString str;
        CListBox *pList1, *pList2;
        int Select;
        
        // 리스트박스1의 포인터 얻기
        pList1 = (CListBox *)GetDlgItem(IDC_LIST1);
        
        // 리스트 박스2의 포인터 얻기
        pList2 = (CListBox *)GetDlgItem(IDC_LIST2);
        
        // 선택된 아이템의 인덱스를 Select에 저장
        Select = pList1->GetCurSel();

        // 선택된 아이템의 인덱스에 해당하는 문자열을 읽어와 str에 저장
        pList1->GetText(Select, str);
        
        // 리스트박스에서 선택된 아이템 삭제
        pList1->DeleteString(Select);
        
        // 리스트박스2에 선택된 아이템 추가
        pList2->AddString(str);

        m_Edit1 = pList1->GetCount(); // 리스트박스1의 아이템 갯수
        m_Edit2 = pList2->GetCount(); // 리스트박스2의 아이템 갯수
        UpdateData(FALSE);
}

// 리스트박스2에 변동이 있을 경우
void CControlDlg::OnSelchangeList2()
{
        // TODO: Add your control notification handler code here
        CString str;
        CListBox *pList1, *pList2;
        int Select;
        
        pList1 = (CListBox *)GetDlgItem(IDC_LIST1);
        pList2 = (CListBox *)GetDlgItem(IDC_LIST2);
        
        Select = pList2->GetCurSel();
                
        pList2->GetText(Select, str);
        pList2->DeleteString(Select);
        pList1->AddString(str);

        m_Edit1 = pList1->GetCount();
        m_Edit2 = pList2->GetCount();
        UpdateData(FALSE);

 이 프로그램의 결과는 위의 리스트 박스에 나오는 문자열을 마우스로 클릭하면, 그 문자열이 삭제되면서 아래쪽의 리스트 박스에 그 문자열이 표시되는 겁니다. 반대의 경우도 마찬가지죠. 그리고 에디트박스에는 각 리스트 박스의 문자열의 갯수가 표시되죠. 

다음은 CListBox 클래스의 멤버함수들을 나타낸 겁니다.

Construction

CListBox Constructs a CListBox object.

Initialization

Create Creates the Windows list box and attaches it to the CListBox object.
InitStorage Preallocates blocks of memory for list box items and strings.

General Operations

GetCount Returns the number of strings in a list box.
GetHorizontalExtent Returns the width in pixels that a list box can be scrolled horizontally.
SetHorizontalExtent Sets the width in pixels that a list box can be scrolled horizontally.
GetTopIndex Returns the index of the first visible string in a list box.
SetTopIndex Sets the zero-based index of the first visible string in a list box.
GetItemData Returns the 32-bit value associated with the list-box item.
GetItemDataPtr Returns a pointer to a list-box item.
SetItemData Sets the 32-bit value associated with the list-box item.
SetItemDataPtr Sets a pointer to the list-box item.
GetItemRect Returns the bounding rectangle of the list-box item as it is currently displayed.
ItemFromPoint Returns the index of the list-box item nearest a point.
SetItemHeight Sets the height of items in a list box.
GetItemHeight Determines the height of items in a list box.
GetSel Returns the selection state of a list-box item.
GetText Copies a list-box item into a buffer.
GetTextLen Returns the length in bytes of a list-box item.
SetColumnWidth Sets the column width of a multicolumn list box.
SetTabStops Sets the tab-stop positions in a list box.
GetLocale Retrieves the locale identifier for a list box.
SetLocale Sets the locale identifier for a list box.

Single-Selection Operations

GetCurSel Returns the zero-based index of the currently selected string in a list box.
SetCurSel Selects a list-box string.

Multiple-Selection Operations

SetSel Selects or deselects a list-box item in a multiple-selection list box.
GetCaretIndex Determines the index of the item that has the focus rectangle in a multiple-selection list box.
SetCaretIndex Sets the focus rectangle to the item at the specified index in a multiple-selection list box.
GetSelCount Returns the number of strings currently selected in a multiple-selection list box.
GetSelItems Returns the indices of the strings currently selected in a list box.
SelItemRange Selects or deselects a range of strings in a multiple-selection list box.
SetAnchorIndex Sets the anchor in a multiple-selection list box to begin an extended selection.
GetAnchorIndex Retrieves the zero-based index of the current anchor item in a list box.

String Operations

AddString Adds a string to a list box.
DeleteString Deletes a string from a list box.
InsertString Inserts a string at a specific location in a list box.
ResetContent Clears all the entries from a list box.
Dir Adds filenames from the current directory to a list box.
FindString Searches for a string in a list box.
FindStringExact Finds the first list-box string that matches a specified string.
SelectString Searches for and selects a string in a single-selection list box.

Overridables

DrawItem Called by the framework when a visual aspect of an owner-draw list box changes.
MeasureItem Called by the framework when an owner-draw list box is created to determine list-box dimensions.
CompareItem Called by the framework to determine the position of a new item in a sorted owner-draw list box.
DeleteItem Called by the framework when the user deletes an item from an owner-draw list box.
VKeyToItem Override to provide custom WM_KEYDOWN handling for list boxes with the LBS_WANTKEYBOARDINPUT style set.
CharToItem Override to provide custom WM_CHAR handling for owner-draw list boxes which don't have strings.

 - the end of this article -