windows的让你选择一个目录的对话框。我记得是用结构体来编写的,谁能够告诉我具体怎么写的吗?急!
解决问题的给50分

解决方案 »

  1.   

    Following is some sample code that brings up the browse dialog box with the current directory selected. It also displays the path of the currently selected folder in the dialog box's status window. Sample Code      #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;
                }
                default:
                   break;
             }
             return 0;
          }      int PASCAL
          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) {
                   if (SHGetPathFromIDList(pidl,szDir)) {
                      MessageBox(NULL,szDir,"Picked",MB_OK);
                   }               // In C++: pMalloc->Free(pidl); pMalloc->Release();
                   pMalloc->lpVtbl->Free(pMalloc,pidl);
                   pMalloc->lpVtbl->Release(pMalloc);
                }
             }
             return 0;
          } 
      

  2.   

    SHBrowseForFolder()
    有这一个函数就都解决了吧,好像用不着这么多的代码