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

📄 openfile.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*__________________________________________________________________________
 Copyright (C) 2002 PGP Corporation
 All rights reserved.
 
 $Id: openfile.c,v 1.7 2002/10/31 23:45:37 wjb Exp $
__________________________________________________________________________*/
#include "precomp.h"

typedef struct 
{
	BOOL bAuxButton;
	char *szCD;
	char *szButtonText;
} CUSTOMDLGDATA;

#define OFNBUFFSIZE 25000

BOOL 
#ifndef WIN32
FAR __export
#endif // WIN32
PASCAL FileDlgHookProc(HWND hDlg, unsigned message,
                           WORD wParam, LONG lParam)
{ 
	switch (message)
    {
        case WM_INITDIALOG:
		{
			CUSTOMDLGDATA *cdd;

			cdd=(CUSTOMDLGDATA *)(((OPENFILENAME *)lParam)->lCustData);

			// need to save away the pointer to our structure...
			SetWindowLong(hDlg,GWL_USERDATA,(long)cdd);
			
			// Set the text for the additional button
			SetWindowText(GetDlgItem(hDlg,IDC_CLIPBOARD),cdd->szButtonText);
			return TRUE;
		}
     
        case WM_COMMAND:
             switch(wParam)
             {
                case IDC_CLIPBOARD:
				{
					CUSTOMDLGDATA *cdd;

					cdd=(CUSTOMDLGDATA *)GetWindowLong(hDlg,GWL_USERDATA);

                    cdd->bAuxButton=TRUE;

					if(cdd->szCD!=NULL)
					{
						GetCurrentDirectory(MAX_PATH,
							cdd->szCD);
					}

					PostMessage(GetParent(hDlg), WM_COMMAND, IDCANCEL, 0);
					break;
				}
             }
             break;
                           
    }
      
    return FALSE;
}

#ifdef WIN32 // Translate Multi for Win95 and WinNT

FILELIST *TranslateMulti(char *FileString)
{
	char *FileName;
	char *FilePath;
	FILELIST *ListHead,*Current;
	int FirstFile;
	char name[MAX_PATH];

	FirstFile=0;

	while(FileString[FirstFile]!=0)
	{
		FirstFile++;
	}

	FirstFile++;

	ListHead=Current=0;
	FilePath=FileString;
	FileName=&FileString[FirstFile];

	while(TRUE)
	{
		strcpy(name,FilePath);

		if((*FileName)!=0)
		{
			strcat(name,"\\");
			strcat(name,FileName);
		}

		PGPscAddToFileList(&ListHead,name,NULL,NULL);

		while((*FileName)!=0)
		{
			FileName++;
		}

		FileName++;

		if((*FileName)==0)
			break;
	}

	return ListHead;
}

#else // Translate Multi For Win3.1

FILELIST *TranslateMulti(char *FileString)
{
	char *FileName;
	char *FilePath;  
	char *FileStart;
	FILELIST *ListHead;
	int FirstFile;
    BOOL OneMore;
	char name[MAX_PATH];
    
	FirstFile=0;

	while((FileString[FirstFile]!=' ')&&(FileString[FirstFile]!=0))
	{ 
		FirstFile++;
	}
    
    FileString[FirstFile]=0;
    
	FirstFile++;

	ListHead=0;
	FilePath=FileString;
	FileName=&FileString[FirstFile];
    
    OneMore=TRUE;
    
	while(OneMore)
	{
	FileStart=FileName;
	
	while(((*FileName)!=' ')&&((*FileName)!=0))
	{
		FileName++;
	}
 
 	if((*FileName)==0)
		OneMore=FALSE;
	
	*FileName=0;
	                                
//    MessageBox(NULL,FilePath,FileStart,MB_OK);
    
	strcpy(name,FilePath);
	if((*FileStart)!=0)
	{
		strcat(name,"\\");
		strcat(name,FileStart);
    }
    
    AddToFileList(&ListHead,name);
   
	FileName++;
	}

	return ListHead;
}

#endif // WIN32

BOOL GetFileName(HWND hwnd,
				 char *lpszMessage,
				 FILELIST **FileList,
				 char *szButtonText,
				 char *FilterString,
				 BOOL *bAux,
				 char *szCD)
{
	char *OriginalFile;
	BOOL ReturnValue;
    OPENFILENAME OriginalFileName;    
	DWORD OFN_Error,Flags;
	CUSTOMDLGDATA cdd;

	// Get 40K for file selector
	OriginalFile=(char *)malloc(OFNBUFFSIZE); 
    
	memset(OriginalFile,0x00,OFNBUFFSIZE);

	OriginalFileName.lStructSize=sizeof(OPENFILENAME);
    OriginalFileName.hwndOwner=hwnd;
    OriginalFileName.hInstance=g_hinst;
    OriginalFileName.lpstrFilter=FilterString;
    OriginalFileName.lpstrCustomFilter=NULL;
    OriginalFileName.nMaxCustFilter=0;
    OriginalFileName.nFilterIndex=1;
    OriginalFileName.lpstrFile=OriginalFile;
    OriginalFileName.nMaxFile=OFNBUFFSIZE;
    OriginalFileName.lpstrFileTitle=NULL;
    OriginalFileName.nMaxFileTitle=0;
    OriginalFileName.lpstrInitialDir=NULL;
    OriginalFileName.lpstrTitle=lpszMessage;
	Flags=OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY |
		OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | 
		OFN_ALLOWMULTISELECT | OFN_NOCHANGEDIR;
	if(szButtonText!=NULL)
		Flags|=OFN_ENABLEHOOK | OFN_ENABLETEMPLATE;
    OriginalFileName.Flags=Flags;
#ifdef WIN32
    OriginalFileName.Flags=OriginalFileName.Flags | OFN_EXPLORER;
#endif
    OriginalFileName.nFileOffset=0;
    OriginalFileName.nFileExtension=strlen(OriginalFile);
    OriginalFileName.lpstrDefExt=0;

	cdd.bAuxButton=FALSE;
	cdd.szButtonText=szButtonText;
	cdd.szCD=szCD;

    OriginalFileName.lCustData=(LPARAM)(&cdd);
	if(szButtonText!=NULL)
	{
#ifdef WIN32
		OriginalFileName.lpfnHook=
			(LPOFNHOOKPROC)FileDlgHookProc;
		OriginalFileName.lpTemplateName=
			MAKEINTRESOURCE(IDD_CUST32DLG);
#else
		OriginalFileName.lpfnHook=
			MakeProcInstance(FileDlgHookProc,g_hinst);
		OriginalFileName.lpTemplateName=
			MAKEINTRESOURCE(IDD_CUST16DLG);
#endif
	}
	else
	{
		OriginalFileName.lpfnHook=NULL;
		OriginalFileName.lpTemplateName=NULL;
	}

	if(GetOpenFileName(&OriginalFileName))
	{
		ReturnValue = TRUE;

		*FileList=TranslateMulti(OriginalFileName.lpstrFile);
	}
	else
	{
		if(cdd.bAuxButton==TRUE)
		{
			*FileList=0;
			ReturnValue = TRUE;
		}
		else
		{
			OFN_Error=CommDlgExtendedError();
			ReturnValue = FALSE;
		}
	}
    
#ifndef _WIN32
    FreeProcInstance(OriginalFileName.lpfnHook);
#endif // !_WIN32

	memset(OriginalFile,0x00,OFNBUFFSIZE);
	free(OriginalFile);
    
	if(bAux!=NULL)
		*bAux=cdd.bAuxButton;

	return(ReturnValue);
}


/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

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