在调用WINDOWS“浏览文件夹”对话框时,如何初始化选择"c:\windows"路径?

解决方案 »

  1.   

    用写个回调函数。微软例子代码:http://support.microsoft.com/kb/179378#define STRICT
    #include <windows.h>
    #include <shlobj.h>INT CALLBACK BrowseCallbackProc(HWND hwnd, 
                                    UINT uMsg,
                                    LPARAM lp, 
                                    LPARAM pData) 
    {
       TCHAR szDir[MAX_PATH];   switch(uMsg) 
       {
       case BFFM_INITIALIZED: 
          if (GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir))
          {
             // WParam is TRUE since you are passing a path.
             // It would be FALSE if you were passing a pidl.
             SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
          }
          break;   case BFFM_SELCHANGED: 
          // Set the status window to the currently selected path.
          if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir))
          {
             SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
          }
          break;
       }
       return 0;
    }
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR lpszCmdLine,
                         int nCmdShow)
    {
       BROWSEINFO bi;
       TCHAR szDir[MAX_PATH];
       LPITEMIDLIST pidl;
       LPMALLOC pMalloc;   if (SUCCEEDED(SHGetMalloc(&pMalloc)))
       {
          ZeroMemory(&bi,sizeof(bi));
          bi.hwndOwner = NULL;
          bi.pszDisplayName = 0;
          bi.pidlRoot = 0;
          bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
          bi.lpfn = BrowseCallbackProc;      pidl = SHBrowseForFolder(&bi); 
          if (pidl) 
          { 
              // 
              // Other code omited 
              // 
              pMalloc->lpVtbl->Free(pMalloc,pidl); 
          } 
          pMalloc->lpVtbl->Release(pMalloc);
       }
       return 0;
    }
      

  2.   


    TCHAR szDir[100];
    GetWindowsDirectory(szDir, 100);