mfc_file_manage_2 - 8BitsCoding/RobotMentor GitHub Wiki


BOOL CMFCApplication1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 이 λŒ€ν™” μƒμžμ˜ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.  μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ£Ό 창이 λŒ€ν™” μƒμžκ°€ 아닐 κ²½μš°μ—λŠ”
	//  ν”„λ ˆμž„μ›Œν¬κ°€ 이 μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, TRUE);			// 큰 μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, FALSE);		// μž‘μ€ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.

	// TODO: 여기에 μΆ”κ°€ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

	wchar_t temp_path[MAX_PATH];
	int len = GetCurrentDirectory(MAX_PATH, temp_path);	// C:\temp μ΄λŸ°μ‹μœΌλ‘œ κ²½λ‘œκ°€ λ“€μ–΄μ˜΄
	temp_path[len++] == '\\';	// C:\temp\둜 경둜λͺ…을 μˆ˜μ •
	temp_path[len] == 0;		// λ§ˆμ§€λ§‰μ— NULLλ„£λŠ” 것도 μžŠμ§€ 말기

	SetDlgItemText(IDC_L_PATH_EDIT, temp_path);
	SetDlgItemText(IDC_R_PATH_EDIT, temp_path);

	DirToList(&m_left_list, temp_path);
	DirToList(&m_right_list, temp_path);

	return TRUE;  // 포컀슀λ₯Ό μ»¨νŠΈλ‘€μ— μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ TRUEλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
}
void CMFCApplication1Dlg::DirToList(CListBox* ap_list_box, CString a_path)
{
	// κΈ°μ‘΄ν•­λͺ©μ œκ±°
	ap_list_box->ResetContent();

	CString path;
	WIN32_FIND_DATA file_data;
	a_path += L"\\";
	HANDLE h_file_list = FindFirstFile(a_path+L"*.*", &file_data);
	if (h_file_list != INVALID_HANDLE_VALUE) {
		do {
			//if (!(file_data.cFileName[0] == '.' && file_data.cFileName[1] == 0)) {// *.* 티렉토리 μ œμ™Έν•˜κΈ°
				path = file_data.cFileName;
				if (file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) path = L"[" + path + L"]";
				ap_list_box->InsertString(-1, path);
			//}
		} while (FindNextFile(h_file_list, &file_data));
		FindClose(h_file_list);
	}
}
void CMFCApplication1Dlg::ChangeDir(CListBox * ap_list_box, int a_path_ctrl_id)
{
	CString str, path;
	int index = ap_list_box->GetCurSel();

	ap_list_box->GetText(index, str);
	if (str[0] == '[') {		// 디렉터리
		GetDlgItemText(a_path_ctrl_id, path);
		str.TrimLeft('[');
		str.TrimRight(']');

		if (str == L"..") {
			// ex. c:\temp\aa -> c:\temp\

			path.TrimRight('\\');
			int pos = path.ReverseFind('\\');
			path.Delete(pos + 1, path.GetLength() - pos - 1);
		}
		else {
			// ex. c:\temp\ + aa -> c:\temp\aa

			path += L"\\";
			path += str;

			// ex. c:\temp\aa -> c:\temp\aa\

			//path += L"\\";
		}
		SetDlgItemText(a_path_ctrl_id, path);
		DirToList(ap_list_box, path);
	}
}

void CMFCApplication1Dlg::OnLbnDblclkLeftList()
{
	ChangeDir(&m_left_list, IDC_L_PATH_EDIT);
}


void CMFCApplication1Dlg::OnLbnDblclkRightList()
{
	ChangeDir(&m_right_list, IDC_R_PATH_EDIT);
}