為SHBrowseForFolder 設定預設的檔案夾

來源:互聯網
上載者:User

   SHBrowseForFolder是一個windows shell函數,可以以目錄為單位進行瀏覽,其函數原型為:
               LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFOlpbi);  

參數lpbi是一個指向結構BROWSEINFO的指標,該結構的定義如下: 

typedef struct _browseinfo {
    HWND hwndOwner;
    LPCITEMIDLIST pidlRoot;   //指向一個item identifier list指標,設定開始瀏覽的預設目錄
    LPTSTR pszDisplayName;
    LPCTSTR lpszTitle;          //設定瀏覽對話方塊的標題,可以用這個變數對使用者進行提示
    UINT ulFlags;
    BFFCALLBACK lpfn;         //回呼函數的地址,即基於該瀏覽對話方塊的視窗過程
    LPARAM lParam;
    int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;     由BROSEINFO的原型可以看出,很難設定一個預設的目錄。可以在ulFlags中設定BIF_VALIDATE並設定一個回呼函數來處理BFFM_INITIALIZED訊息(該訊息表示對話方塊已經為調用作好準備),在處理該訊息時再SendMessage一個BFFM_SETSELECTION訊息給視窗過程,並把初始目錄的字串作為LPARAM參數傳遞.下面的代碼把初試目錄設定為了"C:/Program Filese"......
    if(uMsg == BFFM_INITIALIZED)
    {
        SendMessage(hwnd, BFFM_SETSELECTION,TRUE,(LPARAM)_T("C://Program Files"));
    }
......     以下是在vc++.net 2003中的一個例子。
#include<shlobj.h>                                        //SHBrowseForFolder在shlobj.h中定義
#include<TCHAR.h>
#include<windows.h>int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
    if(uMsg == BFFM_INITIALIZED)
    {
        SendMessage(hwnd, BFFM_SETSELECTION,
            TRUE,(LPARAM)_T("C://Program Files"));
    }
    return 0;
}void ShowSHBrowseForFolderDemoDlg()
{
   TCHAR m_dir[500];
   BROWSEINFO bi = {0};
   bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS|BIF_VALIDATE;
   bi.lpszTitle = _T("請選擇儲存計算結果檔案的位置");
   bi.lpfn = BrowseCallbackProc;                           //指定回呼函數地址
   ITEMIDLIST *pIDL = SHBrowseForFolder(&bi);
   if(SHGetPathFromIDList(pIDL,m_dir) == TRUE)     //變數m_dir中儲存了經過使用者選擇後的目錄的完整路徑.
   {
        MessageBox(NULL,m_dir,"sample",0);
   }
}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
     ShowSHBrowseForFolderDemoDlg();
     return 0;
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.