我有这个对话框:
ID__BATERIA __FAX DIALOGEX 0, 0, 235, 86
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Nueva batería de fax"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
结束
我希望组合框成为文件选择器。所以我写了这个:
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] 而不是进入并显示文件。
谁能帮帮我?
非常感谢。
更新:
好的,我改变了它,现在它是一个简单的组合框。仍然当我双击目录时它不会进入并列出里面的文件。有什么想法吗?
更新:
终于成功了。
最佳答案
来自 http://msdn.microsoft.com/en-us/library/bb775808.aspx
“此通知消息仅针对具有 CBS_SIMPLE 样式的组合框出现。在具有 CBS_DROPDOWN 或 CBS_DROPDOWNLIST 样式的组合框中,无法进行双击,因为单击会关闭列表框。”
关于c++ - 如何在 VC++ 2008 中使用组合框制作文件选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232791/