vc++中如何调用打开文件对话框

vc++中如何调用打开文件对话框,第1张

MFC 打开保存文件对话框

一、打开文件夹:

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一定要确保对话框在显示期间不会被意外析构.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8132597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存