<

MFC의 트리메뉴 컨트롤의 아이템 선택 이벤트 후 해당 선택된 아이템의 인덱스를 리턴하는 메소드가 없다.


편법으로 아이템 이름으로 찾는 방법도 있지만 코드가 길어지고 추가/수정이 복잡해진다.


구글링 결과 index를 구하는 방법을 찾았다.


OnTvnSelchanged 이벤트 메소드에서 child 아이템을 루프 태우면서 현재 선택된 item인지 체크하면서 증가 시키는 것이다.


이생각을 왜 못했는지..


코드의 일부는 아래와 같다. 전체는 출처로 이동해서 확인하길 바란다.


 
    int index = 0;
    HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
    HTREEITEM hChild = m_treeCtrl.GetChildItem(NULL);
    while (hChild)
    {
        if (hChild == hItem) break;
        hChild = m_treeCtrl.GetNextItem(hChild, TVGN_NEXT);
        ++index;
    }
출처 : C++/(MFC)트리 컨트롤 몇 번째 아이템인지 조회


C#에서는 FILE 핸들러로 바로 확인이 가능한데 C++는 한줄에 쓰기 번거러워 따로 함수를 만들어서 사용한다.


유니코드가 아닌 프로젝트도 있어 분기처리 해준다.



bool isExistFile(CString _strFile)
{
#ifdef _UNICODE
	return(_waccess_s(_strFile, 0) != -1);
#else
	return (_access_s(_strFile, 0) != -1);
#endif
	
}


MFC에서 ComboBox(콤보박스) 사용시 사용자가 임의적으로 항목을 수정할 수 있다.


물론 수정된 값을 받는 경우도 있지만, 해당 선택된 항목의 index값을 가져와서 쓰는경우 매개변수가 잘못되었다는 등의 오류가 발생 할 수 있다.


사용자가 수정할 항목이 아닌 경우라면 이를 ReadOnly로 바꿔줄 필요가 있다.


ReadOnly 설정은 따로 코드를 수정하는 경우도 있지만, 간단하게 해당 리소스 속성항목에서 


Type를 "Drop List"로 바꿔주면 된다.


아래는 Reference에 나와있는 Style Type별 상태

StyleWhen is list box visibleStatic or edit control
SimpleAlwaysEdit
Drop-downWhen dropped downEdit
Drop-down listWhen dropped downStatic


Create로 생성한 모달리스 다이얼로그(dlgModal2)의 생성하고 show가 되었는지 확인하는 조건식


if( dlgModal2 != NULL && dlgModal2->IsWindowVisible() == TRUE )

보이고 숨길떄에는


dlgModal2.ShowWindow(SW_SHOW);
dlgModal2.ShowWindow(SW_HIDE);


이렇게 사용하면 되고


부모창 destory시 반드시 자식 모달리스도 delete해줘야한다.

c++, mfc

사용한 버젼은 CGridCtrl v2.20 이며 생성된 그리드컨트롤에

체크박스를 생성할때 아래와 같이 추가하면된다.

m_gridBinTable.SetCellType(nRow, nCol, RUNTIME_CLASS(CGridCellCheck));	//
pCell = (CGridCellCheck*)m_gridBinTable.GetCell(nRow, nCol);


출처 : http://bigmark.tistory.com/7


1. 부모 다이얼로그 생성


2. 자식 다이얼로그 생성


- 자식 다이얼로그 속성창에서 style은 child, border는 NONE 으로 설정 변경


3. 부모 다이얼로그의 헤더파일에서 해당 자식 다이얼로그 변수 포인터로 생성


CChildDlg *m_pChildDlg;



4. 부모 다이얼로그의 OnInitDialog에서



m_pChildDlg = new CChildDlg;
m_pChildDlg->Create( CChildDlg::IDD, this );
m_pChildDlg->ShowWindow( SW_SHOW );
m_pChildDlg->MoveWindow( rcDlg ); // 크기는 알아서 맞게 지정


이렇게 하면 자식 다이얼로그가 부모 다이얼로그에 붙는다.

+ Recent posts