VC生成SDI时的问题.

Rodgu 2002-08-02 11:14:59
用vc生成一个标准SDI程序,在点菜单的"保存"时,会弹出一个文件对话框.

但我一直没找到弹出对话框的这段代码写在哪了,查IDC_FILE_SAVE,也没有映射到任何方法上,请问这段代码在哪里?程序是如何响应IDC_FILE_SAVE的?
...全文
46 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
锦紫川 2002-08-02
  • 打赏
  • 举报
回复
人们总是VC提供的许多标准化的支持表示困惑。因为原本需要手工做的东西被他自动完成了。但到底自动化到什么程度并不是很清楚。比如ID_FILE_SAVE、ID_FILE_SAVE_AS、ID_HELP、等等vc都提供了标准的的响应支持,我们可以称之为标准消息(Standard Command IDs)当然你可以自己程序中响应这些消息以完成自己特殊需要。一般情况下,他具体由框架结构完成还是由CWinAPP完成我们不需要关心,如果这位朋友一定要把这个ID_FILE_SAVE响应搞清楚,可参阅msdn的CWinApp 相关内容。
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
终于找到了,没想到原来里面如此复杂.
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
好的,我试一下,谢谢
jingyad 2002-08-02
  • 打赏
  • 举报
回复
是这样的:
FrameWnd收到命令后,首先让App处理而App又首先让活动View处理,活动View首先让Document处理,而我们的Doc一般都是从MFC的CDocument派生而来,因此当命令进入到CDocument::OnCmdMsg()中时,CDocument开始查找消息入口,事实上CDocument确实正如我们从上面的文件中看到的存在这个函数的入口,因此执行转向它

你覆盖CMainFrame的OnCmdMsg虚函数
在里面加入下面的行:
if(nID == 0xE103 && nCode != -1 && pExtra == 0) {
return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
在if体内设一个断点,选择保存文件到达断点按F11进去看看就都明白了

Rodgu 2002-08-02
  • 打赏
  • 举报
回复
to:sniper81

应该是这样
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
to jingyad()

你这是刚生成的SDI吗?
sniper81 2002-08-02
  • 打赏
  • 举报
回复
那如果在最初应用程序向导建立的SDI程序中不需要“文件”菜单,是不是只要在资源编辑器中删除菜单中的“文件”菜单和对应的文件菜单中的ID、加速键,那些“隐含”的保存、打开之类的消息映射函数也被去掉了?从而可以使生成的文件小一些?
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
可是不管怎样,菜单响应消息这部分在程序里总该能找到吧.

而且它弹出的是CFileDialog对话框,我查询"CFileDialog",在整个工程里都没有找到.
jingyad 2002-08-02
  • 打赏
  • 举报
回复
下面是我查到的MFC源程序:
void CDocument::OnFileSave()
{
DoFileSave();
}

BOOL CDocument::DoFileSave()
{
DWORD dwAttrib = GetFileAttributes(m_strPathName);
if (dwAttrib & FILE_ATTRIBUTE_READONLY)
{
// we do not have read-write access or the file does not (now) exist
if (!DoSave(NULL))
{
TRACE0("Warning: File save with new name failed.\n");
return FALSE;
}
}
else
{
if (!DoSave(m_strPathName))
{
TRACE0("Warning: File save failed.\n");
return FALSE;
}
}
return TRUE;
}
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
To:Jingyad

我查了文档的h和cpp文件了,没有发现对ID_FILE_SAVE等作过什么处理.
jingyad 2002-08-02
  • 打赏
  • 举报
回复
MFC中所有的消息映射其实都是一个静态的数组,每当有命令需要处理时MFC就去这些数组中找对应的处理函数,MFC中有一些类已经包含了一些标准的命令ID和他们的处理函数。

可以在MSDN文档TN022中找到详细的介绍
howtotell 2002-08-02
  • 打赏
  • 举报
回复
ID_FILE_SAVE 可能被宏定义了,当ID是它时就调用文件保存对话框.也可以重载它的.
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
我并不是要添加什么响应函数.

在刚生成标准SDI程序中,你选择菜单中的"保存"时会弹出对话框,我现在就是找不到这个"保存"怎么响应的消息.

jingyad 2002-08-02
  • 打赏
  • 举报
回复
CDocument中对ID_FILE_CLOSE,ID_FILE_SAVE,ID_FILE_SAVEAS都进行了处理。可以参照CDocument的头文件和实现文件。
  • 打赏
  • 举报
回复
你在"ClassView"中选择你的视图类,然后右击鼠标,选择添加windows消息相应函数。然后在"Class or Object to handle"中选择ID_FILE_SAVE,然后在"New windows message"/events中选择"command",然后双击它就可以了。所有的主菜单都是相应WM_COMMAND消息。
Rodgu 2002-08-02
  • 打赏
  • 举报
回复
这个问题不会没人注意到吧?
vc 抓屏程序,截取当前屏幕核心代码,为了操作和显示方便,这里为其增加了一套窗体,你只需在启动程序后在窗体的空白处点击右键,即可将当前屏幕的内容截取下来,并显示在窗体中,与QQ抓图十分相似,但要像QQ截图那样细致专业,还需要添加更多的辅助功能 ================================================================================ MICROSOFT 基础类库: Test 项目概述 =============================================================================== 应用程序向导已为您创建了此 Test 应用程序。此应用程序 不仅介绍了使用 Microsoft 基础类的基本知识, 而且是编写应用程序的起点。 此文件包含组成 Test 应用程序的每个文件的内容摘要。 Test.vcproj 这是使用“应用程序向导”生成VC 项目的主项目文件。 它包含有关生成文件的 Visual C 版本的信息,以及 有关用“应用程序向导”所选择的平台、配置和 项目功能的信息。 Test.h 这是应用程序的主头文件。 它包含其他 项目特定的头文件(包括 Resource.h),并声明 CTestApp 应用程序类。 Test.cpp 这是包含应用程序 类 CTestApp 的主应用程序源文件。 Test.rc 这是程序使用的所有 Microsoft Windows 资源 的列表。 它包含存储在 RES 子目录中 的图标、位图和光标。 可直接在 Microsoft Visual C 中编辑此文件。 项目资源包含在 2052 中。 res\Test.ico 这是一个图标文件,用作应用程序的图标。 此 图标包含在主资源文件 Test.rc 中。 res\Test.rc2 此文件包含不由 Microsoft Visual C 编辑的资源。 应将所有不能由 资源编辑器编辑的资源放在此文件中。 ///////////////////////////////////////////////////////////////////////////// 对于主框架窗口: 项目将包含标准的 MFC 界面。 MainFrm.h, MainFrm.cpp 这些文件包含框架类 CMainFrame,该类派生自 CFrameWnd 并控制所有的 SDI 框架功能。 res\Toolbar.bmp 此位图文件用于创建工具栏的平铺图像。 初始工具栏和状态栏在 CMainFrame 类中构造。 使用资源编辑器编辑此工具栏位图,并 更新 Test.rc 中的 IDR_MAINFRAME TOOLBAR 数组以添加 工具栏按钮。 ///////////////////////////////////////////////////////////////////////////// 应用程序向导将创建一种文档类型和一个视图: TestDoc.h、TestDoc.cpp - 文档 这些文件包含 CTestDoc 类。 编辑这些文件 以添加特殊的文档数据并实现文件的保存和加载 (通过 CTestDoc::Serialize)。 TestView.h、TestView.cpp - 文档视图 这些文件包含 CTestView 类。 CTestView 对象用于查看 CTestDoc 对象。 ///////////////////////////////////////////////////////////////////////////// 其他功能: ActiveX 控件 应用程序支持使用 ActiveX 控件。 打印支持和打印预览支持 应用程序向导已生成了一些代码,通过从 MFC 库调用 CView 类中的成员函数来 处理打印、打印设置和打印预览命令。 ///////////////////////////////////////////////////////////////////////////// 其他标准文件: StdAfx.h、StdAfx.cpp 这些文件用于生成名为 Test.pch 的预编译头文件 (PCH) 和名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准头文件,它定义新资源 ID。 Microsoft Visual C 将读取并更新此文件。 ///////////////////////////////////////////////////////////////////////////// 其他说明: 应用程序向导使用“TODO:” 来指示 应添加或自定义的源代码部分。 如果应用程序在共享 DLL 中使用 MFC,且应用程序使用的语言不是 操作系统的当前语言,则需要从 Microsoft Visual C 光盘上 Win\System 目录下将相应的本地化资源 MFC70XXX.DLL 复制到计算机的 system 或 system32 目录下, 并将其重命名为 MFCLOC.DLL。 (“XXX”代表 语言缩写。 例如,MFC70DEU.DLL 包含翻译成 德语的资源。) 如果不这样做,应用程序的某些 UI 元素 将保留为操作系统的语言。 /////////////////////////////////////////////////////////////////////////////
本书是一部Visual C++项目开发的技术书籍。全书内容深入浅出,首先简单介绍了Visual C++ 开发环境及C++语言的基本知识;然后介绍了现代软件工程的基本思想,使读者能够在一个比较高的层面上对Visual C++编程与软件开发有一个较为全面的认识;从第3章开始,结合开发实例,根据现代软件工程的相关理论与方法,详细分析了Visual C++在各种管理系统、图形图像、多媒体、串口通信、网络通信等方面的基本理论、实现原理、项目开发与编程方法。 本书附赠光盘中收录了书中全部范例文件,包括工程文件、窗体设计文件、源代码、数据库、执行文件和调试说明。   全书内容翔实,范例丰富并具有典型性,汇集了作者多年实际项目开发的宝贵经验和研究体会,适合希望快速成为Visual C++应用软件设计大师的编程人员参考使用。 第1章 Visual C++开发环境与编程基础  1-1 C++开发环境介绍   1-1-1 Visual C++的主窗口   1-1-2 Visual C++的工具栏   1-1-3 Visual C++的菜单栏   1-1-4 项目与项目工作区   1-1-5 资源与资源编辑器  1-2 C++语言基础   1-2-1 C++简介   1-2-2 C++的新特征   1-2-3 C++的标识符与关键字   1-2-4 C++的数据类型   1-2-5 C++的操作符   1-2-6 类和对象  1-3 本章小结 第2章 软件开发过程与方法  2-1 软件开发的人月神话  2-2 软件工程基础   2-2-1 软件开发模型   2-2-2 软件开发步骤  2-3 面向对象编程与UML建模   2-3-1 UML基础   2-3-2 面向对象分析   2-3-3 面向对象设计  2-4 基于构件的软件开发  2-5 本章小结 第3章 图书馆管理系统实例  3-1 系统分析   3-1-1 图书馆管理系统用例分析   3-1-2 功能模块的需求框图  3-2 UML需求分析建模   3-2-1 场景分析及开发   3-2-2 基于场景生成用例   3-2-3 建立系统顶层架构及领域概念模型  3-3 基于UML的软件设计   3-3-1 设计用例实现方案   3-3-2 数据存储设计   3-3-3 用户界面设计   3-3-4 根据UML生成代码框架  3-4 图书馆管理系统的Visual C++实现   3-4-1 Visual C++6.0下的ODBC数据库编程技术   3-4-2 数据库“查询操作”实例  3-5 本章小结 第4章 小型画板系统实例  4-1 系统分析   4-1-1 画板系统用例分析   4-1-2 画板系统总体框架结构分析  4-2 系统设计   4-2-1 用例实现   4-2-2 数据存储设计   4-2-3 界面设计  4-3 画板系统的Visual C++实现   4-3-1 单文档视图(SDI)应用   4-3-2 菜单的使用   4-3-3 应用程序的工具栏   4-3-4 应用程序的状态栏   4-3-5 图形设备接口(GDI)的使用  4-4 本章小结 第5章 图像处理信息系统实例  5-1 系统分析   5-1-1 图像处理系统用例分析   5-1-2 图像处理系统总体框架结构分析  5-2 系统设计   5-2-1 用例实现   5-2-2 总体框架和界面设计   5-2-3 数据存储设计   5-2-4 精化设计模型  5-3 图像处理系统的Visual C++实现   5-3-1 多文档视图(MDI)应用   5-3-2 工具栏的使用   5-3-3 动态链接库(DLL)的使用  5-4 本章小结 第6章 影音播放系统实例 第7章 串行通信编程 第8章 网络浏览通信一体化系统实例 第9章 个人信息管理系统实例 第10章 商品销售管理系统实例 第11章 人事工资管理系统实例
相关网站 7 设置窗口最大最小 7 设置窗口标题 7 去掉主菜单 7 修改应用程序图标 7 系统只能允许一个程序运行 7 在状态栏中添加间 8 研究调用存储过程 8 得到本机的IP地址 9 vc调用chm文件 10 最高窗口的实现 10 防止Edit框中的Password不保密 11 在同一系统中显示GB字符和BIG5字符 12 改变颜色(整个窗体的控件) 13 改变工程表头栏 13 ◆如何找开一个DiaLog的窗口◆ 13 ◆得到系统中设置的窗口颜色◆ 14 ◆如何让点下去的菜单成为V状态◆ 14 ◆如何调用WINDOWS的颜色板◆ 14 ◆如何产生一个MDI的主窗口◆ 15 ◆如何让一个文本控件显示出值◆ 15 ◆如何让一个控件显示出相应的值◆ 16 ◆在调试中怎么样MESSAGEBOX一个数字◆ 16 ◆如何控制控件的焦点◆ 16 ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一个模态窗口◆ 17 ◆如何将一个提示的声音发到声卡上◆ 17 ◆如何得到打开exe的带的参数◆ 17 ◆如何在框架上建立一个工具条◆ 17 ◆如何生成一个主窗口下方的状态条◆ 18 ◆如何让Cscrollview类中控制其可以流动区域大小◆ 19 ◆MFC中控件的一些基本控制方法◆ 19 ◆如何让一个数字型变量化为字符型变量◆ 19 ◆如何使用“拉动条”,“上下选择”◆ 19 ◆如何使用postmessage来异步触发某事件◆ 21 ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的数据录入的控制属性◆ 23 ◆哪些函数是文档、视图相互处理用的◆ 23 ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现表格◆ 25 ◆如何从INI文件中得到值◆ 25 ◆如何将图标文件写到窗口中◆ 26 ◆如何得到本机的IP地址◆ 26 ◆如何使用全局变量◆ 26 ◆如何让一个字符加上回车、换行◆ 26 ◆如何定义、使用结构◆ 26 ◆如何在任意程序中显示MessageBox◆ 27 ◆如何在程序判断出debug状态◆ 27 ◆当对话框中有一个滚动条是,当滚动滚动条的消息控制函数◆ 27 ◆将一个CWnd指针转换成一个控件ID(整数)注意用GetDlgItem()函数是从一个控件ID转换成一个CWnd的指针◆ 28 ◆如果在对话框中自定义一个消息的方法,假设对话框名为CXX◆ 28 ◆消息传递◆ 29 ◆在一个函数引用另外的一个对话框◆ 29 ◆全局函数的申明问题◆ 29 ◆在应用程序中*APP.CPP中的InitInstance()的事件◆ 29 ◆给执行文件加一个图标◆ 30 ◆如何在全局函数中通过传入的窗口句柄操作窗口◆ 30 ◆如何使桌面文字背景透明?◆ 30 ◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动阻止MDI应用程序创建一个新文档?◆ 33 ◆如何在多文档MFC程序中制作独立的File|New菜单?◆ 33 ◆如何检测视是否处于分割状态?◆ 34 ◆如何使程序保持极小状态?◆ 34 ◆如何确定当前进程实例是否为唯一实例?◆ 35 ◆如何向一个文档附加多个视?◆ 35 ◆如何获得文件的图标、属性、大小、类型等参数?◆ 36 ◆如何得到鼠标下面的窗口?◆ 37 ◆设置鼠标的形状◆ 38 ◆在对话框中设置编辑EDIT的值◆ 38 1. 如何获取应用程序的实例句柄? 38 2. 如何通过代码获得应用程序主窗口的指针? 38 3. 如何在程序中获得其他程序的图标? 38 4. 如何编程结束应用程序?如何编程控制windows的重新引导? 39 5.怎样加载其他的应用程序? 39 6. 确定应用程序的路径 39 7. 获得各种目录信息 40 8. 如何自定义消息 40 9. 如何改变窗口的图标? 40 10. 如何改变窗口的 缺省风格? 40 11. 如何将窗口居中显示? 41 12. 如何让窗口和 MDI窗口一启动就最大化和最小化? 41 13. 如何使程序保持极小状态? 41 14. 如何限制窗口的 大小? 41 15. 如何使窗口不可见? 41 16. 如何使窗口始终在最前方? 41 17、如何创建一个字回绕的CEditView 42 18、通用控件的显示窗口 42 19、移动

16,465

社区成员

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

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

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