?? filedlg.c
字號:
}else SendDlgItemMessage (hWnd, fileListID, LB_ADDSTRING, 0, (LPARAM)pDirEnt->d_name); } } closedir(dir);}//leon end/////////////////////////////////////////////////////////////////static intWinFileProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam){ switch (message) { case MSG_CREATE: break; case MSG_INITDIALOG: { PFILEDLGDATA pWinFileData = (PFILEDLGDATA)lParam; SetWindowAdditionalData2 (hDlg, (DWORD)lParam); myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, NULL); SetWindowText (GetDlgItem (hDlg, IDC_PATH), pWinFileData->filepath); //SetFocus (GetDlgItem (hDlg, IDC_FILECHOISE)); return 1; } break; case MSG_COMMAND: { PFILEDLGDATA pWinFileData = (PFILEDLGDATA) GetWindowAdditionalData2 (hDlg); int nSelect; int code = HIWORD (wParam); int id = LOWORD (wParam); char msg[50]; switch (id) { case IDC_DIRCHOISE: { char dir[NAME_MAX + 1]; if (code == LBN_DBLCLK){ nSelect = SendDlgItemMessage(hDlg, IDC_DIRCHOISE, LB_GETCURSEL, 0, 0); if (nSelect == -1) break; SendDlgItemMessage(hDlg, IDC_DIRCHOISE, LB_GETTEXT, nSelect, (LPARAM)dir); if (strcmp (dir, ".") == 0) break; else if (strcmp(dir, "..") == 0) GetParentDir (pWinFileData->filepath); else { if (pWinFileData->filepath [strlen (pWinFileData->filepath) - 1] != '/') strcat (pWinFileData->filepath, "/"); strcat (pWinFileData->filepath, dir); strcat (pWinFileData->filepath, "/"); if (access (pWinFileData->filepath, R_OK) == -1) { sprintf (msg, "No read permission to %s! \n", pWinFileData->filepath); MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP); GetParentDir (pWinFileData->filepath); } } GetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), dir, NAME_MAX); SetWindowText (GetDlgItem (hDlg, IDC_PATH), pWinFileData->filepath); if (dir[0] == '\0') myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, NULL); else myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, dir); } } break; case IDC_FILECHOISE: { if (code == LBN_SELCHANGE) { nSelect = SendDlgItemMessage(hDlg, IDC_FILECHOISE, LB_GETCURSEL, 0, 0); if(nSelect != -1) SendDlgItemMessage(hDlg, IDC_FILECHOISE, LB_GETTEXT, nSelect, (LPARAM)pWinFileData->filename); SetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), pWinFileData->filename); } } break; ////////////////////////////////////////////////////////////// case IDC_HOME: { char a1 [PATH_MAX + 1]; char *filter = a1; #ifndef __ECOS strcpy (pWinFileData->filepath, getpwuid (getuid ())->pw_dir);#else strcpy (pWinFileData->filepath, "/");#endif SetWindowText (GetDlgItem (hDlg, IDC_PATH), pWinFileData->filepath); GetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), filter, NAME_MAX); if (filter[0] == '\0') myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, NULL); else myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, filter); } break; case IDC_UP: { char a1[NAME_MAX + 1]; char *filter = a1; GetParentDir (pWinFileData->filepath); SetWindowText (GetDlgItem (hDlg, IDC_PATH), pWinFileData->filepath); GetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), filter, NAME_MAX); if (filter[0] == '\0') myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, NULL); else myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, filter); } break; case IDC_FULLFILENAME: { char dir[PATH_MAX + 1]; char fn[PATH_MAX + NAME_MAX + 1]; char a[NAME_MAX + 1]; char *filter = a; char msg[50]; int i, nParent = 0; memset (dir, 0, PATH_MAX +1); if (code == EN_ENTER ) { //Add the response to EN_TAB later GetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), fn, NAME_MAX); for (i = strlen(fn)-1; i>=0; i--) { if (fn [i] == '/') { if (fn [1] != 0) nParent = i; else nParent = 1; strncpy (filter, fn+i+1 , NAME_MAX); //just path only, no filter if (i == strlen (fn)-1) { filter = NULL; SetWindowText (GetDlgItem (hDlg, IDC_FULLFILENAME), ""); }else SetWindowText (GetDlgItem (hDlg, IDC_FULLFILENAME), filter); fn[i+1] = 0; break; } } // filter in the current path if (nParent == 0) { //file change if (strlen(fn)==0) filter = NULL; else strncpy (filter, fn , NAME_MAX); myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, filter); // have new path }else { if (fn[0] == '/') //absolute path strncpy (dir, fn, PATH_MAX); else { //relative path if (pWinFileData->filepath [strlen (pWinFileData->filepath)-1] != '/') strcat(pWinFileData->filepath,"/"); strncpy (dir, pWinFileData->filepath, PATH_MAX); strcat (dir, fn); } if (access (dir, F_OK) == -1){ sprintf (msg, "對不起,未找到指定的目錄:\n\n%s\n", fn); MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP); }else { if (access (dir, R_OK) == -1) { sprintf (msg, "No Read permission to %s !\n", fn); MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP); }else if ((pWinFileData->IsSave) && (access (dir, W_OK) == -1)) { sprintf (msg, "No Write permission to %s !\n", fn); MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP); }else { strncpy (pWinFileData->filepath, dir, PATH_MAX); //dir change myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, filter); } } } } } break; case IDOK: { char a1[NAME_MAX + 1]; char a2[NAME_MAX + PATH_MAX + 1]; char *filter = a1; char *fullname = a2; nSelect = SendDlgItemMessage(hDlg, IDC_FILECHOISE, LB_GETCURSEL, 0, 0); if (nSelect != -1) { SendDlgItemMessage (hDlg, IDC_FILECHOISE, LB_GETTEXT, nSelect, (LPARAM)pWinFileData->filename); GetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), filter, NAME_MAX); //make up full file name strncpy (pWinFileData->filefullname,pWinFileData->filepath, PATH_MAX); if (pWinFileData->filepath[strlen(pWinFileData->filepath)-1] != '/') strcat(pWinFileData->filefullname,"/"); strncpy (fullname, pWinFileData->filefullname, PATH_MAX); if (pWinFileData->IsSave) { if ((strchr(filter, '*') == NULL) && (strchr (filter, '?') == NULL)) { strcat (fullname, pWinFileData->filename); if (strcmp (filter, pWinFileData->filename) == 0) { if (access (fullname, W_OK) == -1) { sprintf (msg, "No Write permission to %s !\n", fullname); MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP); }else if (access (fullname, X_OK) == -1) { sprintf (msg, "No execute permission to %s !\n", fullname); MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP); }else { strncpy (pWinFileData->filename, filter, NAME_MAX); strncpy (pWinFileData->filefullname, fullname, NAME_MAX + PATH_MAX + 1); EndDialog(hDlg,IDOK); } }else { strncpy (pWinFileData->filefullname, fullname, NAME_MAX + PATH_MAX + 1); EndDialog(hDlg,IDOK); } } }else { strcat (pWinFileData->filefullname,pWinFileData->filename); if (strcmp (filter, pWinFileData->filename) == 0) EndDialog(hDlg,IDOK); } }else if (pWinFileData->IsSave) { //make up full file name strcpy (pWinFileData->filefullname,pWinFileData->filepath); if (pWinFileData->filepath[strlen(pWinFileData->filepath)-1] != '/') strcat(pWinFileData->filefullname,"/"); GetWindowText(GetDlgItem(hDlg, IDC_FULLFILENAME), filter, NAME_MAX); strcat (pWinFileData->filefullname, filter); EndDialog(hDlg,IDOK); } } break; } break; } break; } return DefaultDialogProc (hDlg, message, wParam, lParam);}int OpenFileDialog (HWND hWnd, BOOL isSave, PFILEDLGDATA pmwfi){ DLGTEMPLATE WinFileDlg = { WS_BORDER | WS_CAPTION, WS_EX_NONE, 50, 50, 330, 250, NULL, 0, 0, 12, NULL }; if (pmwfi == NULL) return FILE_ERROR_PARAMERR; if (access (pmwfi->filepath, F_OK) == -1) return FILE_ERROR_PATHNOTEXIST; WinFileDlg.caption = (isSave)?"保存文件":"打開文件"; WinFileDlg.controls = WinFileCtrl; return DialogBoxIndirectParam (&WinFileDlg, hWnd, WinFileProc, (LPARAM)(pmwfi));}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -