Как сделать селектор файлов с помощью выпадающего списка в VC ++ 2008? - PullRequest
2 голосов
/ 05 августа 2009

У меня есть этот диалог:

ID__BATERIA __FAX DIALOGEX 0, 0, 235, 86

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

ЗАГОЛОВОК "Новая факс" FONT 8, "MS Shell Dlg", 400, 0, 0x1

НАЧАТЬ

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 

END

Я хочу, чтобы выпадающий список был селектором файлов. Итак, я написал это:

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;

}

Он правильно показывает файлы и каталоги, но когда я пытаюсь войти в каталог, он не работает. Вместо этого я выбираю [dir], чтобы зайти внутрь и показать файлы.

Кто-нибудь может мне помочь?

Большое спасибо.

UPDATE:

Хорошо, я изменил его, и теперь это простой ComboBox. Тем не менее, когда я дважды щелкаю по каталогам, он не входит и не перечисляет файлы внутри. Есть идеи?

UPDATE:

Наконец-то работает.

1 Ответ

1 голос
/ 05 августа 2009

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

"Это уведомление появляется только для поля со списком со стилем CBS_SIMPLE. В поле со списком со стилем CBS_DROPDOWN или CBS_DROPDOWNLIST двойной щелчок не может произойти, потому что один щелчок закрывает окно списка."

...