问大家一个问题:我现在想重载CWinApp::OnFileNew这是函数,但有一些问题我不太明白,希望能指点一二,谢谢大家了

xxrl 2005-03-15 09:15:37
1 我找不到OnFileNew这个函数的实现
2 如果我想在多文档程序中,点击新建文件后视图自动加载一个文件,比如图片或者地图之类的东西,我需要修改默认的实现程序吗?如果需要修改,一般是怎么修改?
3 下面这段程序应该没有错误吧,可是我选择了一个文件后,然后点击确定就报错,是不是因为我没有执行相应的处理程序的缘故啊?
OPENFILENAME ofn;//common dialog
char szFile[260];//filename buffer
//HWND hwnd ;

ZeroMemory(&ofn,sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
//ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFile = "*.cfg";
ofn.lpstrFilter = "配置文件(*.cfg)";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = "请选择要读取的配置文件";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;
//显示对话框
if(GetOpenFileName(&ofn) == TRUE){
//这里我还没有加具体操作
}
...全文
403 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2005-03-15
  • 打赏
  • 举报
回复
void CWinApp::OnFileNew()
{
if (m_pDocManager != NULL)
m_pDocManager->OnFileNew();
}
rangren 2005-03-15
  • 打赏
  • 举报
回复
gz
wangyangcheng 2005-03-15
  • 打赏
  • 举报
回复
此函数的具体走向你可参考<<深入浅出MFC>>之“Command Routing"一章。
mousefj 2005-03-15
  • 打赏
  • 举报
回复
重载OnFileOpen()代码供参考,我这是正确的代码。
CString m_sFileName="";
CFileDialog m_dlgFileSave(TRUE,"dat",m_sFileName,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"data Files (*.dat)|*.dat|All Files (*.*)|*.*||");


//获得应用程序的路径
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中定义了吧,好象是128
TCHAR szDirve[32];
TCHAR szDir[128];

GetModuleFileName(NULL,exeFullPath,MAX_PATH);
//分离全路径为驱动、程序目录
_splitpath(exeFullPath,szDirve,szDir,NULL,NULL);

CString m_sFADataPath;
m_sFADataPath.Format("%s\\MyApp\\data\\fa",szDirve);


//GetCurrentDirectory(32,pTmp); //获得当前目录
m_dlgFileSave.m_ofn.lpstrInitialDir=m_sFADataPath;
if(m_dlgFileSave.DoModal()==IDOK)
{
m_sFileName=m_dlgFileSave.GetFileName();
CWinApp::OpenDocumentFile(m_sFileName);

}
xxrl 2005-03-15
  • 打赏
  • 举报
回复
还有高人能够指点一二吗?
我现在用的就是多文档结构
smallcrocodile 2005-03-15
  • 打赏
  • 举报
回复
研究
Featured 2005-03-15
  • 打赏
  • 举报
回复
2 当然需要你修改。也很简单,就是加载位图,刷到DC上面即可。网上代码很多的。比如:
void CLoadDibEasyView::OnDraw(CDC* pDC)
{
CDC MemDC;
CString str("f:\\ascii.bmp");
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CBitmap *pBitmap = new CBitmap;

pBitmap->Attach(hBitmap);
//pBitmap = CBitmap::FromHandle(hBitmap);
//上述二句话实际效果完全相同.

MemDC.CreateCompatibleDC(pDC); // 创建与屏幕DC兼容的DC,这样BitBlt过去才是一样的坐标系
MemDC.SelectObject(pBitmap);
pDC->BitBlt(0, 0,800, 800, &MemDC, 0, 0, SRCCOPY);

}
3 肯定不是没加具体操作的原因。
估计哪儿有错把。没用过,不好多说。
习惯用CFileDialog的
legendhui 2005-03-15
  • 打赏
  • 举报
回复
8错
hwablues 2005-03-15
  • 打赏
  • 举报
回复
整个调用流程是这样的:显示菜单响应->APP中的ONFILENEW->然后是manager-.然后是文档摸板->然后就是DOC中的ONNEWDOCUMENT.你能看到的函数只有一头一尾.如果你非要看函数体,可以在APP的ONNEWFILE中设置断点,然后按F11,一级一级进入函数查看
Featured 2005-03-15
  • 打赏
  • 举报
回复
1 Classwizard找找看
2 当然需要你修改。也很简单,就是加载位图,刷到DC上面即可。网上代码很多的。比如:
void CLoadDibEasyView::OnDraw(CDC* pDC)
{
CDC MemDC;
CString str("f:\\ascii.bmp");
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CBitmap *pBitmap = new CBitmap;

pBitmap->Attach(hBitmap);
//pBitmap = CBitmap::FromHandle(hBitmap);
//上述二句话实际效果完全相同.

MemDC.CreateCompatibleDC(pDC); // 创建与屏幕DC兼容的DC,这样BitBlt过去才是一样的坐标系
MemDC.SelectObject(pBitmap);
pDC->BitBlt(0, 0,800, 800, &MemDC, 0, 0, SRCCOPY);

}
3 肯定不是没加具体操作的原因。估计哪儿有错把。没用过,不好多说。
一般都是用CFileDialog的
whs1980 2005-03-15
  • 打赏
  • 举报
回复
1、缺省情况下APP在OnFileNew中创建一个文档模板,新建一种文档类型。如果你要创建多个文档模板,则需要在此处进行操作,否则一般不对其进行操作。
2、这个在文档类的SERIALIZE()中进行操作,并且你要知道文件的结构,不然你怎么去读文件?读出来以后怎么去操作文件?
3、ofn.lpstrFilter = "配置文件(*.cfg)";--->ofn.lpstrFilter = "配置文件(*.cfg)|*.cfg||";
ofn.hwndOwner=NULL;//可以为空
ofn.lpstrFile = szFile;------------->ofn.lpstrFile = NULL;初始化的时候如果不指定初始化路径就可以为空.
xxrl 2005-03-15
  • 打赏
  • 举报
回复
upupupupupup
mousefj 2005-03-15
  • 打赏
  • 举报
回复
想在多文档程序中,点击新建文件后视图自动加载一个文件,比如图片或者地图之类的东西,需要重载OnFileNew()函数.其代码参考我上面写的OnFileOpen()里的函数,它是通过打开对话框选择.dat文件。你将dat替换为cfg即可。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧