📄 fileopen.cpp
字号:
continue ;
} else if ( !_tcsicmp( ptr, TEXT(".WAV") ) ) {
continue ;
} else if ( !_tcsicmp( ptr, TEXT(".LNK") ) ) {
continue ;
} else if ( !_tcsicmp( ptr, TEXT(".DLL") ) ) {
continue ;
} else if ( !_tcsicmp( ptr, TEXT(".TTF") ) ) {
continue ;
} else if ( !_tcsicmp( ptr, TEXT(".CPL") ) ) {
continue ;
} else if ( !_tcsicmp( ptr, TEXT(".EXE") ) ) {
continue ;
}
}
wsprintf( findPath, c_sPatFile, find.cFileName, find.nFileSizeLow ) ;
if ( fAdd ) {
/* 儕僗僩儃僢僋僗偵崁栚傪捛壛偡傞 */
SendMessage( hWnd, LB_ADDSTRING, 0, (LPARAM) findPath ) ;
} else {
count ++ ;
num_mem += _tcslen( findPath ) + 1 ;
}
} while ( FindNextFile( hFind, &find ) ) ;
FindClose( hFind ) ;
}
if ( pCount ) {
*pCount = count ;
}
if ( pMem ) {
*pMem = num_mem ;
}
return TRUE ;
}
BOOL
FileOpenDialog::ListDir( HWND hWnd, LPCTSTR pPrevDir )
{
DWORD index = 0 ;
TCHAR buf[ MAX_PATH ] ;
/* 儕僗僩儃僢僋僗傪僋儕傾偡傞 */
SendMessage( hWnd, LB_RESETCONTENT, 0, 0 ) ;
/* 僨傿儗僋僩儕撪梕傪楍嫇偡傞 */
if ( !EnumDir( hWnd, NULL, NULL ) ) {
return FALSE ;
}
if ( pPrevDir ) {
wsprintf( buf, c_sPatDir, pPrevDir, c_sDir ) ;
index = SendMessage( hWnd, LB_FINDSTRINGEXACT, (WPARAM) -1, (LPARAM) buf ) ;
if ( index == LB_ERR ) {
index = 0 ;
}
}
SendMessage( hWnd, LB_SETCURSEL, (WPARAM) index, 0 ) ;
return TRUE ;
}
/*
* 僨傿儗僋僩儕撪梕偺弶婜昞帵傪峴偆
*/
void
FileOpenDialog::InitListDir( HWND hWnd )
{
/* 嵟怴偺僼傽僀儖昞帵儌乕僪傪敳偗傞 */
m_fRecent = FALSE ;
/* 弶婜僨傿儗僋僩儕偺儕僗僩傪嶌惉偡傞 */
if ( !ListDir( hWnd, NULL ) ) {
_tcscpy( m_sDir, TEXT("\\") ) ;
ListDir( hWnd, NULL ) ;
}
}
BOOL
FileOpenDialog::ChangeDir( HWND hDlg, LPBOOL pDone )
{
LPTSTR ptr ;
int index ;
TCHAR buf[ MAX_PATH ], sPrevDir[ MAX_PATH ] ;
HWND hWnd = GetDlgItem( hDlg, IDC_LST_FILE ) ;
index = SendMessage( hWnd, LB_GETCURSEL, 0, 0 ) ;
if ( index == LB_ERR ) {
return FALSE ;
}
SendMessage( hWnd, LB_GETTEXT, (WPARAM) index, (LPARAM) buf ) ;
ptr = _tcschr( buf, TEXT('\t') ) ;
if ( ptr ) {
*ptr++ = 0 ;
if ( !_tcsicmp( ptr, c_sDir ) ) {
catdir( m_sDir, &buf[1], sPrevDir ) ;
if ( !ListDir( hWnd, sPrevDir ) ) {
_tcscpy( m_sDir, TEXT("\\") ) ;
ListDir( hWnd, NULL ) ;
}
SetDlgItemText( hDlg, IDC_CAP_DIR, m_sDir ) ;
*pDone = FALSE ;
} else {
_tcscpy( m_sFile, m_sDir ) ;
catdir( m_sFile, buf, NULL ) ;
*pDone = TRUE ;
}
}
return TRUE ;
}
BOOL
FileOpenDialog::EnumRecent( HWND hWnd )
{
HKEY hKey ;
LONG lret ;
LPTSTR pBuffer ;
TCHAR buf[ MAX_PATH ], data[ MAX_PATH ] ;
DWORD index, cchName, dwType, cbData, i ;
pBuffer = (LPTSTR) LocalAlloc( LPTR, sizeof (TCHAR) * MAX_PATH * MAX_RECENT ) ;
if ( !pBuffer ) {
return FALSE ;
}
/* 儗僕僗僩儕偐傜嵟嬤巊偭偨僼傽僀儖偺堦棗傪摼傞 */
wsprintf( buf, TEXT("%s\\%s\\Recent"), GawaroBaseKey, m_pAppName ) ;
lret = RegOpenKeyEx( HKEY_CURRENT_USER, buf, 0,
#ifdef _WIN32_WCE
0,
#else /* _WIN32_WCE */
KEY_ALL_ACCESS,
#endif /* _WIN32_WCE */
&hKey ) ;
if ( lret != ERROR_SUCCESS ) {
LocalFree( (HLOCAL) pBuffer ) ;
return FALSE ;
}
index = 0 ;
while ( 1 ) {
cchName = sizeof buf / sizeof (TCHAR) ;
cbData = sizeof data ;
lret = RegEnumValue( hKey, index ++,
buf, &cchName,
NULL, &dwType,
(LPBYTE) data, &cbData ) ;
if ( lret != ERROR_SUCCESS ) {
break ;
} else if ( dwType != REG_SZ ) {
continue ;
}
i = _ttol( buf ) ;
if ( i >= 0 && i < MAX_RECENT ) {
_tcscpy( &pBuffer[ i * MAX_PATH ], data ) ;
}
}
RegCloseKey( hKey ) ;
/* 嵟嬤巊偭偨僼傽僀儖偺堦棗傪儕僗僩儃僢僋僗偵壛偊傞 */
SendMessage( hWnd, LB_RESETCONTENT, 0, 0 ) ;
index = 0 ;
for ( i = 0 ; i < MAX_RECENT ; i ++ ) {
LPCTSTR ptr = &pBuffer[ i * MAX_PATH ] ;
if ( *ptr ) {
index ++ ;
SendMessage( hWnd, LB_INSERTSTRING, (WPARAM) -1, (LPARAM) ptr ) ;
}
}
LocalFree( (HLOCAL) pBuffer ) ;
return index ? TRUE : FALSE ;
}
BOOL
FileOpenDialog::SelectRecent( HWND hDlg )
{
int index ;
HWND hWnd = GetDlgItem( hDlg, IDC_LST_FILE ) ;
index = SendMessage( hWnd, LB_GETCURSEL, 0, 0 ) ;
if ( index == LB_ERR ) {
return FALSE ;
}
SendMessage( hWnd, LB_GETTEXT, (WPARAM) index, (LPARAM) m_sFile ) ;
return TRUE ;
}
BOOL
GetOpenFileName2( OPENFILENAME *pOfn, LPCTSTR pAppName )
{
FileOpenDialog *pDialog = new FileOpenDialog( pOfn, FALSE, pAppName ) ;
if ( !DialogBoxParam( pOfn->hInstance, MAKEINTRESOURCE(IDD_DLG_FOPEN), pOfn->hwndOwner, (DLGPROC) DlgProc, (LPARAM) pDialog ) ) {
delete pDialog ;
return FALSE ;
}
if ( pOfn->lpstrFile ) {
_tcscpy( pOfn->lpstrFile, pDialog->GetText() ) ;
}
if ( pOfn->lpstrInitialDir ) {
_tcscpy( (LPTSTR) pOfn->lpstrInitialDir, pDialog->GetDir() ) ;
}
delete pDialog ;
return TRUE ;
}
BOOL
GetSaveFileName2( OPENFILENAME *pOfn )
{
FileOpenDialog *pDialog = new FileOpenDialog( pOfn, TRUE, NULL ) ;
if ( !DialogBoxParam( pOfn->hInstance, MAKEINTRESOURCE(IDD_DLG_FOPEN), pOfn->hwndOwner, (DLGPROC) DlgProc, (LPARAM) pDialog ) ) {
delete pDialog ;
return FALSE ;
}
if ( pOfn->lpstrFile ) {
_tcscpy( pOfn->lpstrFile, pDialog->GetText() ) ;
}
if ( pOfn->lpstrInitialDir ) {
_tcscpy( (LPTSTR) pOfn->lpstrInitialDir, pDialog->GetDir() ) ;
}
delete pDialog ;
return TRUE ;
}
void
AddRecent( LPCTSTR pAppName, LPCTSTR pPath )
{
HKEY hKey ;
LONG lret ;
LPBYTE lpData ;
LPTSTR pBuffer, name ;
BOOL fWrite = TRUE ;
TCHAR buf[ MAX_PATH ], data[ MAX_PATH ] ;
DWORD index, cchName, dwType, cbData, i, ret ;
pBuffer = (LPTSTR) LocalAlloc( LPTR, sizeof (TCHAR) * MAX_PATH * MAX_RECENT ) ;
if ( !pBuffer ) {
return ;
}
/* 儗僕僗僩儕偐傜嵟嬤巊偭偨僼傽僀儖偺堦棗傪摼傞 */
wsprintf( buf, TEXT("%s\\%s\\Recent"), GawaroBaseKey, pAppName ) ;
lret = RegCreateKeyEx( HKEY_CURRENT_USER, buf, 0, TEXT(""), 0,
#ifdef _WIN32_WCE
0,
#else /* _WIN32_WCE */
KEY_ALL_ACCESS,
#endif /* _WIN32_WCE */
NULL, &hKey, &ret ) ;
if ( lret != ERROR_SUCCESS ) {
LocalFree( (HLOCAL) pBuffer ) ;
return ;
}
index = 0 ;
while ( 1 ) {
cchName = sizeof buf / sizeof (TCHAR) ;
cbData = sizeof data ;
lret = RegEnumValue( hKey, index ++,
buf, &cchName,
NULL, &dwType,
(LPBYTE) data, &cbData ) ;
if ( lret != ERROR_SUCCESS ) {
break ;
} else if ( dwType != REG_SZ ) {
continue ;
}
i = _ttol( buf ) ;
if ( i >= 0 && i < MAX_RECENT ) {
if ( _tcsicmp( data, pPath ) ) {
_tcscpy( &pBuffer[ i * MAX_PATH ], data ) ;
} else if ( i == 0 ) {
fWrite = FALSE ;
}
}
}
if ( fWrite ) {
/* 嵟嬤巊偭偨僼傽僀儖偺堦棗傪儗僕僗僩儕偵彂偒崬傓 */
index = 0 ;
/* 巜掕偝傟偨僼傽僀儖傪彂偒崬傓 */
wsprintf( buf, TEXT("%d"), index ++ ) ;
name = buf ;
dwType = REG_SZ ;
lpData = (LPBYTE) pPath ;
cbData = (_tcslen(pPath) + 1) * sizeof (*pPath) ;
RegSetValueEx( hKey, name, 0, dwType, lpData, cbData ) ;
/* 巆傝偺僼傽僀儖傪彂偒崬傓 */
for ( i = 0 ; i < MAX_RECENT ; i ++ ) {
LPCTSTR ptr = &pBuffer[ i * MAX_PATH ] ;
if ( !*ptr ) {
continue ;
}
wsprintf( buf, TEXT("%d"), index ++ ) ;
name = buf ;
dwType = REG_SZ ;
lpData = (LPBYTE) ptr ;
cbData = (_tcslen(ptr) + 1) * sizeof (*ptr) ;
RegSetValueEx( hKey, name, 0, dwType, lpData, cbData ) ;
}
}
RegCloseKey( hKey ) ;
LocalFree( (HLOCAL) pBuffer ) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -