17打开文件对话框 (SDK和MFC两种方法)

(1)

文本框:IDC_EDT_RESULT      选中以下属性: Horizontal scroll ,Vertical scroll,Multiline

checKbox控件: IDC_CHK_MULTISEL 变量:m_chkMultiSel

确定按钮改为SDK ,取消按钮改为MFC,分别添加相应函数:

void COpenFileDemoDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	TCHAR szBuffer[MAX_PATH*10]={0};

	OPENFILENAME ofn={0};
	ofn.lStructSize=sizeof(ofn);
	ofn.hwndOwner=m_hWnd;
	ofn.lpstrFilter=_T("文本文件(*.txt)\0*.txt\0所有文件(*.*)\0*.*\0");
	ofn.lpstrInitialDir=_T("c:\\");
	ofn.lpstrFile=szBuffer;
	ofn.nMaxFile=sizeof(szBuffer)/sizeof(*szBuffer);
	ofn.nFilterIndex=0;
	ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_EXPLORER;

	if(m_chkMultiSel.GetCheck())
		ofn.Flags|=OFN_ALLOWMULTISELECT;
	BOOL bSel=GetOpenFileName(&ofn);
	if(!bSel)
	{
		SetDlgItemText(IDC_EDT_RESULT,_T("选择被取消。"));
		return;
	}

	if(m_chkMultiSel.GetCheck())
	{
		TCHAR szPath[MAX_PATH]={0};
		CString str;
		int nLen;
		TCHAR *p=ofn.lpstrFile+ofn.nFileOffset;
		_tcsncpy(szPath,ofn.lpstrFile,ofn.nFileOffset);
		if(szPath[ofn.nFileOffset-1]!='\\')
			_tcscat(szPath,_T("\\"));
		while(TRUE)
		{
			nLen=_tcslen(p);
			if(nLen==0)
				break;
			str+=szPath;
			str+=p;
			str+=_T("\r\n");
			p+=nLen+1;
		}
		SetDlgItemText(IDC_EDT_RESULT,str);
	}
	else
		SetDlgItemText(IDC_EDT_RESULT,szBuffer);
}


void COpenFileDemoDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	TCHAR szBuffer[MAX_PATH*10]={0};
	CFileDialog dlg(TRUE,NULL,NULL,
		OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,
		_T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"),this);
	dlg.m_ofn.lpstrInitialDir=_T("c:\\");

	if(m_chkMultiSel.GetCheck())
	{
		dlg.m_ofn.lpstrFile=szBuffer;
		dlg.m_ofn.nMaxFile=sizeof(szBuffer)/sizeof(*szBuffer);
		dlg.m_ofn.Flags|=OFN_ALLOWMULTISELECT;
	}
	if(dlg.DoModal()!=IDOK)
	{
		SetDlgItemText(IDC_EDT_RESULT,_T("选择被取消。"));
		return;
	}

	if(m_chkMultiSel.GetCheck())
	{
		CString strfile;
		POSITION pos=dlg.GetStartPosition();
		while(pos)
		{
			strfile+=dlg.GetNextPathName(pos);
			strfile+=_T("\r\n");
		}
		SetDlgItemText(IDC_EDT_RESULT,strfile);
	}
	else
	{
		SetDlgItemText(IDC_EDT_RESULT,dlg.GetPathName());
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值