블로그 이미지
인생의무한루프
인생에 무한루프.....

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Tag

Recent Post

Archive

Recent Comment

Recent Trackback

2008. 12. 17. 15:47 Appication/VC++_Control

리스트박스 시작하기 ( MFC ListBox 예제 )

잠시 늦어졌던 장을 다시 시작하겠습니다.
회사도 좀 바밨었구, 흠.. 오랜만에 친구 몇명을 만나느라 주말도 좀 시간이 않나고..
이제서야 다시 글을 쓰게 되었습니다.

이번장은 리스트박스에 대하여 간단하게 설명해 봅니다.
리스트 박스는 이전 장에서 다룬 콤보박스에서도 언급되었었지만..

아주 단순하게 아이템을 열거해 놓고, 하나 혹은 여러개를 선택할 수 있는 직관적인
인터페이스를 제공해주는 컨트롤입니다.

컨트롤을 어느정도 다루다 보면 리스트박스(ListBox)보다는 리스트컨트롤(ListCtrl)을 주로
사용하게 되지만 컨트롤 자체의 기능은 나무랄데가 없습니다.


리스트 박스의 일반적인 속성은 스타일 페이지에 다 모여있습니다.
대부분의 속성들은 기존 장들과 겹치는 부분이 있으니,

Selection, Owner draw, Multi-column, Horizontal scroll
이 속성에 대하여 설명드리겠습니다.

1. Selection Property

선택 속성은 다음 그림처럼 4개의 속성으로 분리되어 있습니다


 - None
    이 속성은 아이템을 선택할 수 없고, 어떤 아이템에 포커스만 보여집니다.
    그림처럼 점선 박스만 보여지고, 사실 잘 사용되지 않는 속성입니다.


- Single
   이 속성은 아이템을 단 하나만 선택할 수 있습니다. 화면에 여러가지 아이템중에 단 하나만
   사용자가 선택할 수 있도록제공 함으로써, 중복선택을 인터페이스상에서 차단할 수 있습니다.


- Multiple
   이 속성은 아이템을 여러개 동시에 선택할 수 있습니다. 단 shift 혹은 ctrl 키와 조합하여
   선택하는 것이 아닌 마우스로 클릭하면 선택되고, 다시 클릭하면 해제되는 방법으로
   사용되기 때문에 상당히 불편하죠. 만약 여러개를 선택했다가 해제하려면 일일이 하나씩
   다 클릭해주어 해제시켜야 합니다.


- Extended
   확장 선택 속성으로써, 아이템을 여러개 동시에 선택할 수 있는건 Multiple과 같습니다. 단
   차이점은 Shift키와 Ctrl키를 마우스와 조합하여 선택할 수 있으며, 마우스 왼쪽 버튼만 클릭하면
   아이템을 하나만 선택할 수 있고, Shift키를 조합하여 누르면 이전 선택항목부터 현재까지 사이에
   있는 모든 아이템을 선택할 수 있습니다. 또한 Ctrl키와 조합하여 누르면 이전의 선택 항목은
   보존되고 있는 상태에서 Multiple 속성 처럼 추가적으로 아이템을 하나씩 선택하거나 해제가
   가능해집니다. 가장 일반적으로 사용되는 속성이죠.

2. Owner draw Property

MFC에서 제공해주는 확장 기능으로 다음과 같은 3가지가 있습니다. 몇몇 기본 컨트롤에서
제공해주는 기능으로 컨트롤의 내부를 사용자가 원하는 방식으로 구현할 수 있도록 그 바탕을
제공해 줌으로써 좀더 확장된 사용을 가능하게 해줍니다.

- No
   화장된 사용자 정의 그리기 기능을 사용하지 않고, 제공된 기능만을 사용함을 알립니다.
   일반적으로 모든 컨트롤의 디폴트 속성입니다.

- Fixed
   Owner Draw를 선택하게 되면 기본적으로 제공되는 가상함수
   virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
   위 함수를 사용자가 재 정의하여 (오버라이딩), 주어진 정보를 기준으로 그림을 내맘대로
   그릴 수 있도록 제공해줍니다.
   단, Fixed일 경우는 각각의 아이템마다 높이가 일률적으로 같습니다.

- Variable
   Fixed 처럼 DrawItem을 이용하여 사용자가 직접 그림을 그려주는 부분은 동일하지만,
   virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
   위의 가상함수를 이용하여 아이템의 높이도 개별적으로 다르게 설정할 수 있다는 점이 다릅니다.

3. Multi column Property
리스트 박스에서 제공해주는 속성중에 가장 직관성이 떨어지는 속성으로...
영문을 해석하면 멀티 컬럼을 지원해준다.. 라고 이해할 수 있습니다. 버뜨!!!~~

멀티컬럼이긴 합니다. 단, 사용자가 생각하는 리스트 컨트롤의 멀티 컬럼과는 개념이 좀 많이 다른
환경이라 첨에 좀 당황스럽다는 점만 빼면요.. -_-


아래는 속성을 적용해 놓은 화면입니다. 아이템 크기에 따라 그냥 지맘대로 쪼갭니다. 머 스크롤바도
없고 아무것도 없습니다. 화면에 보이지 않는 아이템을 선택하려면 그냥 마우스로 드래그 해야하고
멀티로 아이템을 선택할 경우는 선택도 지지리 이상해지죠..

저 컬럼의 너비는 SetColumnWidth()라는 함수를 이용하여 조절하실 수 있습니다.
또한 이 속성은 Owner draw를 사용시에 Variable에서는 조합하여 사용하실 수 없습니다.

대충 사용목적을 생각해보면 쫍은 공간에 많은 항목을 넣어놓고, 하나씩 선택할 경우라면
어떻게든 써볼만 하겠다는 생각이 드네요.. ㅎ~

4. Horizonal scroll Property
이 속성을 내용대로 이해하면 수평 스크롤바를 자동으로 지원해주는 것 같지만..
그렇지는 못하다. 수평 스크롤바를 이용할 수 있도록 내부적인 동작만 지원한다는 의미이다.

한 아이템의 글자가 너무 길어 화면폭을 넘어갈 경우, 리스트박스에서는 그냥 잘려 보인다.
이 때 위 속성을 첨부하고 아래와 같은 코드를 이용하여 수평 스크롤바를 생성할 수 있다.

// 주어진 글자가 리스트박스 내에서 길이가 얼마나 되는지 계산한다.
static int GetTextLenEx(CListBox& box, LPCTSTR lpszText)
{
    CSize size;
    CDC *pDC = box.GetDC();
   
    // 현재 리스트박스의 폰트를 얻어와 DC에 적용시킨다.
    CFont* pOld = pDC->SelectObject(box.GetFont());

    // 스타일에 따라 약간의 오프셑 차이가 있다.
    if ((box.GetStyle() & LBS_USETABSTOPS) == 0)
    {
        size = pDC->GetTextExtent(lpszText, _tcslen(lpszText));
        size.cx += 3;
    }
    else
    {
        size = pDC->GetTabbedTextExtent(lpszText, _tcslen(lpszText), 0, NULL);
        size.cx += 2;
    }
    pDC->SelectObject(pOld);
    box.ReleaseDC(pDC);
   
    // 구한 문자열의 Pixel 단위를 넘긴다.
    return size.cx;
}

// 문자열을 리스트박스에 추가하는 함수.
static void
AddStringEx(CListBox& box, CString str)
{
    // 우선 리스트박스에 문자열을 추가시킨다.
    box.AddString(str);

    // 길이를 계산하여 기존 길이보다 넓으면 새로운 길이를 적용시킨다.
    int iExt = GetTextLenEx(box, str);
    if (iExt > box.GetHorizontalExtent())
        box.SetHorizontalExtent(iExt);
}







Posted by 까막백(홈페이지 이동)


posted by 인생의무한루프
2008. 12. 17. 15:44 Appication/VC++_Control

추가/삽입/삭제/선택 ( MFC ListBox 예제 )

리스트 박스를 사용하면서 주로 쓰이는 기능이 대표적으로 아이템의 추가, 삽입, 삭제 및 선택 기능이다. 기능은 단순하지만, 리스트 박스의 속성에 따라 동작 특성이나 메서드의 응답이 달라진다.

아래의 함수는 리스트박스에 긴 문자열이 들어갔을 경우, 수평 스크롤바를 생성시키는 코드이다.
이전 장에서 다룬것을 조금 확장한 것이고, 앞으로 리스트박스에서 항상 쓰일 함수이다.

static int GetTextLenEx(CListBox& box, LPCTSTR lpszText)
{
    CSize size;
    CDC *pDC = box.GetDC();
   
    CFont* pOld = pDC->SelectObject(box.GetFont());
    if ((box.GetStyle() & LBS_USETABSTOPS) == 0)
    {
        size = pDC->GetTextExtent(lpszText, _tcslen(lpszText));
        size.cx += 3;
    }
    else
    {
        size = pDC->GetTabbedTextExtent(lpszText, _tcslen(lpszText), 0, NULL);
        size.cx += 2;
    }
    pDC->SelectObject(pOld);
    box.ReleaseDC(pDC);
   
    return size.cx;
}

static void AddStringEx(CListBox& box, CString str, int ndx = -1)
{
    if(ndx == -1)
        box.AddString(str);
    else
        box.InsertString(ndx+1, str);
    int iExt = GetTextLenEx(box, str);
    if (iExt > box.GetHorizontalExtent())
        box.SetHorizontalExtent(iExt);
}


우선 리스트 박스 하나를 single 선택 모드로 예제를 하나 작성하였다.
리스트 박스를 선택할 때 속성에 따라 동작이 다름에 주의하여야 한다.

각각의 기능을 구현한 함수는 다음과 같다.

void CSssDlg::OnButton1()
{
    AddStringEx(m_list, "하나");  AddStringEx(m_list, "둘");
    AddStringEx(m_list, "셋");     AddStringEx(m_list, "넷");
    AddStringEx(m_list, "다섯");  AddStringEx(m_list, "여섯");
    AddStringEx(m_list, "일곱");  AddStringEx(m_list, "여덟");
    AddStringEx(m_list, "아홉");  AddStringEx(m_list, "임의의 아이템을 10개를 리스트 박스에 삽입함.");
}

void CSssDlg::OnButton2()
{
    UpdateData(TRUE);
    AddStringEx(m_list, m_str_insert, m_list.GetCurSel());
}

void CSssDlg::OnButton3()
{
    UpdateData(TRUE);
 
    m_list.SetCurSel(m_sel_program);
}

void CSssDlg::OnButton4()
{
    m_list.DeleteString(m_list.GetCurSel());
}

void CSssDlg::OnButton5()
{
    m_list.ResetContent();
}
single 선택 모드일 경우는 아이템을 하나씩만 선택할 수 있기 때문에, 선택이나 삭제가
위처럼 수월하게 이루어진다.







하지만 multiple나 extended 로 다중 선택할 경우.. GetCurSel의 응답이 약간 달라진다.
single
   아이템이 선택되었을 경우 : 선택된 아이템의 인덱스
   아이템이 선택되어지지 않았을 경우 : -1
multiple or extended
   아이템이 선택되었을 경우 : 최종 선택된 아이템의 인덱스
   아이템이 선택되어지지 않았을 경우 : 0

일단 다중 선택이 가능한 상태에서 그럼 어떻게 여러개의 아이템이 선택되어 졌는지를
인식하고, 그 항목들을 가져 올 수 있는지 살펴보자.

void DoSomething(CListBox& box)
{
    // 몇개의 아이템이 선택되어졌는지 카운트
    int nCount = box.GetSelCount();

    // 선택되어진 아이템이 하나도 없으면 리턴.
    if(nCount <= 0)
        return;
   
    // 배열을 하나 만들고, 크기를 설정한다.
    CArray<int,int> aryListBoxSel;
    aryListBoxSel.SetSize(nCount);

    // 아이템중에서 선택되어진 인덱스를 배열에 읽어온다.
    box.GetSelItems(nCount, aryListBoxSel.GetData());

    for(int i=0; i<nCount; i++)
    {
         // 선택된걸 하나씩 뽑아서 먼가 처리를 하겠지...
         int sel = aryListBoxSel[i];
   
        // do something... 
    }
}

위의 함수에서 보았듯이 여러개의 아이템이 선택되어져 있을 경우, 먼저 선택 아이템 카운트를
읽어온다음, 그 인덱스를 배열에 읽어오는 과정을 거친다.

그럼 다중 선택일 경우에 선택아이템을 지우는 버튼의 코드를 수정해보자.

싱글 선택일 경우는 아래와 같았다.
void CSssDlg::OnButton4()
{
    m_list.DeleteString(m_list.GetCurSel());
}

멀티 선택일 경우는 다음과 같다.
void CSssDlg::OnButton4()
{
    int nCount = box.GetSelCount();
    if(nCount <= 0)
        return;
   
    CArray<int,int> aryListBoxSel;
    aryListBoxSel.SetSize(nCount);
    box.GetSelItems(nCount, aryListBoxSel.GetData());

    // 앞에꺼 부터 지우게 되면 뒤쪽의 저장해 놓은 인덱스 정보가 틀어지게 되므로
    // 뒤에꺼 부터 앞으로 하나씩 지우면 된다.

    for(int i=nCount-1; i>=0; i--)
          m_list.DeleteString(aryListBoxSel[i]);
}



Posted by 까막백(홈페이지 이동)
posted by 인생의무한루프
2008. 12. 17. 15:43 Appication/VC++_Control

글자색과 배경색 ( MFC ListBox 예제 )

리스트 박스의 글자색과 배경색은 기존에 해온대로 WM_CTLCOLOR 이벤트를
이용하면 아주 쉽게 해결됩니다..



HBRUSH CSssDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
 
    if(nCtlColor == CTLCOLOR_LISTBOX)
    {
        if(pWnd->GetDlgCtrlID() == IDC_LIST1)
        {
            pDC->SetTextColor(RGB(255, 0, 0));
            pDC->SetBkColor(RGB(255,255,0));

            // 노랑색으로 만든 브러쉬. - m_brh.CreateSolidBrush(RGB(255,255,0));
            return m_brh;
        }
    }

    return hbr;
}



지금까지 다룬 방식으로 아주 쉽게 처리가 되었읍니다. -_-
강좌라고 할만한 껀덕지도 없읍니다.

하지만 컨트롤을 오버라이딩해서 별도로 구현하지 않는이상.. 리스트박스는 별로
다룰만한게 없다보니.. 휴~~



Posted by 까막백(홈페이지 이동)
posted by 인생의무한루프
2008. 12. 17. 15:42 Appication/VC++_Control

높이 조절과 여백( MFC ListBox 예제 )

리스트 박스는 컨트롤을 오버라이드 하지 않고 할만한게 없어서..
간단하게 Owner Draw Fixed를 이용하여 셀 높이 조절과 문자열에 여백넣는
샘플을 만들어 보았습니다.


우선 리스트 박스를 하나 올리고, 속성을 위와 같이 준다.



위의 그림은 셀의 높이를 20픽셀로 준것이고, 왼쪽에 여백을 5픽셀 준것이다.

이러한 기능을 구현하는것은 컨트롤의 내부를 건드리지 않고서는 사실상 불가능하지만
구현 자체가 그리 어려운것은 아니다.

우선 CListBox를 상속한 CCustomListBox 클래스를 하나 생성한다.
class CCustomListBox : public CListBox
{
// Construction
public:
     CCustomListBox();

// Attributes
public:
    COLORREF    m_rgbText, m_rgbBack; // 글자색과 배경색
    UINT              m_nHeight;                  // 셀의 높이
    CRect            m_szMargin;               // 글자의 마진

// Operations
public:

// Overrides
     // ClassWizard generated virtual function overrides

     //{{AFX_VIRTUAL(CCustomListBox)
     //}}AFX_VIRTUAL

// Implementation
public:
     virtual ~CCustomListBox();
     // 가상함수를 아래 처럼 추가한다.
     // 요건 아이템을 로우 단위로 그려주는넘.

     virtual void DrawItem(LPDRAWITEMSTRUCT pDIStruct);
     // 요건 아이템의 높낮이를 조절하는 놈
     virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

     // Generated message map functions
protected:
     //{{AFX_MSG(CCustomListBox)
     //}}AFX_MSG

     DECLARE_MESSAGE_MAP()
};

아래의 코드들을 실제로 구현되는 내용들이다.
추가적인 코드가 들어가는 함수만을 추려서 설명을 넣는다.
[사실 이게 코드의 90%이다.]

// 생성자로 필요한 초기값을 넣는다.
CCustomListBox::CCustomListBox()
{
    m_rgbText = RGB(255, 0, 0);
    m_rgbBack = RGB(255, 255, 0);
    m_nHeight = 20;

    m_szMargin = CRect(5, 0, 0, 0);
}

// 아이템을 그려주는 가상함수이다.
// Owner Draw속성을 주면 사용자가 재정의한 함수를 자동으로 호출해준다.

void CCustomListBox::DrawItem(LPDRAWITEMSTRUCT pDIStruct)
{
    CDC dc;
   
    // 코드를 간결하게 하기 위하여 전달된 HDC를 CDC에 어태치한다.
    if( !dc.Attach( pDIStruct -> hDC ) )
        return;
   
    // 현재 전달된 아이템이 선택되어진 넘인이 확인한다.
    if( pDIStruct -> itemState & ODS_SELECTED )
    {
        // 속성에 맞게 글자색, 배경색상을 지정한다.
        dc.SetTextColor((0x00FFFFFF & ~(GetSysColor(COLOR_WINDOWTEXT))));
        dc.SetBkColor(GetSysColor(COLOR_HIGHLIGHT));
        dc.FillSolidRect(&pDIStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT));
    }
    else
    {
        dc.SetTextColor(m_rgbText);
        dc.SetBkColor(m_rgbBack);
        dc.FillSolidRect(&pDIStruct->rcItem, m_rgbBack);
    }
   
    // 아이템의 인덱스가 -1이 아니면
    if(pDIStruct->itemID != -1)
    {
        // 선택된 아이템의 문자열을 읽어온다.
        CString m_SelText;
        GetText(pDIStruct->itemID, m_SelText);
       
        // 만약 선택된 아이템이 디저블 속성이면 글자 색상을 회색으로
        if(pDIStruct->itemState & ODS_DISABLED)
            dc.SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
       
        // 배경은 투명 속성으로
        dc.SetBkMode(TRANSPARENT);
       
        // 글자를 그릴 영역의 여백을 조절한다..
        CRect rcText = pDIStruct->rcItem;
        rcText.left += m_szMargin.left;
        rcText.top += m_szMargin.top;
        rcText.right -= m_szMargin.right;
        rcText.bottom -= m_szMargin.bottom;

        dc.DrawText(m_SelText, rcText, DT_VCENTER | DT_SINGLELINE);
    }
   
    dc.Detach();
   
    return;
}

// 아이템의 높이를 설정한다.
void CCustomListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
    lpMeasureItemStruct->itemHeight = m_nHeight;
}

차츰 컨트롤을 다뤄가다 보면 나름대로 이것 저것 해볼 욕심이 생길때가 있는데..
이 때 컨트롤의 Owner Draw를 이용하면 대부분의 구현이 가능합니다..
유명한 코드그루코드프로젝트 같은 사이트의 샘플들도 대략 이런식으로 구현되어
클래스로 잘 꾸며놓았다가 필요할 때 쓰면 되는것이죠.




Posted by 까막백(홈페이지 이동)
posted by 인생의무한루프
2008. 12. 17. 15:40 Appication/VC++_Control

콤보박스 컨트롤 시작하기. ( MFC ComboBox 예제 )

CComboBox 컨트롤에 대하여 알아보자.



리소스 편집창에서 툴바에 있는 빨간색 아이콘.. 이 콤보 박스를 나타내는 아이콘이다.
마우스로 드래그 하거나, 클릭하여 놓으면 된다.

콤보박스는 2가지로 구성이 되어있는데..
첫번째는 먼저 현재 선택된 아이템을 보여주는 에디트 부분과
데이터 항목을 쭈욱 열거해주는 리스트 부분으로 나누어진다.
이러한 속성을 먼저 꾸며 놓은 것이 위의 3가지 대표적인 타입니다.

Simple - 에디트와 리스트가 한번에 모두 펼쳐진 상태로 보여진다. 에디트는 수정 가능.
Dropdown - 리스트는 감추어진 상태이고, 에디트 우측의  버튼을 누르면 아래로
리스트가 쭈욱 늘어나는 스타일이다. 에디트는 수정 가능

Drop List - 기본 속성은 Dropdown과 같으나 에디트 영역을 사용자가 수정할 수 없다.


처음에 콤보를 접하여 열심히 데이터를 넣은 후 다이알로그에 올려놓고..
콤보를 딱 선택하였는데.. 아래 그림처럼 나왔었다.

도대체 내가 넣어논 데이터는 어디로 사라진걸까? -_-;;;
비주얼 스튜디오 2003부터는 달라졌지만, 6.0에서는 지금도 저렇다.. 패치도 않하나 --^;



저런 현상을 막아주기 위해서, 리소스 편집창에서 편집할 경우, 콤보 박스의 우측  버튼을
마우스로 눌러주면 위 그림처럼 주변의 트랙커가 활성화 된다. 마우스로 찍을 때마다 토글 되므로
그림처럼 활성화된 트랙커를 이용하여 크기를 변경할 수 있다.

콤보박스는 주로, 여러가지 선택 아이템중에 하나를 고를 경우에 주로 사용된다. 물론
내부 구조를 좀 손봐서 동시에 여러개를 선택할 수 있도록 첵크박스를 넣거나 하기도 하지만
기본적인 속성은 그렇다. (다나와 사이트의 목록 선택창)


다음으로 콤보박스의 기본 속성에 대하여 살펴보자.
속성창에는 4개이 페이지가 존재하는데, General 및 Extended Styles는 거의 모든 컨트롤의
공통속성이기도 하고, 이전 강좌(에디트 기초01)에서 설명하였으므로 생략하도록 한다.

콤보박스 속성창중 Data 페이지.

데이터 페이지의 하얀색 에디트 영역은 콤보박스에 미리 필요한 데이터를 넣어 둘 수 있도록
제공되는 입력창이다. 간단하고 미리 픽스된 크기의 데이터들은 넣어두면 좋다.

주의1. 데이터 한줄을 넣고, ENTER를 치면 창이 닫겨 버리거나 포커스를 잃을 수 있다.
다음줄로 넘어가려면 Ctrl + ENTER로 넘겨주어야 한다.

주의2. 한글을 입력하고 있던 경우는 마우스커서나 키보드 에로우키를 이용하여 현재 줄의
마지막으로 이동해 주어야 Ctrl + ENTER 가 먹는다.

콤보박스의 속성중 Styles 페이지.

1. Type
기본 설명은 위에서 달았으므로, 참고할 MSDN 영문 자료를 넣었다.
CBS_DROPDOWN   Similar to CBS_SIMPLE, except that the list box is not displayed unless the user selects an icon next to the edit control.
CBS_DROPDOWNLIST   Similar to CBS_DROPDOWN, except that the edit control is replaced by a static-text item that displays the current selection in the list box.
CBS_SIMPLE   The list box is displayed at all times. The current selection in the list box is displayed in the edit control.

2. Owner draw
이 속성은 콤보박스를 다루는 기초과정에서는 사실상 사용하지 않는다.
상당한 노가다 작업이 필요하고 내부 로직을 알고 있어야하므로.. 응용편정도에서 다룰 것이다.

No - 현재의 기본 속성을 유지한다.
Fixed - 사용자가 콤보박스의 리스트 박스 영역을 임의로 정의하여 그릴 수있다. 모든
           아이템의 높이가 동일하게 적용된다.
Variable - 사용자가 콤보박스의 리스트 박스 영역을 임의로 정의하여 그릴 수있다. 모든
           아이템의 높이를 개별적으로 다르게 설정할 수 있다.

3. Has strings
Owner draw 속성을 No가 아닌 것으로 선택하여 데이터를 사용자가 정의하여 그릴때 적용되는
속성으로 문자열 데이터를 다룬다고 알려준다.
주의. Owner draw 로 데이터를 처리할 경우 위 속성을 정의하여 주지 않으면 GetText 멤버를
이용하여 문자열을 읽어올 수 없게된다.


4. Sort
내부에 존재하는 문자열 데이터를 자동으로 소팅해준다.

5. Vertical Scroll
데이터가 화면 출력범위를 넘을 경우 스크롤바를 생성해준다.

6. No Integal height
콤보박스가 생성될 때 아래로 늘어지는 리스트 박스의 크기를 보통 사용자가 정해놓는다.
이 경우, 아이템의 하나의 폭의 배수가 이 리스트 전체 크기와 맞지 않으면 시스템에서 크기를
조절하여 아이템에 맞도록 자동으로 조절한다.
만약 이 옵션을 켜 놓으면 크기가 맞지 않는 경우에.. 나머지 만큼의 부분을 보여주게 된다.


7. OEM Convert
ANSI Character Set 을 OEM Character Set 으로 변경한다. 기본적으로 Windows NT/2000/XP는
ANSI 캐릭터 셑의 Escape Character를 지원하지 않는다. 이러한 Windows 캐릭터 셑을 DOS
캐릭터 셑으로 변환하는 것을 ANSI to OEM conversion 이라고 부른다.
[캐릭터 셑에 대하여 자세히 알지 못하는 관계로 써본적이 없는 속성입니다. -_-...]
[위 내용을 이해하는데 도움이 되는 페이지.
http://www.bribes.org/perl/wANSIConsole.html ]

8. Auto HScroll
선택된 문자열이 에디트 영역에 출력될 경우 너비가 넘어가면 자동으로 스크롤 될 수 있도록
지원해준다. 이를 설정하지 않으면 전체 문자열을 볼 수 없다.

9. Disable no scroll
데이터들이 들어있는 리스트 박스에 데이터가 충분치 않아 스크롤바가 보여질 필요가 없더라도
이 옵션이 켜져 있으면 Disable 된 스크롤바가 보여진다.

10. Upper/Lower Case
입력된 문자열 중에 영문을 대문자/소문자로 자동 전환해 준다.



Posted by 까막백(홈페이지 이동)
posted by 인생의무한루프
prev 1 2 3 4 5 6 7 ··· 12 next