반응형

안녕하세요. 애드 소프트입니다.

 

저번 포스팅에서는 ListBox를 다뤄 보았는데 우여 곡절이 많았습니다.

ListBox를 보다보니 여러 컬럼을 추가하는게 쉬운일 아니었습니다.

불가능하진 않더라도 꼭 ListBox만 고집해야 하는 상황이 아니라면 구지 사용할 이유가 없을듯 합니다.

멀티 컬럼을 위해서는 ListView를 사용하는게 정신건강에도 좋을듯 합니다.

 

이번 포스팅에서는 ListView를 사용하는 법을 같이 진행해 봅시다.

 

ListView를 사용하기 위한 CFormview를 기본클래스로 클래스를 하나 생성하도록 하겠습니다.

InitInstance 함수의 항목 중 RUNTIME_CLASS를 추가한 클래스로 변경합니다.

	// 애플리케이션의 문서 템플릿을 등록합니다.  문서 템플릿은
	//  문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CHelloWorldDoc),
		RUNTIME_CLASS(CMainFrame),       // 주 SDI 프레임 창입니다.
		RUNTIME_CLASS(ListViewSample)); // 해당 CHelloWorldView => ListViewSample

ListViewSample에 빨간 줄이 들어 온다면 다음 항목에 추가한 해더 파일을 추가해 줍니다.

// HelloWorld.cpp: 애플리케이션에 대한 클래스 동작을 정의합니다.
//

#include "pch.h"
#include "framework.h"
#include "afxwinappex.h"
#include "afxdialogex.h"
#include "HelloWorld.h"
#include "MainFrm.h"

#include "HelloWorldDoc.h"
#include "HelloWorldView.h"
#include "ListViewSample.h" // 해당 부분 추가

해당 파일을 수정하는 이유를 알기 위해서는 MFC의 구조를 조금 이해 하셔야 편리한거 같습니다.

SDI(좌) MDI(우) 애플리케이션의 구조(출저 : MSDN)

 

CWinApp -> CDocument -> CFrameWnd -> CView, CToolBar, CStatusBar 형식으로 포함 하도록 되어 있습니다.

 

프로그램이 실행되면 전체적인 것을 포함하는 것은 CWinApp 이라고 생각하시면됩니다.

한 응용프로그램을 관장하며, 초기화, 실행, 종료를 캡슐화 합니다. 

CWinApp 아래에 도큐먼트가 포함되고 토큐먼트에 툴바, 뷰, 스테이터스 등이 포함된다고 이해 하고 있습니다.

 

툴바나 스테이스터스바, 메뉴 등의 위치는 다들 알고 있으실 테니 표시는 생략했습니다.

 

 

	// 애플리케이션의 문서 템플릿을 등록합니다.  문서 템플릿은
	//  문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.
	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CHelloWorldDoc),
		RUNTIME_CLASS(CMainFrame),       // 주 SDI 프레임 창입니다.
		RUNTIME_CLASS(ListViewSample)); // 해당 CHelloWorldView => ListViewSample

처음 수정한 코드입니다. 해당 코드를 수정한 다음 리소스 뷰를 통해 추가한 뷰를 열어 봅니다.

위와 같은 폼이 생성되었을 것입니다.

 

해당 폼에 리스트 뷰를 추가 하고 컨트롤 변수를 추가 해 줍니다.

m_ctrlListView라는 컨트롤 변수를 추가 했습니다.

그리드 형식으로 표시하길 원하기 때문에 리스트 컨트롤의 속성에서 리포트 방식으로 변경합니다.

 

솔루션 탐색기를 통해 ListViewSample.cpp 로 돌아 온 후 데이터를 입력하기 위한 코딩을 삽입합니다.

코드를 봤더니 추가할 적당한 함수를 찾지 못해 추가해 주기로 하겠습니다.

CTRL + SHIFT + X 단축키를 눌러 클래스 위자드를 실행 한 후 가상함수 탭에서 OnInitialUpdate 함수를 찾아 추가해 줍니다.

추가 하신 후 코드편집을 누르시면 해당 위치로 이동하니 이용하시면 편리합니다.

CListCtrl의 함수는 컬럼 해더 부분과 데이터 부분으로 나뉘어 집니다.

그래서 컬럼 해더를 따로 추가 해 주셔야 됩니다.

void ListViewSample::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
	
	// 컬럼 추가
	m_ctrlListView.InsertColumn(0, L"컬럼1", LVCFMT_LEFT, 100, -1);
	m_ctrlListView.InsertColumn(1, L"컬럼2", LVCFMT_LEFT, 100, -1);
	m_ctrlListView.InsertColumn(2, L"컬럼3", LVCFMT_LEFT, 100, -1);


	// 컬럼 삭제
	m_ctrlListView.DeleteColumn(2);

	// 데이터 추가
	m_ctrlListView.InsertItem(0, L"데이터 1");
	m_ctrlListView.SetItem(0, 1, LVIF_TEXT, L"데이터 2", 0, 0, 0, NULL);

	m_ctrlListView.InsertItem(1, L"데이터 1");
	m_ctrlListView.SetItem(1, 1, LVIF_TEXT, L"데이터 2", 0, 0, 0, NULL);
}

 

위 와 같이 코딩 후 실행 결과입니다. 

 

 

추가 방법은 많은 방법은 많은 방법을 제공하고 있으니 MSDN을 참고하시면 편리합니다.

docs.microsoft.com/ko-kr/cpp/mfc/reference/clistctrl-class?view=msvc-160

 

CListCtrl 클래스

자세히 알아보기: CListCtrl 클래스

docs.microsoft.com

 

반응형

+ Recent posts