게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[본삭금]MFC에서 윈도우를 분할할 때 달라지는 값에 대해 궁금합니다.
게시물ID : programmer_10976짧은주소 복사하기
작성자 : 여우느님
추천 : 0
조회수 : 600회
댓글수 : 3개
등록시간 : 2015/06/07 19:26:45
옵션
  • 본인삭제금지



한참을 디버깅 모드로 둘러보고 둘러봐도 알기가 어려워 질문합니다.


캡처.JPG

문제의 내용은 좌측의 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의 데이터 내용입니다.

KakaoTalk_20150607_183618530.png
정적 윈도우 분할하면서 위쪽 주석처리 된 문장으로 실행 했을 때 이구요.

 
KakaoTalk_20150607_183532509.png

아래쪽 구조로 실행했을 때 데이터 값입니다.





아래쪽 분할 구조로 실행했을 때에는 데이터가 컬럼에 전달되지만
위쪽의 분할 구조로 실행하면 데이터가 전달되질 않네요.
MSDN에서 멤버함수를 이용한다거나 캐스팅을 통해 핸들 값에 변화를 주면 될까 싶어서 바꿔보기도 했는데
잘 안 되고, 검색을 통해서 해보려니 뚜렷한 답이 나오질 않아 질문드립니다.





전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호