⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filedlg.c

📁 libminigui-1.3.0.tar.gz。 miniGUI的库函数源代码!
💻 C
📖 第 1 页 / 共 2 页
字号:
                else if (strcmp(dir, "..") == 0) {                    GetParentDir (pWinFileData->filepath);                        myWinFileListDirWithFilter (hDlg, IDC_DIRCHOISE, IDC_FILECHOISE, pWinFileData->filepath, NULL);                }                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| MB_BASEDONPARENT);                        GetParentDir (pWinFileData->filepath);                    }                }                            GetWindowText (GetDlgItem (hDlg, IDC_FILENAME), 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 || code == LBN_DBLCLK || code == LBN_ENTER) {                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_FILENAME),                        pWinFileData->filename);                }                if (code == LBN_DBLCLK || code == LBN_ENTER) {                    SendNotifyMessage (hDlg, MSG_COMMAND, IDOK, 0);                }            }            break;        }#if 0        case IDC_HOME:        {            char a1 [PATH_MAX + 1];            char *filter = a1;                        strcpy (pWinFileData->filepath, getpwuid (getuid ())->pw_dir);            SetWindowText (GetDlgItem (hDlg, IDC_PATH), pWinFileData->filepath);                        GetWindowText(GetDlgItem(hDlg, IDC_FILENAME), 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;        }#endif        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_FILENAME), 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_FILENAME:        {            char dir[PATH_MAX + 1];            char fn[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_FILENAME), 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_FILENAME), "");                        } else                            SetWindowText (GetDlgItem (hDlg, IDC_FILENAME), 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| MB_BASEDONPARENT);                    } else {                        if (access (dir, R_OK) == -1) {                            sprintf (msg, "不能读取 %s !\n", fn);                            MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP| MB_BASEDONPARENT);                        } else if ((pWinFileData->IsSave) && (access (dir, W_OK) == -1)) {                            sprintf (msg, "对 %s 没有写权限!\n", fn);                            MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP| MB_BASEDONPARENT);                        } else {                            strncpy (pWinFileData->filepath, dir, PATH_MAX);                            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_FILENAME), filter, NAME_MAX);                //make up full file name                if (pWinFileData->filepath[strlen(pWinFileData->filepath)-1] != '/')                    strcat(pWinFileData->filepath,"/");                strncpy (pWinFileData->filefullname,pWinFileData->filepath, PATH_MAX);                            strncpy (fullname, pWinFileData->filefullname, PATH_MAX);                            if (pWinFileData->IsSave) {                    if ((strchr(filter, '*') == NULL)                             && (strchr (filter, '?') == NULL)) {                        strcat (fullname, pWinFileData->filename);                        if (access (fullname, F_OK) != -1) {                            sprintf (msg, "是否要覆盖文件 %s ?\n", fullname);                            if (MessageBox(hDlg, msg, "提示信息", MB_YESNO | MB_ICONQUESTION | MB_BASEDONPARENT) == IDNO)                                break;                        }                        if (strcmp (filter, pWinFileData->filename) == 0) {                            if (access (fullname, W_OK) == -1) {                                sprintf (msg, "对 %s 没有写权限!\n", fullname);                                MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP| MB_BASEDONPARENT);                            } else if (access (fullname, R_OK) == -1) {                                sprintf (msg, "不能读取 %s !\n", fullname);                                MessageBox(hDlg , msg, "提示信息", MB_OK | MB_ICONSTOP| MB_BASEDONPARENT);                            } 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                if (pWinFileData->filepath[strlen(pWinFileData->filepath)-1] != '/')                    strcat(pWinFileData->filepath,"/");                strcpy (pWinFileData->filefullname,pWinFileData->filepath);                GetWindowText(GetDlgItem(hDlg, IDC_FILENAME), filter, NAME_MAX);                strcat (pWinFileData->filefullname, filter);                EndDialog(hDlg,IDOK);            }            break;        }         default:            break;        } /* switch (id) */        break;        }        break;    } /* switch (message) */    return DefaultDialogProc (hDlg, message, wParam, lParam);}#define SPACE_WIDTH     4#define SPACE_HEIGHT    4int OpenFileDialogEx (HWND hWnd, int lx, int ty, int w, int h, PFILEDLGDATA pfdi){    int totalW = w-3*SPACE_WIDTH;    int LstH = h -20- 6*SPACE_HEIGHT - GetSysCharHeight() - 20 - 20 - 20;    //       20: caption                  20: edit 20:button 20:up button    int LstTY = 2*SPACE_HEIGHT+20;        CTRLDATA WinFileCtrl [] =    { /*      { "static", WS_VISIBLE | SS_LEFT,            SPACE_WIDTH, SPACE_WIDTH, 80, GetSysCharHeight(), IDC_STATIC, "选择目录", 0 },        { "static", WS_VISIBLE | SS_LEFT,            SPACE_WIDTH+totalW*2/5, SPACE_WIDTH, 80, GetSysCharHeight(), IDC_STATIC, "选择文件", 0 },        { "button", WS_VISIBLE | WS_TABSTOP ,            SPACE_WIDTH+totalW*2/5+ 60, SPACE_WIDTH, 22, GetSysCharHeight(), IDC_HOME, "Hm", 0 },*/        { "button", WS_VISIBLE | WS_TABSTOP ,            2*SPACE_WIDTH+totalW*2/5 , SPACE_HEIGHT, 80, 20,               IDC_UP, "上一级目录", 0 },        { "listbox", WS_VISIBLE | WS_TABSTOP | LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_SORT,            SPACE_WIDTH, LstTY, totalW*2/5, LstH, IDC_DIRCHOISE, NULL, 0 },        { "listbox",WS_VISIBLE | WS_TABSTOP | LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_SORT,            2*SPACE_WIDTH+totalW*2/5, LstTY, totalW*3/5, LstH, IDC_FILECHOISE, NULL, 0 },                    { "static", WS_VISIBLE | SS_LEFT,            SPACE_WIDTH, LstH+LstTY+SPACE_HEIGHT, 4*GetSysCCharWidth(), GetSysCharHeight(), IDC_STATIC1, "当前路径", 0 },        { "static", WS_VISIBLE | SS_LEFT,            2*SPACE_WIDTH+4*GetSysCCharWidth(), LstH+LstTY+SPACE_HEIGHT, totalW-4*GetSysCCharWidth()-3*SPACE_WIDTH, GetSysCharHeight(), IDC_PATH, "", 0 },        { "static", WS_VISIBLE | SS_LEFT,            SPACE_WIDTH, LstH+LstTY+2*SPACE_HEIGHT+GetSysCharHeight()+1, 2*GetSysCCharWidth(), GetSysCharHeight(), IDC_STATIC2, "文件", 0 },        { "sledit",WS_VISIBLE | WS_TABSTOP | WS_BORDER | LBS_NOTIFY,            2*SPACE_WIDTH+2*GetSysCCharWidth(), LstH+LstTY+2*SPACE_HEIGHT+GetSysCharHeight(), totalW-2*GetSysCCharWidth()-3*SPACE_WIDTH, 18, IDC_FILENAME, NULL, 0 },                { "button", WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON | WS_GROUP,            (totalW-2*40)*2/5+SPACE_WIDTH, LstH+LstTY+3*SPACE_HEIGHT+GetSysCharHeight()+20,40 , 20, IDOK, "确认", 0 },        { "button", WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON,            (totalW-2*40)*3/5+2*SPACE_WIDTH+40, LstH+LstTY+3*SPACE_HEIGHT+GetSysCharHeight()+20, 40, 20, IDCANCEL, "取消", 0 }    };    DLGTEMPLATE WinFileDlg = {#ifdef _FLAT_WINDOW_STYLE        WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX, WS_EX_NONE,#else        WS_BORDER | WS_CAPTION, WS_EX_NONE,#endif        lx, ty, w, h, NULL, 0, 0, 9, NULL };    if (access (pfdi->filepath, F_OK) == -1)         return FILE_ERROR_PATHNOTEXIST;                         WinFileDlg.caption   = (pfdi->IsSave)?"保存文件":"打开文件";    WinFileDlg.controls  = WinFileCtrl;    return DialogBoxIndirectParam (&WinFileDlg, hWnd,            WinFileProc, (LPARAM)(pfdi));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -