通用对话框

CFileDialog(BOOL , -, -, dwFlags, "x|x.x|", ParentWnd, dwsize , TRUE):  

m_ofn.lpstrTitle = _T("Title");  
      lpstrInitialDir = _T("C:\\");  
      lpstrFilter = _T("类型1\0*.txt\0类型2\0*.*\0\0");  
      nFilterIndex = 1;  

if(IDOK == fd.DoModal()) 
{ 
      //lpstrFile 返回值  
      GetPathName();  GetFileName\Ext();  

      //Flags |= OFN_AllowMultiSelect  
      POSITION = GetStartPosition();  
      while(pos)  
      {  
            GetNextPathName(pos);  
      } 
}  

      Flags |= OFN_EnableTemplate;  
      lpTemplateName = MAKEINTRESOURCE(IDD_DIALOG);  
//IDD_DIALOG自定义对话框模板,Style要设为Child,其中一个控件ID设为1119(stc32),最好是PictureBox,透明不会自绘盖住CFileDialog  

      Flags |= OFN_EnableHook; 
      lpfnHook = fun;  
UINT CALLBACK fun(HWND , uiMsg, WPARAM, LPARAM )  
{  
    uiMsg == WM_NOTIFY;  
    ((OFNotify *)LPARAM)->hdr.code == CDN_IncludeItem\SelChange; 
    ((OFNotifyEx *)LPARAM)->pidl;  
    SHGetPathFromIDList((LPC ItemIDList)pidl, char[]);  
} 

API实现FileDialog

OPENFILENAME ofn;
memset(&ofn, sizeof(OPENFILENAME));

ofn.lpstrFile  = TCHAR[MAX_PATH]; //设置缓冲区接收返回结果    
    lpstrFile[0] = _T('\0');      //memset或置第一个字符为'\0'    
    nMaxFile  = MAX_PATH;

    hwndOwner  = this->m_hWnd;
    hInstance  = NULL;
    lStructSize  = sizeof(OPENFILENAME);

    lpstrTitle = "";
    lpstrInitialDir = "";
    lpstrFilter = _T("文本文件\0*.txt\0所有文件\0*.*\0\0");
    nFilterIndex = 1;

    Flags  = 0;    
    lpTemplateName = NULL;
    lpfnHook  = NULL;

bool = GetOpenFileName(&ofn); //API

 

文件夹对话框

BrowseInfo bi;
memset(&bi, 0, sizeof(BROWSEINFO));
  
bi.hwndOwner;  //HWND 
   lpszTitle; //不是标题栏      
   pidlRoot = SHGetSpecialFolderLocation(null,CSIDL_xx,ItemIDList); 	    
   ulFlags = BIF_ReturnOnlyfsDirs|BrowseIncludeFiles;

   pszDisplayName = TCHAR[]; //返回选中item名,不包括全部路径,基本不用

   lpfn = pfun; //int CALLBACK (*)(hwnd, uiMsg, WPARAM , LPARAM );
   lParam = (LPARAM)xx;//LPARAM    

ItemIDList = SHBrowseForFolder(&bi); //API  DoModal  返回值也不是IDOK
//返回必须由应用程序释放,它是调用IMalloc Interface来申请的,所以也通过这个Interface來释放
LPMALLOC pMalloc; //申请一个 IMalloc Interface
if (SUCCEEDED(SHGetMalloc(&pMalloc)))
{
	pMalloc->Free(pIDList);
	(void)pMalloc->Release();
}

SHGetPathFromIDList(ItemIDList , TCHAR[]);

1

posted on 2011-05-25 09:13  cvbnm  阅读(328)  评论(0)    收藏  举报

导航