IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Boite de dialogue Parcourir & Console DOS


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut Boite de dialogue Parcourir & Console DOS
    Bonjour,

    Je réalise une application sous une console DOS actuellement. Mon application demande de donner le chemin d'un dossier manuellement du style C:\Test\Temp.

    On me demande d'utiliser une boite de dialogue Windows PARCOURIR pour récupérer le chemin.

    Je ne suis pas sur que cela soit possible.
    J'ai essayé de réutiliser l'exemple suivant mais je ne suis pas arrivé à compiler mon programme par la suite.

    Auriez-vous un exemple simple à me présenter ou des indications ?
    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Console DOS ou console Win32 ?
    Dans le premier cas, tu fais un programme DOS 16 bits qui n'a accès à aucune fonction Windows.
    Dans le second cas, tu peux, un programme console sous Windows peut faire tout ce qu'un programme sans console peut faire, à part répondre à un WaitForInputIdle() ou refuser de quitter quand on le ferme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    C'est une console Win32 avec Visual C++.
    Mais on doit surement faire des modifications dans le main(). Pas simplement un : int main(int argc, char *argv[]) pour utiliser les fonctions de Windows.

  4. #4
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Non, pas nécessairement. On peut utiliser les fonctions Windows dans un programme où le point d'entrée est main().

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    ok merci, je vais essayer de chercher encore pourquoi ce code ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    void CInitControl::OnBrowse() 
    {
    	// TODO: Add your control notification handler code here
    	CString strFolderPath;
    	GetFolder(&strFolderPath, "Sample of  getting folder.", this->m_hWnd, NULL, NULL);
    	CEdit *experiment=(CEdit*)GetDlgItem(IDC_EXPERIMENT);
    	experiment->SetWindowText(strFolderPath);
    }
     
    void CInitControl::GetFolder(CString *strSelectedFolder, const char *lpszTitle, const HWND hwndOwner, const char *strRootFolder, const char *strStartFolder)
    {
    	char pszDisplayName[MAX_PATH];
    	LPITEMIDLIST lpID;
    	BROWSEINFOA bi;
     
    	bi.hwndOwner = hwndOwner;
    	if (strRootFolder == NULL)
    	{
    		bi.pidlRoot = NULL;
    	}
    	else
    	{
    	   LPITEMIDLIST  pIdl = NULL;
    	   IShellFolder* pDesktopFolder;
    	   char          szPath[MAX_PATH];
    	   OLECHAR       olePath[MAX_PATH];
    	   ULONG         chEaten;
    	   ULONG         dwAttributes;
     
    	   strcpy(szPath, (LPCTSTR)strRootFolder);
    	   if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
    	   {
    		   MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szPath, -1, olePath, MAX_PATH);
    		   pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, &chEaten, &pIdl, &dwAttributes);
    		   pDesktopFolder->Release();
    	   }
    	   bi.pidlRoot = pIdl;
    	}
    	bi.pszDisplayName = pszDisplayName;
    	bi.lpszTitle = lpszTitle;
    	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
    	bi.lpfn = 0;
    	if (strStartFolder == NULL)
    	{
    		bi.lParam = FALSE;
    	}
    	else
    	{
    		strTmpPath.Format("%s", strStartFolder);
    		bi.lParam = TRUE;
    	}
    	bi.iImage = NULL;
    	lpID = SHBrowseForFolderA(&bi);
    	if (lpID != NULL){
    		BOOL b = SHGetPathFromIDList(lpID, pszDisplayName);
    		if (b == TRUE)
    		{
    			strSelectedFolder->Format("%s",pszDisplayName);
    		}
    	}
    	else
    	{
    		strSelectedFolder->Empty();
    	}
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1. ce code ne fonctionne pas
    2. C'est du code C++, ça n'a rien à faire dans le forum C.
    3. Ça utilise lourdement les MFC. Pour un programme console, je te conseillerais de ne pas les utiliser et utiliser directement SHBrowseForFolder().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. faire un bouton parcourir qui ouvre la boite de dialogue
    Par julie_lab dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 25/10/2010, 10h45
  2. Console dos : afficher une boîte de dialogue
    Par mister3957 dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 04/11/2008, 08h41
  3. boite de dialogue "parcourir" sous linux
    Par guian dans le forum C
    Réponses: 8
    Dernier message: 29/12/2007, 09h49
  4. une boite de dialogue avec "parcourir"!
    Par moon5 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 04/08/2007, 22h55
  5. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo