通用对话框
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
浙公网安备 33010602011771号