c++ - 如何在 VC++ 2008 中使用组合框制作文件选择器?

标签 c++ visual-studio controls combobox

我有这个对话框:

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/

相关文章:

c++ - 在 C++ 中使用 "explicit"关键字没有得到预期的行为

c# - 使用按钮单击 c# 在列表框中选择多个项目

c# - 我在哪里/如何在我的 C# 代码中编写 T-SQL 并获得结果 (Visual Studio 2008)

mysql - 加入两个子查询抛出错误

C# : Direct3D in a control, 和辅助监视器上的全屏 - 最好的方法是什么?

c# - 部分 View 、用户控制或其他?

linux上的c++应用程序,在kill之前挂机

c++ - 使用 sfinae 选出首选的可变参数构造函数

c++ - 使用 filterAcceptsRow 过滤 QTreeView 中的元素

javascript - 将 ASP.Net 控件传递给 JavaScript 函数