2009-11-28 3 views
0

J'utilise la fonction suivante .. au lieu de CFolderDialog .. pour obtenir le chemin du dossier ... vérifier mon code ci-dessous .... je reçois une erreur d'exécution lorsque j'essaie toprint le nom du chemin du dossier dans une zone d'édition ..Impossible d'imprimer le chemin du dossier dans EditBox- MFC

vide CSelfExtractorUIDlg :: OnBnClickedButton1() {

CDialog DLG;

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

}

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

// CoInitialize();

bi.hwndOwner = hwnd; bi.pszDisplayName = szDisplay; bi.lpszTitle = TEXT ("Please choisissez un dossier."); bi.ulFlags
= BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; bi.lpfn
= BrowseCallbackProc; bi.lParam = (LPARAM) szCurrent;

pidl = SHBrowseForFolder (& bi);

si (NULL! = Pidl) { retval = SHGetPathFromIDList (pidl, szPath); CoTaskMemFree (pidl); } else { retval = FAUX; }

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

CoUninitialize(); retour retval;

} static int CALLBACK BrowseCallbackProc (HWND hwnd, UINT uMsg, lParam lParam, lParam lpData) {// Si le message est BFFM_INITIALIZED reçu // définir le chemin sur la voie de départ .
interrupteur (uMsg) {case BFFM_INITIALIZED: {if (! NULL = lpData) {SendMessage (hwnd, BFFM_SETSELECTION, TRUE, lpData); } }}

return 0; // La fonction

Répondre

0

25 caractères semble un peu court pour un chemin complet, j'utiliserais MAX_PATH.

+0

tanx pour votre réponse, mais j'ai corrigé le problème ... J'ai utilisé le dialogue modal pour le contrôle d'édition .. j'ai essayé SetdlgItemText (....) au lieu de dlg.SetdlgItemText ..son travail gr8 – kiddo

+0

Je suis content que vous l'ayez fait fonctionner, mais il ne semble pas que ce problème provoquerait une erreur d'exécution. –

Questions connexes