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

📄 brsfolder.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
字号:
// brsfolder.cpp

#include <windows.h>
#include <shlobj.h>
#include <stdlib.h>
#include <string.h>
#include "msc.h"
#include "brsfolder.h"
#include "shfolder.h"



// 暥帤楍偺戙傢傝偵 CSIDL 幆暿巕偑巜掕偝傟偨偐
#define IsSpecifiedCsidl(s)         ( (char*) (s) < (char*) 0xFFFF )



//////////////////////////////
//          ANSI斉          //
//////////////////////////////



static int CALLBACK SHBrowseProcA ( HWND hWnd, unsigned int dwMessage, LPARAM lParam, LPARAM lpData ) ;


typedef struct {
   const char *szTitle ;
   const ITEMIDLIST *pInitial ;
} BROWSEFORFOLDERINFOA ;



// 僼僅儖僟慖戰僟僀傾儘僌傪婲摦偡傞乮ANSI斉乯
// ITEMIDLIST 傪曉偡
ITEMIDLIST *WINAPI ShBrowseForFolderA ( HWND hWnd, const ITEMIDLIST *pInitial, const char *szTitle, const char *szMessage, unsigned long dwFlags ) {

   BROWSEFORFOLDERINFOA BrowseForFolderInfo ;

   BROWSEINFOA BrowseInfo = { 0 } ;
   BrowseInfo.hwndOwner = hWnd ;
   BrowseInfo.lpfn = SHBrowseProcA ;
   BrowseInfo.lParam = (LPARAM) & BrowseForFolderInfo ;
   BrowseInfo.lpszTitle = szMessage ;
   BrowseInfo.ulFlags = dwFlags ;
   BrowseForFolderInfo.szTitle = szTitle ;
   BrowseForFolderInfo.pInitial = pInitial ;

   return (ITEMIDLIST*) SHBrowseForFolderA ( & BrowseInfo ) ;
}



static int CALLBACK SHBrowseProcA ( HWND hWnd, unsigned int dwMessage, LPARAM lParam, LPARAM lpData ) {

   switch ( dwMessage ) {
      case BFFM_INITIALIZED :
         if ( ((BROWSEFORFOLDERINFOA*)lpData)->szTitle ) SetWindowTextA ( hWnd, ((BROWSEFORFOLDERINFOA*)lpData)->szTitle ) ;
         if ( ((BROWSEFORFOLDERINFOA*)lpData)->pInitial ) SendMessageA ( hWnd, BFFM_SETSELECTIONA, FALSE, (LPARAM) ((BROWSEFORFOLDERINFOA*)lpData)->pInitial ) ;
         break ;
      default :
         break ;
   }

   return 0 ;
}



// 僼僅儖僟慖戰僟僀傾儘僌傪婲摦偡傞乮ANSI斉乯
// szInitialFolder 偼 CSIDL 幆暿巕偱傕壜
// 惉岟偟偨傜 0 傪丄幐攕偟偨傜 0 埲奜傪曉偡
int WINAPI BrowseForFolderA ( HWND hWnd, char *szSelectedFolder, const char *szInitialFolder, const char *szTitle, const char *szMessage, unsigned long dwFlags ) {

   int nRetValue = 1 ;

   ITEMIDLIST *pInitial ;
   if ( IsSpecifiedCsidl ( szInitialFolder ) ) pInitial = ShOpenSpecialItemIdList ( (int)(intptr_t) szInitialFolder ) ;
   else                                        pInitial = ShOpenItemIdListA ( szInitialFolder ) ;

   ITEMIDLIST *pResult = ShBrowseForFolderA ( hWnd, pInitial, szTitle, szMessage, dwFlags | BIF_RETURNONLYFSDIRS ) ;
   if ( pResult ) {
      if ( ! ShGetPathA ( pResult, szSelectedFolder ) ) nRetValue = 0 ;
      ShCloseItemIdList ( pResult ) ;
   }

   if ( pInitial ) ShCloseItemIdList ( pInitial ) ;

   return nRetValue ;
}



//////////////////////////////
//         UNICODE斉        //
//////////////////////////////



// This function is not supported in Win95
#ifndef NTFUNC_IMPORT_IMPLICITLY
#define SHBrowseForFolderW   SHBrowseForFolderW_
typedef LPITEMIDLIST ( WINAPI *SHBROWSEFORFOLDERW ) ( LPBROWSEINFOW lpbi ) ;
static HINSTANCE hShell32 ;
static SHBROWSEFORFOLDERW SHBrowseForFolderW ;
static int FreeLibraryOnDetach ( void ) ;
#endif



static int CALLBACK SHBrowseProcW ( HWND hWnd, unsigned int dwMessage, LPARAM lParam, LPARAM lpData ) ;


typedef struct {
   const wchar_t *szTitle ;
   const ITEMIDLIST *pInitial ;
} BROWSEFORFOLDERINFOW ;



// 僼僅儖僟慖戰僟僀傾儘僌傪婲摦偡傞乮UNICODE斉乯
// ITEMIDLIST 傪曉偡
ITEMIDLIST *WINAPI ShBrowseForFolderW ( HWND hWnd, const ITEMIDLIST *pInitial, const wchar_t *szTitle, const wchar_t *szMessage, unsigned long dwFlags ) {

#ifndef NTFUNC_IMPORT_IMPLICITLY
   if ( ! hShell32 && ( hShell32 = LoadLibraryW ( L"SHELL32.DLL" ) ) ) FreeLibraryOnDetach () ;
   if ( GETPROCADDRESS ( hShell32, SHBROWSEFORFOLDERW, SHBrowseForFolderW ) ) return NULL ;
#endif

   BROWSEFORFOLDERINFOW BrowseForFolderInfo ;

   BROWSEINFOW BrowseInfo = { 0 } ;
   BrowseInfo.hwndOwner = hWnd ;
   BrowseInfo.lpfn = SHBrowseProcW ;
   BrowseInfo.lParam = (LPARAM) & BrowseForFolderInfo ;
   BrowseInfo.lpszTitle = szMessage ;
   BrowseInfo.ulFlags = dwFlags ;
   BrowseForFolderInfo.szTitle = szTitle ;
   BrowseForFolderInfo.pInitial = pInitial ;

   return (ITEMIDLIST*) SHBrowseForFolderW ( & BrowseInfo ) ;
}



static int CALLBACK SHBrowseProcW ( HWND hWnd, unsigned int dwMessage, LPARAM lParam, LPARAM lpData ) {

   switch ( dwMessage ) {
      case BFFM_INITIALIZED :
         if ( ((BROWSEFORFOLDERINFOA*)lpData)->szTitle ) SetWindowTextW ( hWnd, ((BROWSEFORFOLDERINFOW*)lpData)->szTitle ) ;
         if ( ((BROWSEFORFOLDERINFOA*)lpData)->pInitial ) SendMessageW ( hWnd, BFFM_SETSELECTIONW, FALSE, (LPARAM) ((BROWSEFORFOLDERINFOW*)lpData)->pInitial ) ;
         break ;
      default :
         break ;
   }

   return 0 ;
}



// 僼僅儖僟慖戰僟僀傾儘僌傪婲摦偡傞乮UNICODE斉乯
// szInitialFolder 偼 CSIDL 幆暿巕偱傕壜
// 惉岟偟偨傜 0 傪丄幐攕偟偨傜 0 埲奜傪曉偡
int WINAPI BrowseForFolderW ( HWND hWnd, wchar_t *szSelectedFolder, const wchar_t *szInitialFolder, const wchar_t *szTitle, const wchar_t *szMessage, unsigned long dwFlags ) {

   int nRetValue = 1 ;

   ITEMIDLIST *pInitial ;
   if ( IsSpecifiedCsidl ( szInitialFolder ) ) pInitial = ShOpenSpecialItemIdList ( (int)(intptr_t) szInitialFolder ) ;
   else                                        pInitial = ShOpenItemIdListW ( szInitialFolder ) ;

   ITEMIDLIST *pResult = ShBrowseForFolderW ( hWnd, pInitial, szTitle, szMessage, dwFlags | BIF_RETURNONLYFSDIRS ) ;
   if ( pResult ) {
      if ( ! ShGetPathW ( pResult, szSelectedFolder ) ) nRetValue = 0 ;
      ShCloseItemIdList ( pResult ) ;
   }

   if ( pInitial ) ShCloseItemIdList ( pInitial ) ;

   return nRetValue ;
}



#ifndef NTFUNC_IMPORT_IMPLICITLY
static void __cdecl ExitProc ( void ) {
   if ( hShell32 ) FreeLibrary ( hShell32 ) ;
   hShell32 = NULL ;
}
#endif



#ifndef NTFUNC_IMPORT_IMPLICITLY
static int FreeLibraryOnDetach ( void ) {
#ifdef _USRDLL
   return atexit ( ExitProc ) ;
#else
   return 0 ;
#endif
}
#endif



⌨️ 快捷键说明

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