怎么在MFC中打开一个文件,如单击一个按钮,然后弹出选择文件的框框,我需要打开这个文件!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在MFC中打开一个文件,如单击一个按钮,然后弹出选择文件的框框,我需要打开这个文件!相关的知识,希望对你有一定的参考价值。
//文件属性定义CString filename;
CString fileext;//文件扩展名
CString filepathname;
//选择文件
CFileDialog fpdlg(TRUE, NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"(文件类型)(*.dat)|*.dat|(文件类型)(*.sth)|*.sth|所有文件(*.*)|*.*||",NULL);
if(fpdlg.DoModal() == IDOK)
filename = fpdlg.GetFileName();
fileext = fpdlg.GetFileExt();//文件扩展名
filepathname = fpdlg.GetPathName();
//UpdateData(FALSE);
//打开文件
CFile fp;
if(filepathname ==_T(""))
//AfxMessageBox("请选择文件!");
return ;
if(!(fp.Open((LPCTSTR)filepathname,CFile::modeRead)))
AfxMessageBox("文件打开失败!");
return ;
//读取文件
fp.SeekToEnd();
unsigned long len = fp.GetLength();
char* buff;
buff=new char[len+1];
fp.SeekToBegin();
if(fp.Read(buff,len)<1)
fp.Close();
fp.Close(); 参考技术A 打开文件对话框
const char pszFilter[] = _T("EXE File (*.txt)|*.txt|All Files (*.*)|*.*||");
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
pszFilter, this);
dlg.m_ofn.lpstrInitialDir = "c:\\WINDOWS\\"; //设置对话框默认呈现的路径
if(dlg.DoModal() == IDOK)
CString strFilePath = dlg.GetPathName();
/*如果有多个文件,则
for(POSITION pos = dlg.GetStartPosition(); pos!=NULL; )
CString strFilePathName = dlg.GetNextPathName(pos);
*/
http://www.cppblog.com/zgysx/archive/2006/12/06/16053.html
借花献佛。。 参考技术B LS的方法都可以的。主要是CFileDialog类的功能。 参考技术C 得法 参考技术D CFileDialog
如何在MFC应用程序中添加文档菜单?
当您单击右键单击visual studio中的任何选项卡时,将出现一个菜单,其中包含一些选项,如(保存,关闭除此之外的全部,复制完整路径,打开包含文件夹,....)。如何在MFC(doc / view)选项卡式应用程序中添加这样的菜单?提前致谢。
答案
你应该有多个菜单。 IDR_MAINFRAME
通常在没有打开文件时使用,这不是你想要的文件。
资源编辑器应该显示另一个主菜单(不是弹出菜单),其ID类似于IDR_MyAppTYPE
。此菜单ID应该已经在您的CWinAppEx
类中:
BOOL CMyApp::InitInstance()
{
...
pDocTemplate = new CMultiDocTemplate(IDR_MyAppTYPE, ...);
...
}
这是您的文档菜单。
使用资源编辑器编辑此菜单。添加命令"Close all but this"
,菜单命令的id将类似于ID_WINDOW_CLOSEALL_BUT_THIS
您必须在CView
派生类中处理此命令。例:
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_WINDOW_CLOSEALL_BUT_THIS, OnCloseAllButThis)
...
END_MESSAGE_MAP()
void CMyView::OnCloseAllButThis()
{
POSITION p1 = AfxGetApp()->GetFirstDocTemplatePosition();
while(p1)
{
CDocTemplate *doctempl = AfxGetApp()->GetNextDocTemplate(p1);
POSITION p2 = doctempl->GetFirstDocPosition();
while(p2)
{
CDocument* doc = doctempl->GetNextDoc(p2);
POSITION p3 = doc->GetFirstViewPosition();
while(p3)
{
CView* view = doc->GetNextView(p3);
if(view && view->GetParentFrame() && view != this)
view->GetParentFrame()->SendMessage(WM_CLOSE);
}
}
}
}
另一答案
我已经在函数WM_RBUTTONUP
上处理了PreTranslateMessage
消息,如下所示:
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
if( WM_RBUTTONUP == pMsg->message)
{
//check that the right click is on MDI tab area.
CWnd* pWnd = FromHandle(pMsg->hwnd);
CMFCTabCtrl* tabGroup = dynamic_cast<CMFCTabCtrl*>(pWnd);
if (tabGroup)
{
CPoint clickLocation = pMsg->pt;
tabGroup->ScreenToClient(&clickLocation);
int tabIndex = tabGroup->GetTabFromPoint(clickLocation);
if (tabIndex != -1)
{
CWnd* pTab = tabGroup->GetTabWnd(tabIndex);
if (pTab)
{
CPoint point = pMsg->pt;
ClientToScreen (&point);
ShowPopupTabOptions(point);
}
}
}
}
return CMDIFrameWndEx::PreTranslateMessage(pMsg);
}
以上是关于怎么在MFC中打开一个文件,如单击一个按钮,然后弹出选择文件的框框,我需要打开这个文件!的主要内容,如果未能解决你的问题,请参考以下文章