콤보박스에 문자열 넣는 시점 - AddString()
콤보박스를 가지고 있는 다이얼로그를 동적으로 생성했다.
다이얼로그를 DoModal()로 띄우기 전에 콤보박스에 문자열을 넣으려고 함수를 호출하여
콤보박스의 컨트롤 변수를 이용하여 문자열을 넣었다.
그랬더니 에러, 메모리 릭 주루루룩~
m_pSetEvtFilterDlg = new CSetEvtFilterDlg;
if (NULL == m_pSetEvtFilterDlg)
{
MessageBox(_T("대화상자 열기 실패"), _T("오류"), MB_OK | MB_ICONSTOP);
return;
}
m_pSetEvtFilterDlg->SetEvtFilterDataList(m_pDoc->GetEvtLogNameList(), m_pDoc->GetEvtFilterData());
m_pSetEvtFilterDlg->DoModal();
원인은 컨트롤 변수의 AddString() 함수를 이용하여 문자열을 넣는 시점이 DoModal() 이전 이여서 그랬었다.
즉, 다이얼로그가 띄어질때 OnInitUpdate() 함수에서 해주어야 한다.
ComboBox 컨트롤 변수를 사용하여 데이터를 다룰 때
ComboBox 컨트롤이 보이는 상태, 즉 다이얼 로그가 출력 중인 상태에서 다루어야 한다.
BOOL CSetEvtFilterDlg::OnInitDialog()
{
CDialog::OnInitDialog();
INT nLogNameListCount = m_sLogNameList.GetCount();
POSITION pos = m_sLogNameList.GetHeadPosition();
for (INT nIndex = 0; nIndex < nLogNameListCount; nIndex++)
{
CString sLogName = m_sLogNameList.GetNext(pos);
m_ctrlLogName.AddString(sLogName);
}
m_ctrlLogName.SetCurSel(0);
return TRUE;
}
cf ) SetCurSel(처음에 보여줄 아이템의 인덱스);
콤보박스를 가지고 있는 다이얼로그를 동적으로 생성했다.
다이얼로그를 DoModal()로 띄우기 전에 콤보박스에 문자열을 넣으려고 함수를 호출하여
콤보박스의 컨트롤 변수를 이용하여 문자열을 넣었다.
그랬더니 에러, 메모리 릭 주루루룩~
m_pSetEvtFilterDlg = new CSetEvtFilterDlg;
if (NULL == m_pSetEvtFilterDlg)
{
MessageBox(_T("대화상자 열기 실패"), _T("오류"), MB_OK | MB_ICONSTOP);
return;
}
m_pSetEvtFilterDlg->SetEvtFilterDataList(m_pDoc->GetEvtLogNameList(), m_pDoc->GetEvtFilterData());
m_pSetEvtFilterDlg->DoModal();
원인은 컨트롤 변수의 AddString() 함수를 이용하여 문자열을 넣는 시점이 DoModal() 이전 이여서 그랬었다.
즉, 다이얼로그가 띄어질때 OnInitUpdate() 함수에서 해주어야 한다.
ComboBox 컨트롤 변수를 사용하여 데이터를 다룰 때
ComboBox 컨트롤이 보이는 상태, 즉 다이얼 로그가 출력 중인 상태에서 다루어야 한다.
BOOL CSetEvtFilterDlg::OnInitDialog()
{
CDialog::OnInitDialog();
INT nLogNameListCount = m_sLogNameList.GetCount();
POSITION pos = m_sLogNameList.GetHeadPosition();
for (INT nIndex = 0; nIndex < nLogNameListCount; nIndex++)
{
CString sLogName = m_sLogNameList.GetNext(pos);
m_ctrlLogName.AddString(sLogName);
}
m_ctrlLogName.SetCurSel(0);
return TRUE;
}
cf ) SetCurSel(처음에 보여줄 아이템의 인덱스);