문제의 내용은 좌측의 Edit 에 데이터를 입력한 후, '추가' 버튼을 눌러 우측의 리스트 컬럼으로 데이터를 이동시키는게 목적입니다.
윈도우 분할은 CSpitterWnd 클래스로 정적 분할합니다.
메인 프레임 클래스에서 윈도우를 분할하는 코드입니다.
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
//m_wndSplitterHor.CreateStatic(this,1,2);//윈도우를 1행 2열로 정적분할 한다.
//
////첫번째 열(0,0)에 해당하는 뷰 클래스를 붙인다.
//m_wndSplitterHor.CreateView(0,0,RUNTIME_CLASS(CLeftViewDlg),CSize(310,100),pContext);
////두번째 열(0,1)에 해당하는 뷰 클래스를 붙인다.
//
////두번 째 뷰를 다시 2행 1열로 정적분할 한다.
//m_wndSplitterVer.CreateStatic(&m_wndSplitterHor, 2, 1,
// WS_CHILD | WS_VISIBLE,
// m_wndSplitterHor.IdFromRowCol(0, 1));
//m_wndSplitterVer.CreateView(0,0,RUNTIME_CLASS(CFinalExamView),CSize(200,250),pContext);
//m_wndSplitterVer.CreateView(1,0,RUNTIME_CLASS(BottomViewDlg),CSize(200,100),pContext);
m_wndSplitterHor.CreateStatic(this, 1, 2);
m_wndSplitterHor.CreateView(0, 0, RUNTIME_CLASS(CLeftViewDlg), CSize(310, 100), pContext);
m_wndSplitterHor.CreateView(0, 1, RUNTIME_CLASS(CFinalExamView), CSize(400, 100), pContext);
return TRUE;
//return CFrameWndEx::OnCreateClient(lpcs, pContext);
}
일단 위쪽에 주석이 처리된 정적 분할 구조에서는 데이터 입력 후 컬럼으로 데이터가 전달되지 않습니다.
아래쪽 , 주석처리되지 않은 부분에서는 정적 분할 구조에서는 데이터가 컬럼으로 전달됩니다.
저는 일단 위쪽 주석처리된 구조에서 데이터를 받아 컬럼 리스트에 저장하고자 합니다.
추가 버튼의 함수 내부 구조 입니다.
데이터를 받고, 우선 동일한 ID를 가진 사람이 있는지 판단 후에 없을 경우 데이터를 리스트 컬럼으로 이동 시키는 것입니다.
void CLeftViewDlg::OnClickedButtonInsert()
{
// TODO: Add your control notification handler code here
CFinalExamView *pView = (CFinalExamView *)(this)->GetNextWindow();
int nCount = pView->GetListCtrl().GetItemCount();
int nIndex = m_cbDept.GetCurSel();
CString strDept, strID;
UpdateData(TRUE);
if(!(m_strId.IsEmpty() || m_strName.IsEmpty() ||nIndex < 0 || m_strTel.IsEmpty()))
{
for(int i = 0; i < nCount; i++)
{
strID = pView->GetListCtrl().GetItemText(i, 0);
if(strID == m_strId)
{
m_bCheckID = TRUE;
}
}
if(!m_bCheckID)
{
m_cbDept.GetLBText(nIndex, strDept);
LV_ITEM lvItem;
lvItem.mask = LVIF_TEXT;
lvItem.iItem = nCount;
lvItem.iSubItem = 0;
lvItem.pszText = (LPWSTR)(LPCTSTR)m_strId;
pView->GetListCtrl().InsertItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem = nCount;
lvItem.iSubItem = 1;
lvItem.pszText = (LPWSTR)(LPCTSTR)m_strName;
pView->GetListCtrl().SetItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem = nCount;
lvItem.iSubItem = 2;
lvItem.pszText = (LPWSTR)(LPCTSTR)strDept;
pView->GetListCtrl().SetItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem = nCount;
lvItem.iSubItem = 3;
lvItem.pszText = (LPWSTR)(LPCTSTR)m_strTel;
pView->GetListCtrl().SetItem(&lvItem);
m_strId.Empty();
m_strName.Empty();
m_strTel.Empty();
m_cbDept.SetCurSel(-1);
UpdateData(FALSE);
m_bCheckID = FALSE;
}
else
{
m_bCheckID = FALSE;
AfxMessageBox(_T("이미 존재하는 학번입니다."));
}
}
else
{
AfxMessageBox(_T("모든 항목을 입력하세요."));
}
}
각 Edit에 데이터를 입력하고 '추가'버튼을 누르고 위 함수에서 디버깅했을 때 입니다.
그 때 캐스팅 후 받은 pView의 데이터 내용입니다.
정적 윈도우 분할하면서 위쪽 주석처리 된 문장으로 실행 했을 때 이구요.
아래쪽 구조로 실행했을 때 데이터 값입니다.
아래쪽 분할 구조로 실행했을 때에는 데이터가 컬럼에 전달되지만
위쪽의 분할 구조로 실행하면 데이터가 전달되질 않네요.
MSDN에서 멤버함수를 이용한다거나 캐스팅을 통해 핸들 값에 변화를 주면 될까 싶어서 바꿔보기도 했는데
잘 안 되고, 검색을 통해서 해보려니 뚜렷한 답이 나오질 않아 질문드립니다.