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

📄 filedlg.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 2 页
字号:
			}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 + -