ソフトウェア開発 Win32プログラミング

「フォルダの参照」ダイアログ

戻る


「フォルダの参照」ダイアログを表示するコードは以下の通り。

#include <windows.h>
#include <shlobj.h>

INT CALLBACK BrowseCallbackProc(
    HWND hWnd,
    UINT uMsg,
    LPARAM lParam,
    LPARAM lpData)
{
    switch(uMsg)
    {
    case BFFM_INITIALIZED:
        // 初期化されたら、指定されたディレクトリを選択する。
        SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)lpData);
        break;
    }
    return 0;
}
 
// 「フォルダの参照」ダイアログ
BOOL BrowseForFolder(HWND hWnd, LPTSTR pszDir, LPCTSTR pszTitle OPTIONAL)
{
    BOOL f;
    BROWSEINFO bi;
    TCHAR szDir[MAX_PATH];
    INT len;
    LPTSTR pch;
    LPITEMIDLIST pidl;
 
    lstrcpy(szDir, pszDir);
    len = lstrlen(szDir);
    if (len == 3 && szDir[1] == TEXT(':') && szDir[2] == TEXT('\\'))
        ;
    else
    {
        // 文字列の最後の '\\' を取り除く
        pch = CharPrev(szDir, szDir + len);
        if (*pch == TEXT('\\'))
            *pch = TEXT('\0');
    }
 
    bi.hwndOwner = hWnd;
    bi.pidlRoot = NULL;
    bi.pszDisplayName = szDir;
    bi.lpszTitle = pszTitle;
    bi.ulFlags = BIF_RETURNONLYFSDIRS;
    bi.lpfn = BrowseCallbackProc;
    bi.lParam = (LPARAM)szDir;
    bi.iImage = 0;
 
    pidl = SHBrowseForFolder(&bi);
    if (pidl != NULL)
    {
        f = SHGetPathFromIDList(pidl, pszDir);
        CoTaskMemFree(pidl);
        return f;
    }
    return FALSE;
}
 
INT WINAPI WinMain(
    HINSTANCE   hInstance,
    HINSTANCE   hPrevInstance,
    LPSTR       pszCmdLine,
    INT         nCmdShow)
{
    TCHAR szDir[MAX_PATH];
 
    lstrcpy(szDir, TEXT("C:\\"));
    BrowseForFolder(NULL, szDir, TEXT("フォルダを選択してください。"));
    return 0;
}

ソース: folder.zip


戻る

©片山博文MZ
katayama.hirofumi.mz@gmail.com

inserted by FC2 system