📄 popfile.c
字号:
#include <windows.h>
#include <commdlg.h>
static OPENFILENAME ofn;
//////////////////////////////////////////////////
void PopFileInitialize(HWND hwnd)
{
static TCHAR szFilter[]=TEXT("Text Files(*.TXT)\0*.txt\0")\
TEXT("ASCII Files(*.ASC)\0*.asc\0")\
TEXT("ALL Files(*.*)\0*.*\0");
ofn.lStructSize =sizeof(OPENFILENAME);
ofn.hwndOwner =hwnd;
ofn.hInstance =NULL;
ofn.lpstrFilter =szFilter;
ofn.lpstrCustomFilter=NULL;
ofn.nMaxCustFilter =0;
ofn.nFilterIndex =0;
ofn.lpstrFile =0;
ofn.nMaxFile =MAX_PATH;
ofn.lpstrFileTitle =0;
ofn.nMaxFileTitle =MAX_PATH;
ofn.lpstrInitialDir =0;
ofn.lpstrTitle =0;
ofn.Flags =0;
ofn.nFileOffset =0;
ofn.nFileExtension =0;
ofn.lpstrDefExt =TEXT("txt");
ofn.lCustData =0L;
ofn.lpfnHook =0;
ofn.lpTemplateName =0;
}
////////////////////////////////////////////////////////
BOOL PopFileOpenDlg(HWND hwnd,PTSTR pstrFileName,PTSTR pstrTitleName)
{
ofn.hwndOwner=hwnd;
ofn.lpstrFile=pstrFileName;
ofn.lpstrFileTitle=pstrTitleName;
ofn.Flags=OFN_HIDEREADONLY|OFN_CREATEPROMPT;
return GetOpenFileName(&ofn);
}
//////////////////////////////////////////////////////////
BOOL PopFileRead(HWND hwndEdit,PTSTR pstrFileName)
{
BYTE bySwap;
DWORD dwBytesRead;
HANDLE hFile;
int i,iFileLength,iUniTest;
PBYTE pBuffer,pText,pConv;
if(INVALID_HANDLE_VALUE==(hFile=(CreateFile(pstrFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL))))
return FALSE;
iFileLength=GetFileSize(hFile,NULL);
pBuffer=malloc(iFileLength+2);
ReadFile(hFile,pBuffer,iFileLength,&dwBytesRead,NULL);
CloseHandle(hFile);
pBuffer[iFileLength]='\0';
pBuffer[iFileLength+1]='\0';
iUniTest=IS_TEXT_UNICODE_SIGNATURE|IS_TEXT_UNICODE_REVERSE_SIGNATURE;
if(IsTextUnicode(pBuffer,iFileLength,&iUniTest))
{
pText=pBuffer+2;
iFileLength-=2;
if(iUniTest&IS_TEXT_UNICODE_REVERSE_SIGNATURE)
{
for(i=0;i<iFileLength/2;i++)
{
bySwap=((BYTE*)pText)[2*i];
((BYTE*)pText)[2*i]=((BYTE*)pText)[2*i+1];
((BYTE*)pText)[2*i+1]=bySwap;
}
}
pConv=malloc(iFileLength+2);
#ifndef UNICODE
WideCharToMultiByte(CP_ACP,0,(PWSTR)pText,-1,pConv,iFileLength+2,0,0);
#else
lstrcpy((PTSTR)pConv,(PTSTR)pText);
#endif
}
else
{
pText=pBuffer;
pConv=malloc(2*iFileLength+2);
#ifdef UNICODE
MultiBytetoWideChar(CP_ACP,0,pText,-1,(PTSTR)pConv,iFileLength+1);
#else
lstrcpy((PTSTR)pConv,(PTSTR)pText);
#endif
}
SetWindowText(hwndEdit,(PTSTR)pConv);
free(pBuffer);
free(pConv);
return 1;
}
////////////////////////////////////////////////////////
PopFileSaveDlg( HWND hwnd,PTSTR pstrFileName,PTSTR pstrTitleName)
{
ofn.hwndOwner =hwnd;
ofn.lpstrFile =pstrFileName;
ofn.lpstrFileTitle =pstrTitleName;
ofn.Flags =OFN_OVERWRITEPROMPT;
return GetSaveFileName(&ofn);
}
//////////////////////////////////////////////////////////
BOOL PopFileWrite(HWND hwndEdit,PTSTR pstrFileName)
{
DWORD dwBytesWritten;
HANDLE hFile;
int iLength;
PTSTR pstrBuffer;
WORD wByteOrderMark=0xFEFF;
if(INVALID_HANDLE_VALUE==(hFile=CreateFile(pstrFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL)))
return 0;
iLength=GetWindowTextLength(hwndEdit);
pstrBuffer=(PTSTR)malloc((iLength+1)*sizeof(TCHAR));
if(!pstrBuffer)
{
CloseHandle(hFile);
return 0;
}
#ifdef UNICODE
WriteFile(hFile,&wBytesOrderMark,2&dwBytesWritten,NULL);
#endif
GetWindowText(hwndEdit,pstrBuffer,iLength+1);
WriteFile(hFile,pstrBuffer,iLength*sizeof(TCHAR),&dwBytesWritten,NULL);
if(iLength*sizeof(TCHAR)!=(int)dwBytesWritten)
{
CloseHandle(hFile);
free(pstrBuffer);
return 0;
}
CloseHandle(hFile);
free(pstrBuffer);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -