0

我已经实现了一个带有组合框的文件选择器。我想将选定的文件名写入日志。问题是当我从原始目录中选择一个文件时它运行良好,但是当我从另一个目录中选择一个文件时它就不起作用了。有人可以帮忙吗?这是文件选择器的代码,它在一个对话框中。

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

char descripcion[100]="";

char archivo[100]="";   
char cad[100];

int i,l;

switch (msg)               

    {
        case WM_INITDIALOG:
            InitCombo(hDlg, "*.*");         
            return TRUE;
            break;
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case IDOK:  

                    i = SendDlgItemMessage(hDlg, IDC_ARCH2, CB_GETCURSEL, 0, 0);
                    if(i >= 0) {
                        SendDlgItemMessage(hDlg, IDC_ARCH2, CB_GETLBTEXT, (WPARAM)i, (LPARAM)archivo);
                    }

                    if (!GetDlgItemText(hDlg, IDC_DESCBATER, descripcion , 100)) {
                        MessageBox(hDlg, "Ambos campos son obligatorios", "ERROR", MB_ICONEXCLAMATION | MB_OK); 
                        break;
                    }
                    actualizarBaterias(GetParent(hDlg), "FAX", archivo, descripcion);
                    EndDialog(hDlg, FALSE);
                break;
                case IDCANCEL:
                    EndDialog(hDlg, FALSE);
                    break;
                case IDC_ARCH2:
                    switch(HIWORD(wParam)) {
                        case CBN_CLOSEUP:
                        case CBN_KILLFOCUS:
                            if(DlgDirSelectComboBoxEx(hDlg, cad, 100, IDC_ARCH2)) {
                                strcat(cad, "*.*");
                                InitCombo(hDlg, cad);
                            }                       
                        break;
                    }
                break;          
                default:
                break;           
           return TRUE;
           }
    }


    return FALSE;
}

这是初始化组合:

void IniciarCombo(HWND hwnd, char* p) {

   char path[100];

   strcpy(path, p);

   DlgDirListComboBox(
    hwnd,           
    path,          
    IDC_ARCH2,      
    ID_TITULO,      
    DDL_DIRECTORY | DDL_DRIVES
   );
   SendDlgItemMessage(hwnd, IDC_ARCH2, CB_SETCURSEL, 0, 1);
}

最后这是我将文件名写入文件的地方。

void actualizarBaterias(HWND hWnd, char *tipo, char *archivo, char *descripcion) {
    FILE *fp;
    HWND hctrl;
    int i;
    HFONT hfont;

    fp = fopen("conf\\Baterias.conf", "a" );
    if (fp) {
        MessageBox(hWnd, "Actuali","error", MB_ICONEXCLAMATION | MB_OK);                                     
        fprintf(fp, "\n%s %s %s", tipo, archivo, descripcion);
        fclose(fp);
    }
}

提前致谢。

4

2 回答 2

0

是文件打不开的问题吗?如果是这样,我怀疑文件选择对话框正在更改当前目录,因此新目录不包含名为“conf”的目录。

您可以尝试为 conf\Baterias.conf 指定绝对路径以确认这是问题所在。

于 2009-08-17T12:33:00.210 回答
0

文档DlgDirListComboBox

如果 lpPathSpec 指定一个目录,则 DlgDirListComboBox 在填充组合框之前将当前目录更改为指定目录。由 nIDStaticPath 参数标识的静态控件的文本设置为新的当前目录的名称。

您可能希望GetCurrentDirectory在调用 之前缓存当前目录 ( ) DlgDirSelectComboBoxEx,然后在返回后将其设置回来。或者,不要fopen使用相对目录调用。

于 2009-08-19T05:24:04.077 回答