2010年10月5日 星期二

設定Folder Browser的初始路徑

想不到只是要設定Folder Browser的初始路徑居然要用到回呼(callback)函式

首先必需建立一個Callback Function讓Folder Browser初始化時呼叫,並送出BFFM_SETSELECTION來指定路徑(即我們的初始化路徑),注意BrowseCallbackProc必需為static。

int CALLBACK CMainFrame::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
  switch(uMsg)
  {
  case BFFM_INITIALIZED:
    ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,lpData);
    break;
  default:
    break;
  }
  return 0;  
}


指定我們的路徑與Callback Function

BROWSEINFO info = { 0 };
info.lpfn = BrowseCallbackProc;
info.lParam = (LPARAM)(strDefault.GetString());


呼叫SHBrowserForFolder產生Folder Browser

if(PIDLIST_ABSOLUTE pIDL = ::SHBrowseForFolder(&info))
{
  if(::SHGetPathFromIDList(pIDL,(LPSTR)&szPath))
  {

    ::CoTaskMemFree(pIDL);

    AfxGetApp()->OpenDocumentFile(szPath,FALSE);
  }
}


執行結果如下圖

沒有留言:

張貼留言