반응형

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

 

오늘은 MFC를 이용해 리스트를 생성 후 목록을 표시할 수 있는 간단한 프로그램을 작성해 볼까 합니다.

List Box 컨트롤을 추가 하여 전체 화면으로 늘렸습니다.

List Box만을 추가하고 실행해 보았습니다.

제목이 없네요. 제목 추가는 다음과 같이 하시면 됩니다.

// CHelloWorldApp 초기화

BOOL CHelloWorldApp::InitInstance()
{
	// 애플리케이션 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
	// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControlsEx()가 필요합니다. 
	// InitCommonControlsEx()를 사용하지 않으면 창을 만들 수 없습니다.
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 응용 프로그램에서 사용할 모든 공용 컨트롤 클래스를 포함하도록
	// 이 항목을 설정하십시오.
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinAppEx::InitInstance();


	// OLE 라이브러리를 초기화합니다.
	if (!AfxOleInit())
	{
		AfxMessageBox(IDP_OLE_INIT_FAILED);
		return FALSE;
	}

	AfxEnableControlContainer();

	EnableTaskbarInteraction(FALSE);

	// RichEdit 컨트롤을 사용하려면 AfxInitRichEdit2()가 있어야 합니다.
	// AfxInitRichEdit2();

	// 표준 초기화
	// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
	// 아래에서 필요 없는 특정 초기화
	// 루틴을 제거해야 합니다.
	// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
	// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
	// 적절한 내용으로 수정해야 합니다.
	SetRegistryKey(_T("로컬 애플리케이션 마법사에서 생성된 애플리케이션"));
	LoadStdProfileSettings(4);  // MRU를 포함하여 표준 INI 파일 옵션을 로드합니다.


	InitContextMenuManager();

	InitKeyboardManager();

	InitTooltipManager();
	CMFCToolTipInfo ttParams;
	ttParams.m_bVislManagerTheme = TRUE;
	theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
		RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);

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


	// 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);



	// 명령줄에 지정된 명령을 디스패치합니다.
	// 응용 프로그램이 /RegServer, /Register, /Unregserver 또는 /Unregister로 시작된 경우 FALSE를 반환합니다.
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	// 창 하나만 초기화되었으므로 이를 표시하고 업데이트합니다.
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();

	// 타이틀 수정
	m_pMainWnd->SetWindowTextW(L"Hello World");

	return TRUE;
}

 

InitInstance 함수에서  m_pMainWnd->SetWindowTextW() 함수를 통해 수정가능합니다.

유니코드 베이스라 L 메크로를 사용하여 유니코드로 변경하였습니다.

 

컬럼을 추가하기 위해서 속성 창에서 다음 항목을 변경하였습니다.

 

위 에서 추가한 리스트 박스에 데이터를 추가하기 위해 컨트롤을 추가해 보겠습니다.

리소스 뷰에서 리스트 박스를 선택 후 마우스 오른쪽 버튼을 누른 후 변수 추가를 선택합니다.

 

변수 추가시 다음 컨트롤변수가 추가 된 것을 확인 할 수 있습니다.

해더파일

class CHelloWorldView : public CFormView
{
protected: // serialization에서만 만들어집니다.
	CHelloWorldView() noexcept;
	DECLARE_DYNCREATE(CHelloWorldView)

public:
#ifdef AFX_DESIGN_TIME
	enum{ IDD = IDD_HELLOWORLD_FORM };
#endif

...

// 생성된 메시지 맵 함수
protected:
	afx_msg void OnFilePrintPreview();
	afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
	DECLARE_MESSAGE_MAP()
public:
	CListBox mCtrlListBoxSample;
};

#ifndef _DEBUG  // HelloWorldView.cpp의 디버그 버전
inline CHelloWorldDoc* CHelloWorldView::GetDocument() const
   { return reinterpret_cast<CHelloWorldDoc*>(m_pDocument); }
#endif

 

Cpp 파일

void CHelloWorldView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST_SAMPLE, mCtrlListBoxSample);
}

 

클레스 마법사를 실행합니다.

단축키는 CTRL + SHIFT + X 입니다

클레스 이름을 CHellowWorldView를 선택하고 메시지 탭을 선택합니다.

가상 함수 탭에서 OnInitializeUpdate 함수를 선택하시고 코드 편집을 누릅니다.

 

해당 함수에 다음 코드를 추가 합니다.

void CHelloWorldView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();


	mCtrlListBoxSample.SetColumnWidth(500);
}

 

다시 알게된 사실이지만 MFC의 CListBox는 컬럼 추가가 쉽지 않습니다.

어떻게든 추가해서 설명드리고 싶었지만 MSDN에서 공부를 하다보니 CListView 라는 클래스를 제공합니다.

 

 

리스트 박스에 내용을 추가하기 위해서는 다음과 같이 AddString 함수를 이용하시면 됩니다.

 

void CHelloWorldView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();


	mCtrlListBoxSample.SetColumnWidth(100);

	mCtrlListBoxSample.AddString(L"테스트 리스트 1");
	mCtrlListBoxSample.AddString(L"테스트 리스트 2");
	mCtrlListBoxSample.AddString(L"테스트 리스트 3");
	mCtrlListBoxSample.AddString(L"테스트 리스트 4");
	mCtrlListBoxSample.AddString(L"테스트 리스트 5");
	mCtrlListBoxSample.AddString(L"테스트 리스트 6");
	mCtrlListBoxSample.AddString(L"테스트 리스트 7");
}

 

 

다른 함수들은 다음 MSDN을 활용해 추가해 보세요.

 

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

 

CListBox 클래스

MFC CListBox 클래스 및 해당 멤버 함수에 대 한 설명입니다.

docs.microsoft.com

 

다음 포스팅에서 CListView를 다뤄 볼까 합니다.

컬럼 추가 및 사용법을 알아보도록 할께요.

 

읽어 주셔서 감사합니다.

반응형

+ Recent posts