129 lines
2.9 KiB
C++
129 lines
2.9 KiB
C++
|
//
|
|||
|
// <20>p<EFBFBD>X<EFBFBD><58><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><4E><EFBFBD>X
|
|||
|
//
|
|||
|
#include "Pathlib.h"
|
|||
|
|
|||
|
string CPathlib::SplitPath( LPCSTR lpszPath )
|
|||
|
{
|
|||
|
CHAR szDrive[ _MAX_DRIVE ];
|
|||
|
CHAR szDir [ _MAX_DIR ];
|
|||
|
CHAR szTemp [ _MAX_PATH+1 ];
|
|||
|
string path;
|
|||
|
::_splitpath( lpszPath, szDrive, szDir, NULL, NULL );
|
|||
|
::_makepath( szTemp, szDrive, szDir, NULL, NULL );
|
|||
|
path = szTemp;
|
|||
|
return path;
|
|||
|
}
|
|||
|
|
|||
|
string CPathlib::SplitFname( LPCSTR lpszPath )
|
|||
|
{
|
|||
|
CHAR szTemp [ _MAX_PATH+1 ];
|
|||
|
string fname;
|
|||
|
::_splitpath( lpszPath, NULL, NULL, szTemp, NULL );
|
|||
|
fname = szTemp;
|
|||
|
return fname;
|
|||
|
}
|
|||
|
|
|||
|
string CPathlib::SplitFnameExt( LPCSTR lpszPath )
|
|||
|
{
|
|||
|
CHAR szFname[ _MAX_FNAME ];
|
|||
|
CHAR szExt [ _MAX_EXT ];
|
|||
|
CHAR szTemp [ _MAX_PATH+1 ];
|
|||
|
string fname;
|
|||
|
::_splitpath( lpszPath, NULL, NULL, szFname, szExt );
|
|||
|
::_makepath( szTemp, NULL, NULL, szFname, szExt );
|
|||
|
fname = szTemp;
|
|||
|
return fname;
|
|||
|
}
|
|||
|
|
|||
|
string CPathlib::MakePath( LPCSTR lpszPath, LPCSTR lpszFname )
|
|||
|
{
|
|||
|
CHAR szDrive[ _MAX_DRIVE ];
|
|||
|
CHAR szDir [ _MAX_DIR ];
|
|||
|
CHAR szTemp [ _MAX_PATH+1 ];
|
|||
|
string path;
|
|||
|
::_splitpath( lpszPath, szDrive, szDir, NULL, NULL );
|
|||
|
::_makepath( szTemp, szDrive, szDir, lpszFname, NULL );
|
|||
|
path = szTemp;
|
|||
|
return path;
|
|||
|
}
|
|||
|
|
|||
|
string CPathlib::MakePathExt( LPCSTR lpszPath, LPCSTR lpszFname, LPCSTR lpszExt )
|
|||
|
{
|
|||
|
CHAR szDrive[ _MAX_DRIVE ];
|
|||
|
CHAR szDir [ _MAX_DIR ];
|
|||
|
CHAR szTemp [ _MAX_PATH+1 ];
|
|||
|
string path;
|
|||
|
::_splitpath( lpszPath, szDrive, szDir, NULL, NULL );
|
|||
|
::_makepath( szTemp, szDrive, szDir, lpszFname, lpszExt );
|
|||
|
path = szTemp;
|
|||
|
return path;
|
|||
|
}
|
|||
|
|
|||
|
string CPathlib::CreatePath( LPCSTR lpszBasePath, LPCSTR lpszPath )
|
|||
|
{
|
|||
|
CHAR szPath[ _MAX_PATH ];
|
|||
|
string path;
|
|||
|
if( ::PathIsRelative( lpszPath ) ) {
|
|||
|
CHAR szTemp[ _MAX_PATH ];
|
|||
|
::strcpy( szTemp, lpszBasePath );
|
|||
|
::PathAppend( szTemp, lpszPath );
|
|||
|
::PathCanonicalize( szPath, szTemp );
|
|||
|
} else {
|
|||
|
::strcpy( szPath, lpszPath );
|
|||
|
}
|
|||
|
path = szPath;
|
|||
|
return path;
|
|||
|
}
|
|||
|
|
|||
|
INT CALLBACK CPathlib::BffCallback( HWND hWnd, UINT uMsg, LPARAM lParam, WPARAM wParam )
|
|||
|
{
|
|||
|
if( uMsg == BFFM_INITIALIZED && wParam ) {
|
|||
|
::SendMessage( hWnd, BFFM_SETSELECTION, TRUE, wParam );
|
|||
|
}
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
BOOL CPathlib::SelectFolder( HWND hWnd, LPCSTR lpszTitle, LPSTR lpszFolder )
|
|||
|
{
|
|||
|
BROWSEINFO bi;
|
|||
|
LPITEMIDLIST pidl;
|
|||
|
|
|||
|
ZeroMemory( &bi, sizeof(bi) );
|
|||
|
bi.hwndOwner = hWnd;
|
|||
|
bi.lpszTitle = lpszTitle;
|
|||
|
bi.ulFlags = BIF_RETURNONLYFSDIRS;
|
|||
|
// For Folder setup
|
|||
|
bi.lpfn = (BFFCALLBACK)BffCallback;
|
|||
|
|
|||
|
// <20>Ō<EFBFBD><C58C><EFBFBD>'\'<27><><EFBFBD>t<EFBFBD><74><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>ƃf<C683>t<EFBFBD>H<EFBFBD><48><EFBFBD>g<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD>Ȃ<EFBFBD>(Win98)<29>̂<EFBFBD>...
|
|||
|
if( lpszFolder ) {
|
|||
|
if( ::strlen(lpszFolder) > 3 ) {
|
|||
|
if( lpszFolder[::strlen(lpszFolder)-1] == '\\' )
|
|||
|
lpszFolder[::strlen(lpszFolder)-1] = NULL;
|
|||
|
}
|
|||
|
bi.lParam = (LPARAM)lpszFolder;
|
|||
|
} else {
|
|||
|
bi.lParam = NULL;
|
|||
|
}
|
|||
|
|
|||
|
string path;
|
|||
|
if( (pidl = ::SHBrowseForFolder( &bi )) ) {
|
|||
|
path.resize( _MAX_PATH+1 );
|
|||
|
::SHGetPathFromIDList( pidl, lpszFolder );
|
|||
|
if( ::strlen(lpszFolder) > 3 ) { // <20>h<EFBFBD><68><EFBFBD>C<EFBFBD>u<EFBFBD><75><EFBFBD>̏ꍇ<CC8F><EA8D87><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
::strcat( lpszFolder, "\\" );
|
|||
|
}
|
|||
|
IMalloc* pMalloc;
|
|||
|
::SHGetMalloc( &pMalloc );
|
|||
|
if( pMalloc ) {
|
|||
|
pMalloc->Free( pidl );
|
|||
|
pMalloc->Release();
|
|||
|
}
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|