一、打开文件夹:
1、CFileDialog实现
CFileDialog hFileDlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_READONLY,
TEXT("支持的图像文件 (*.jpg*.gif*.bmp...)|*.jpg*.gif*.bmp|专用Tiff图像文件(*.tiff*.tif)|*.tiff*.tif|所有文件(*.*)|*.*||"),NULL)
hFileDlg.m_ofn.nFilterIndex=1
hFileDlg.m_ofn.hwndOwner=m_hWnd
hFileDlg.m_ofn.lStructSize=sizeof(OPENFILENAME)
hFileDlg.m_ofn.lpstrTitle=TEXT("打开图像文件...\0")
hFileDlg.m_ofn.nMaxFile=MAX_PATH
if(hFileDlg.DoModal() == IDOK)
{
m_path = hFileDlg.GetPathName()
UpdateData(FALSE)
}
2、API实现
OPENFILENAMEA ofn
char szFile[260]
ZeroMemory(&ofn, sizeof(ofn))
ofn.lStructSize = sizeof(ofn)
ofn.hwndOwner = NULL
ofn.lpstrFile = szFile
ofn.lpstrFile[0] = '\0'
ofn.nMaxFile = sizeof(szFile)
ofn.lpstrFilter = "音频文件\0*.wma\0"
ofn.nFilterIndex = 1
ofn.lpstrFileTitle= NULL
ofn.nMaxFileTitle = 0
ofn.lpstrInitialDir = NULL
ofn.Flags = 0
if (GetOpenFileNameA(&ofn)==FALSE)
{
return S_FALSE
}
CString c_save_path=ofn.lpstrFile
二、保存文件
同上,只不过将
CFileDialog hFileDlg(true,NULL 改为 CFileDialog hFileDlg(false,NULL,
或者将GetOpenFileNameA改为GetSaveFileNameA,即可。
三、浏览文件夹对话框
//回调函数
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if(uMsg==BFFM_SELCHANGED||uMsg==BFFM_INITIALIZED)
{
if(uMsg==BFFM_INITIALIZED)
{
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,LPARAM(lpData))
}
}
return 0
}
TCHAR chPath[255]//用来存储路径的字符串
CString strPath = ""
BROWSEINFO bInfo
GetModuleFileName(NULL,chPath,MAX_PATH)
strPath =chPath
ZeroMemory(&bInfo, sizeof(bInfo))
bInfo.hwndOwner = m_hWnd
bInfo.lpszTitle = _T("请选择路径: ")
bInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX
bInfo.lpfn = BrowseCallbackProc
bInfo.lParam= (LPARAM)strPath.GetBuffer(strPath.GetLength())
LPITEMIDLIST lpDlist//用来保存返回信息的IDList
lpDlist = SHBrowseForFolder(&bInfo) //显示选择对话框
if(lpDlist != NULL) //用户按了确定按钮
{
SHGetPathFromIDList(lpDlist, chPath)//把项目标识列表转化成字符串
strPath = chPath//将TCHAR类型的字符串转换为CString类型的字符串
m_save_path=strPath
UpdateData(FALSE)
}
设置对话框的标题:
dlg.m_ofn.lpstrTitle = _T("Open Image")
先定义一个对话框B,建B的类文件在原先的对话框A中定义B的对象dlg_B
然后用dlg_B.DoModal()函数就可以显示了1、对话框用mfc很容易就搞定了。
2、打开qq可以用::ShellExecute函数,比如如下:
ShellExecute(NULL,"open","c:\\qq.exe",NULL,NULL,SW_SHOWNORMAL)
无论在什么程序下,显示对话框的方法都是一样的(最起码思路是一样的).
假如现有一个对话框,
ID为IDD_DLG.
模态:
模态对话框不需要使用全局或成员的CDialog对象,
局部的即可.
CDialog dlg
dlg.DoModal()
其中DoModal函数会将当前执行卡在这里,
dlg不会发生析构,
则IDD_DLG也不会被销毁
其返回值是EndDialog的参数,
默认是IDOK或IDCANCLE
非模态:
非模态对话框对对象就有要求了,
要求就是它不能随意地被析构,
也就是说在不该析构的时候被析构了,
这样导致对话框无法显示.
m_dlg.Create(IDD_DLG, this)
其中IDD_DLG是对话框ID,
this是对话框的父窗口,
m_dlg一定要确保对话框在显示期间不会被意外析构.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)