콤보박스에 문자열 넣는 시점 - 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(처음에 보여줄 아이템의 인덱스);
Posted by six605
,