2009-11-28 2 views
0

다음 함수를 사용하고 있습니다 .. .. CFolderDialog .. 대신 폴더 경로를 얻으려면 ... 아래 코드를 확인하십시오. 런타임 오류가 발생합니다. 난에 .. 편집 상자에EditBox-MFC에서 폴더 경로를 인쇄 할 수 없습니다

무효 CSelfExtractorUIDlg :: OnBnClickedButton1()를 {

가 CDialog DLG 폴더 경로 이름을 toprint 시도;

HWND hwnd = NULL; LPCTSTR szCurrent = (LPCTSTR) malloc (25 * sizeof (TCHAR)); szCurrent = NULL; LPTSTR szPath = (LPTSTR) malloc (25 * sizeof (TCHAR)); BOOL check = BrowseForFolder (hwnd, szCurrent, szPath); if (check == TRUE) { dlg.SetDlgItemTextW (IDC_EDIT1, szPath);

}}

BOOL BrowseForFolder (HWND의 HWND, szCurrent LPCTSTR, LPTSTR szPath) { BROWSEINFO BI = {0}; LPITEMIDLIST pidl; TCHAR szDisplay [256]; BOOL retval;

// CoInitialize();

bi.hwndOwner = hwnd; bi.pszDisplayName = szDisplay; bi.lpszTitle = TEXT (" 폴더를 선택하십시오."); bi.ulFlags
= BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; bi.lpfn
= BrowseCallbackProc; bi.lParam = (LPARAM) szCurrent;

pidl = SHBrowseForFolder (&bi);

if (NULL! = pidl) { retval = SHGetPathFromIDList (pidl, szPath); CoTaskMemFree (pidl); } else { retval = FALSE; }

if (! retval) { szPath [0] = TEXT ('\ 0'); }

CoUninitialize(); 반환 retval;

} 정적 INT CALLBACK BrowseCallbackProc (HWND의 HWND, UINT uMsg, LPARAM lParam에, LPARAM lpData) { BFFM_INITIALIZED 메시지 가 개시 경로에 대한 경로를 설정 // 수신 // 경우.
스위치 (uMsg) {경우 BFFM_INITIALIZED : {if (NULL! = lpData) {SendMessage (hwnd, BFFM_SETSELECTION, TRUE, lpData); } }}

return 0; // 함수는

답변

0

25 자로 전체 경로 길이가 약간 짧게 보입니다. MAX_PATH를 사용합니다.

+0

tanx for ur reply..but 문제가 해결되었습니다 ... 편집 컨트롤에 대해 대화 상자 모달을 사용했습니다. dlg.SetdlgItemText 대신 SetdlgItemText (....)를 시도했습니다.그것의 작동 gr8 – kiddo

+0

당신이 일하고있어 기뻐요,하지만 그 문제는 런타임 오류가 발생할 것 같지 않습니다. –

관련 문제