VC에서 ClistBox에 확인란 사용


프로젝트에 복선상자가 있는 목록 컨트롤을 사용해야 합니다. 맞아요. VB, Delphi. 현재 성과가 있지만, 프로젝트가 VC 프로젝트이기 때문에 VC에 있는 기존의 ClistBox나 ClistCtrl에는 복선상자가 없습니다.여기까지 말하면 고수들은 간단하게, 스스로 하나를 다시 그리거나, 게으름을 피우는 방법도 인터넷에서 다른 사람이 만들어 놓은 종류를 찾아서 쓸 수 있다고 말할 수 있다.
사실 인터넷에서 이런 말을 찾을 수 있는 더 쉬운 방법이 하나 더 있다.
[How to use the CCheckListBox class in a dialog box]
Create in your resource file an ordinary list box in a dialog box.Whichever other attributes that you choose, the list box must be ownerdrawn and include the hasstrings attribute. Assume that in this case, you have assigned an ID of IDC_CHECKLISTBOX to the listbox .
Create an instance of a CCheckListBox object in the header file of your dialog box.
CCheckListBox m_CheckListBox;

Over-ride OnInitDialog() in your dialog box and subclass the list box that you created in your resource file. Set the style of the check box as you wish. See the documentation provided with your compiler.
m_CheckListBox.SubclassDlgItem(IDC_CHECKLISTBOX, this); m_CheckListBox.SetCheckStyle(BS_AUTOCHECKBOX);

Since CCheckListBox is derived from CListBox, you have access to all the class members of CListBox. Add strings to the list box using AddString() as follows.
m_CheckListBox.AddString("Test String");

CCheckListBox provides several class members that allow you to access or set the check state of the items in the list box. For example, to see whether the first item in the list box is checked (the index of the first item would be zero), use GetCheck().
int iIndex = 0; int iState; iState = m_CheckListBox.GetCheck(iIndex);

방법이 매우 교묘해서 꽃을 옮겨 나무를 접목한다.
MFC는 CCheckListBox 클래스가 복선상자 스타일을 지원하기 때문에 ListBox 컨트롤을 직접 사용하고 초기화할 때 하위 클래스를 CCheckListBox로 만들고 스타일 파라미터를 설정하면 됩니다.그러나 성공의 관건은 ListBox 컨트롤의 두 가지 속성을 수정하는 것이다. 그것이 바로 Owner draw가Fixed(LBS OWNERDRAWFIXED),Hasstrings가True(LBS HASSTRINGS)로 설정된 것이다. 그렇지 않으면 성공하지 못하고 타임즈가 잘못 실행된다.
구체적인 실현 절차는 다음과 같다.
1、먼저 창에 ListBox 컨트롤을 드래그하고 자원 ID가 IDC 라고 가정합니다LIST1;
2. 위에서 말한 바와 같이 이 ListBox 컨트롤의 속성을 수정합니다(LBS OWNERDRAWFIXED | LBS HASSTRINGS).
3. CCheckListBox 대상을 창 클래스의 헤더 파일에 정의한다.
// XXXDlg.h CCheckListBox m_CheckList;

4. 그리고 CPP 파일에 초기화된 곳에 두 줄을 쓴다.
// XXXDlg.cpp BOOL CXXXDlg::OnInitDialog() { // ... m_CheckList.SubclassDlgItem(IDC_LIST1, this); // IDC_LIST1 ListBox     ID 
m_CheckList.SetCheckStyle(BS_AUTOCHECKBOX); //  checkBox   ,          ... }

오케이, 이렇게 간단해!데이터를 몇 개 넣어서 복선상자가 있는지 확인해 보세요.
m_CheckList.AddString("Test String");

확인란이 선택되었는지 여부를 판단하는 것도 간단합니다.
int iIndex = 0;
 int iState;
 iState = m_CheckList.GetCheck(iIndex);

이상은 VC6, 8에서 모두 테스트에 통과되었다.
다음과 같은 방법도 사용할 수 있다
1、먼저 창에 ListBox 컨트롤을 드래그하고 자원 ID가 IDC 라고 가정합니다LIST1;
2. 위에서 말한 바와 같이 이 ListBox 컨트롤의 속성을 수정합니다(LBS OWNERDRAWFIXED | LBS HASSTRINGS).3, ListBox 컨트롤에 CCheckListBox 변수 추가
m_CheckList
4, OnInitDialog에 추가
m_CheckList.AddString("Test String");
         

보충: Delphi에서 TtreeView 컨트롤을 확인란으로 설정하는 방법:
간단해, 초기화할 때 이런 한마디를 더하면 돼.(TreeView1은 컨트롤 이름)
SetWindowLong(TreeView1.Handle, GWL_STYLE, GetWindowLong(TreeView1.Handle, GWL_STYLE) or $00000100);

제3자 컨트롤을 찾아가거나 그림을 그릴 필요가 없습니다!
다음으로 변경:http://blog.csdn.net/JPEXE/article/details/1862435

좋은 웹페이지 즐겨찾기