2009-08-05 4 views
2

J'ai cette boîte de dialogue:Comment puis-je créer un sélecteur de fichier avec une liste déroulante dans VC++ 2008?

ID__BATERIA __FAX DIALOGEX 0, 0, 235, 86

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Nueva Bateria de fax" FONT 8, "MS Shell Dlg", 400, 0, 0x1

BEGIN

DEFPUSHBUTTON "OK",IDOK,120,65,50,14 
PUSHBUTTON  "Cancel",IDCANCEL,175,65,50,14 
LTEXT   "Archivo",IDC_STATIC,20,12,25,8 
LTEXT   "Descripción",IDC_STATIC,20,40,37,8 
EDITTEXT  IDC_DESCBATER,65,38,120,13,ES_AUTOHSCROLL 
COMBOBOX  IDC_ARCH2,65,10,120,60,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP 

FIN

I voulez que la liste déroulante soit un sélecteur de fichier. J'ai donc écrit ceci:

BOOL CALLBACK BateriaFaxDlg (HWND hDlg, UINT msg, WPARAM wParam, lParam lParam) {

char descripcion[100]; 
char archivo[20]; 

switch (msg)     /* manipulador del mensaje */ 
{ 
    case WM_INITDIALOG: 
     SendMessage(GetDlgItem(hDlg, IDC_ARCH2), CB_DIR, DDL_READWRITE | DDL_DIRECTORY, (LPARAM)"*");  
     return TRUE; 
    case WM_COMMAND: 
     switch (LOWORD(wParam)) { 
     case IDOK: 
      SendDlgItemMessage(hDlg, IDC_ARCH2, WM_GETTEXT, 20, (LPARAM)archivo); 
      GetDlgItemText(hDlg, IDC_DESCBATER, descripcion , 100); 
      actualizarBaterias("FAX", archivo, descripcion); 
      EndDialog(hDlg, FALSE); 
      break; 
     case IDCANCEL: 
      EndDialog(hDlg, FALSE); 
      break; 
     case IDC_ARCH2:    
      switch(HIWORD(wParam)) { 
     case CBN_DBLCLK: 
        if(DlgDirSelectEx(hDlg, archivo, 512, IDC_ARCH2)) {       
         // DlgDirList(hDlg, "*", IDC_ARCH2, ID_TITULO, DDL_DIRECTORY | DDL_DRIVES); 
         SendMessage(GetDlgItem(hDlg, IDC_ARCH2), CB_DIR, 0, (LPARAM)"*"); 
        // IniciarLista(hwnd, cad); 
        } 
       break; 
      } 
      break; 
     default: 
      break;   
     return TRUE; 
     } 
} 
return FALSE; 

}

Il montre correctement les fichiers et les repertoires, mais quand je essayez d'entrer dans un répertoire, cela ne fonctionnera pas. La chose que je sélectionne est [dir] au lieu d'aller à l'intérieur et montrant les fichiers.

Quelqu'un peut-il m'aider?

Merci beaucoup.

MISE À JOUR:

Ok, je l'ai changé et maintenant il est un simple ComboBox. Encore quand je double-clique sur les répertoires, il n'entre pas et liste les fichiers à l'intérieur. Des idées?

MISE À JOUR:

Cela fonctionne enfin.

Répondre

1

De http://msdn.microsoft.com/en-us/library/bb775808.aspx

« Ce message de notification ne se produit que pour une zone de liste déroulante avec le style CBS_SIMPLE. Dans une zone de liste déroulante avec le style CBS_DROPDOWN ou CBS_DROPDOWNLIST, un double-clic ne peut pas se produire parce qu'un seul clic ferme la zone de liste "

+0

Merci beaucoup, je n'ai pas remarqué à ce sujet. Quand j'ai choisi le type de Combobox je pensais seulement à être petit. – deb