2009-08-06 45 views
0

我已经用组合框实现了文件选择器。我想将选定的文件名写入日志。问题是,当我从原始目录中选择一个文件时,它很顺利,但是当我从另一个目录中选择一个文件时,它将不起作用。任何人都可以帮忙吗?这是文件选择器的代码,它在对话框中。目录和文件选择器问题(VC++ 2008)

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; 
} 

这是InitCombo:

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); 
    } 
} 

在此先感谢。

回答

0

documentationDlgDirListComboBox

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

你可能想打电话DlgDirSelectComboBoxEx之前缓存当前目录(GetCurrentDirectory),然后将其设置回返回后。或者,不要拨打fopen与相关目录。

0

问题是文件没有打开?如果是这样,我怀疑当前目录正在被文件选择对话框改变,所以新目录不包含一个叫做“conf”的目录。

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