출처 : http://www.indidev.net/forum/viewtopic.php?f=5&t=76
압축프로그램 만들때 꼭 만들어야 하는 기능이 "새 폴더" 만들기 기능입니다.
이 기능을 만드려고 (나를 포함한) 얼마나 많은 프로그래머들이 피눈물을 흘렸는지 ㅠ.ㅠ
인터넷에서 암만 "새 폴더 만들기" 로 검색해도 안나오는 이 기능을 어떻게 만드는지 간단히 소개하자면..
1. shell context 메뉴를 만들기 위해서 dll 만들어서 IContextMenu::QueryContextMenu() 구현하는건 잘 찾아 보면 많으니까 그거 보시면 되고,
2. 사용자가 "새 폴더" 만들기를 선택했을때 InvokeCommand() 에서 커맨드 받아서 처리하는 함수의 소스는 다음과 같습니다.
Code:
BOOL _CreateNewFolder(CString lpszPath, HWND hWndView, IShellView* pisv)
{
if ( NULL == hWndView || NULL == pisv )
return FALSE;
LPITEMIDLIST pidlNew;
LPITEMIDLIST pidlNewFolder;
DWORD dwError = SHCreateDirectoryEx( hWndView, lpszPath, NULL );
if ( ERROR_SUCCESS != dwError )
return FALSE;
pidlNew = ILCreateFromPath( lpszPath );
if ( NULL == pidlNew )
return FALSE;
pidlNewFolder = ILFindLastID( pidlNew );
if ( NULL == pidlNew )
{
ILFree( pidlNew );
return FALSE;
}
SHChangeNotify(SHCNE_MKDIR, SHCNF_FLUSH, pidlNew, NULL);
pisv->SelectItem( pidlNewFolder, SVSI_EDIT | SVSI_SELECT );
ILFree( pidlNew );
return TRUE;
}
IShellView 는 IObjectWithSite::SetSite() 에서 넘겨받은 포인터를 이용해서 구할 수 있습니다.
'프로그래밍 팁 > etc' 카테고리의 다른 글
폴더 열때 파일 선택 방법 (0) | 2011.07.08 |
---|---|
파일 시간 가져오기(Create Time, Access Time, Write Time) (0) | 2011.07.07 |
파일사이즈 구하기 (0) | 2011.07.06 |
맥어드래스 읽어오는 여러가지 방법 (0) | 2011.07.05 |
전치행렬 프로그램 (0) | 2011.06.15 |