怎么在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中打开一个文件,如单击一个按钮,然后弹出选择文件的框框,我需要打开这个文件!的主要内容,如果未能解决你的问题,请参考以下文章

MFC单击菜单项如何弹出对话框?

MFC点击按钮打开对话框选择文件夹(不是文件)

MFC点击按钮打开对话框选择文件夹(不是文件)

MFC中怎么设置单击菜单弹出对话框?

MFC设置对话框定时显示60秒,然后自动弹出另外一个对话框。怎么给对话框添加最大化最小化按钮。

html 怎么点击一个按钮弹出一个提示框