AppWizard生成的SDI程序之所以不用写代码就能响应一些菜单是因为在CFrameWnd或者CFrameWnd的基类里已经有映射这些消息的响应函数,至于象ID_FILE_NEW,ID_FILE_OPEN之类的是不是宏,我想这就没有必要争了吧,有点C++基础的都应该会知道,打开resource.h就一目了然了,下面是摘自深入浅出MFC关于哪些ID的消息映射已经被基类处理的介绍拉㆘這些選單仔細瞧瞧,你會發現Framework 真的已經為我們做了不少瑣事。凡是選單 項目會引起對話盒的,像是Open 對話盒、Save As 對話盒、Print 對話盒、Print Setup 對 話盒、Find 對話盒、Replace 對話盒,都已經恭候差遣;Edit 選單㆖的每㆒項功能都已 經可以應用在由CEditView 掌控的文字編輯器㆖;File 選單最㆘方記錄著最近使用過的 (所謂LRU)㆕個檔案名稱(個數可在Appwizard ㆗更改),以方便再開啟;View 選 單允許你把工具列和狀態列設為可見或隱藏;Window 選單提供重新排列子視窗圖示的 能力,以及對子視窗的排列管理,包括卡片式(Cascade)或拼貼式(Tile)。㆘表是預設之選單命令項及其處理常式的摘要整理。最後㆒個欄位「是否預有關聯」如 果是Yes,意指只要你的程式選單㆗有此命令項,當它被選按,自然就會引發命令處理 常式,應用程式不需要在任何類別的Message Map ㆗攔截此命令訊息。但如果是No, 選單內容命令項ID 預設的處理函式預有關聯 New ID_FILE_NEW CWinApp::OnFileNew No Open ID_FILE_OPEN CWinApp::OnFileOpen No Close ID_FILE_CLOSE CDocument::OnFileClose Yes Save ID_FILE_SAVE CDocument::OnFileSave Yes Save As ID_FILE_SAVEAS CDocument::OnFileSaveAs Yes Print ID_FILE_PRINT CView::OnFilePrint No Print Pre&view ID_FILE_PRINT_PREVIEW CView::OnFilePrintPreview No Print Setup ID_FILE_PRINT_SETUP CWinApp::OnFilePrintSetup No "Recent File Name" ID_FILE_MRU_FILE1~4 CWinApp::OnOpenRecentFile Yes
我很菜,define我会用,但哪个是红分不清,嘿嘿//俺找书了,在c++primer中说的是预编译常量用C语言进行程序设计时,预处理器可以不受限制地建立宏并用它来替代值。因为预处理 器只做文本替代,它既没有类型检查思想,也没有类型检查工具,所以预处理器的值替代会产 生一些微小的问题,这些问题在C + +中可通过使用c o n s t而避免。 C语言中预处理器用值替代名字的典型用法是这样的: #define BUFSIZE 100这个就是传说中的宏吗?楼主的分是倒出来的还是这个问题vc6象导生成的sdi//所有步凑都是默认的然后它生成的东西编译后是个sdi应用程序,我不知道这个里边的菜单项里的工具栏,状太栏那两项在哪响应的,好心人给讲讲讲
用C语言进行程序设计时,预处理器可以不受限制地建立宏并用它来替代值。因为预处理 器只做文本替代,它既没有类型检查思想,也没有类型检查工具,所以预处理器的值替代会产 生一些微小的问题,这些问题在C + +中可通过使用c o n s t而避免。 C语言中预处理器用值替代名字的典型用法是这样的: 这段话是thinking in C++中的
wokao,你看看菜单中这两项的ID不就得了.ID_VIEW_TOOLBAR ID_VIEW_STATUS_BAR在CFrameWnd中有 // turning on and off standard frame gadgetry ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateControlBarMenu) ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnBarCheck) ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu) ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck) ON_UPDATE_COMMAND_UI(ID_VIEW_REBAR, OnUpdateControlBarMenu) ON_COMMAND_EX(ID_VIEW_REBAR, OnBarCheck)
47357696(Aresの银羽) 03:12:41
把主框架OnCreate里的乱七八糟的东西删了就没工具栏和状态栏了
617703( 大大) 03:13:28
怎么处理的菜单呀?我没找着呢?
47357696(Aresの银羽) 03:13:42
菜单?
47357696(Aresの银羽) 03:13:49
我也找不到,好象很麻烦哦
617703( 大大) 03:14:11
你也没找到?那代码里没有怎么响应的呢?
47357696(Aresの银羽) 03:14:25
你要去掉菜单还是干什么?47357696(Aresの银羽) 03:14:43
工具栏,状态栏,菜单全干掉了,你还不如用对话框程序
617703( 大大) 03:15:55
我现在想看看vc自动生成的是怎么回事呢,你用象导生一个看看
47357696(Aresの银羽) 03:16:39
菜单操作好象封了~
应该在VC目录里能找到
617703( 大大) 03:16:59
????
47357696(Aresの银羽) 03:17:13
MFC封装了
617703( 大大) 03:18:00
晕,你做了没有啊?
47357696(Aresの银羽) 03:18:32
做啥呀?
617703( 大大) 03:19:24
你看看sdi怎么处理的那两个命令呢,,一个是工具栏,一个状态栏
47357696(Aresの银羽) 03:20:01
创建,初始化,显示呢
617703( 大大) 03:20:39
你编译完没?
47357696(Aresの银羽) 03:20:46
没
47357696(Aresの银羽) 03:20:49
有问题?
617703( 大大) 03:23:00
太有问题了
47357696(Aresの银羽) 03:24:04
啥问题,说啊
617703( 大大) 03:26:50
http://expert.csdn.net/Expert/topic/1795/1795590.xml?temp=.2609369
47357696(Aresの银羽) 03:27:43
响应是什么概念?
617703( 大大) 03:27:58
就是在哪处理的
47357696(Aresの银羽) 03:28:22
每个工具栏有个ID啊
617703( 大大) 03:29:03
晕,菜单是怎么处理的????
47357696(Aresの银羽) 03:30:00
菜单的创建与初始化封在MFC库里了
617703( 大大) 03:31:09
不用响应的吗?
47357696(Aresの银羽) 03:32:06
每个菜单都有ID,
响应Oncommand
47357696(Aresの银羽) 03:32:13
你糊了?
617703( 大大) 03:32:30
??47357696(Aresの银羽) 03:32:46
不明白你的意思
617703( 大大) 03:33:21
这样吧,你生成一个sdi很麻烦吗?如果不麻烦生一个,然后你看看再说好吧
47357696(Aresの银羽) 03:33:59
我已经开了三个VC了
617703( 大大) 03:34:00
我现在已经给四个人发消息了,不知道他们什么时候给回贴
617703( 大大) 03:34:27
你生成一个sdi,很快的然后编译
47357696(Aresの银羽) 03:35:30
没发现问题呀,怎么了?
47357696(Aresの银羽) 03:35:46
你是不是说没加代码,那些菜单就可以用了?
617703( 大大) 03:35:58
OK,对对,就是这个问题47357696(Aresの银羽) 03:36:07
。47357696(Aresの银羽) 03:36:35 这就象对话框中IDOK不要加代码就可以关闭对话框一样的啊
617703( 大大) 03:37:00
我晕,,唉
47357696(Aresの银羽) 03:37:19
你把菜单的ID改一下...47357696(Aresの银羽) 03:37:27
绝对不可以响应了
47357696(Aresの银羽) 03:37:44
是上面的基类已经把这些事做好了
47357696(Aresの银羽) 03:37:49 CWnd类
47357696(Aresの银羽) 03:38:03
你想改就重载是了,不想改就不用管了
617703( 大大) 03:38:22
你说 的ID到是有道理,我也这么想的
617703( 大大) 03:38:39
哪把哪做好了?47357696(Aresの银羽) 03:39:03
CWnd类已经有OnFileOpen函数
OnAbout函数
47357696(Aresの银羽) 03:39:24
你的窗口类就继承了这些虚函数
47357696(Aresの银羽) 03:39:30
当然不要写代码了
617703( 大大) 03:40:07
晕,你没明白我意思,我是说工具栏,状太栏
47357696(Aresの银羽) 03:40:21
一样的道理啊
617703( 大大) 03:40:23
你打开sdi,47357696(Aresの银羽) 03:40:47
class CMainFrame : public CFrameWnd
47357696(Aresの银羽) 03:41:00
应该是CFrameWnd类里有这函数了
617703( 大大) 03:41:07
我说你不信,看sdi!!!!47357696(Aresの银羽) 03:41:12
看了
617703( 大大) 03:41:23
我吐了,,找到查看菜单
617703( 大大) 03:41:47
那个查看菜单你看到没有?
47357696(Aresの银羽) 03:42:17
你是说他没有处理就能显示隐藏?
617703( 大大) 03:42:24
对对对
47357696(Aresの银羽) 03:43:02
等,我用SPY++看怎么传递消息的
617703( 大大) 03:43:04
你要是能讲明白我给你200分,,
617703( 大大) 03:43:30
我也看看
47357696(Aresの银羽) 03:44:59
查找窗口
47357696(Aresの银羽) 03:45:06
然后发送消息 47357696(Aresの银羽) 03:46:28
在隐藏的时候
壮态收到了sizeparent和windowposchanged两个消息
47357696(Aresの银羽) 03:46:57
肯定是基类处理函数发过来的
617703( 大大) 03:47:16
我收到了windowposchanged和windowsposchanging47357696(Aresの银羽) 03:48:29
CframeWnd向自己的子窗口发个消息不难吧
617703( 大大) 03:49:06
怎么响应的呢?能把代码找出来吗??
617703( 大大) 03:49:31
我自己写要代码的,完全能实现,ms不用代码就可以做到,你说怎么回事?
47357696(Aresの银羽) 03:49:53
说了是基类上写的代码47357696(Aresの银羽) 03:50:03 你咋的还不明白呢
617703( 大大) 03:50:26
基类上的代码总得有的吧?
617703( 大大) 03:50:41
你也不能说没有代码的呀?
47357696(Aresの银羽) 03:50:50
你找CFrameWnd的实现代码
47357696(Aresの银羽) 03:51:00
在VC的安装目录下面
617703( 大大) 03:51:29
我不管什么类的,菜单要响菜功能,不用代码就可以做到,真是让人服了
47357696(Aresの银羽) 03:51:46
肯定用了代码的
617703( 大大) 03:52:03
让我咋明白?你把代码找出来,我给你200分
617703( 大大) 03:52:22
我给四个人发了消息,他们都不来答,是啥意思?
47357696(Aresの银羽) 03:52:39
我倒了,在MFC库里
你叫我怎么找
你又把AfxMessageBox的实现代码找出
47357696(Aresの银羽) 03:53:07
AfxMessageBox是调用api MessagBoxA与MessageBoxW
617703( 大大) 03:53:14
处理菜单不用红就可以处理菜单命令?我服了
47357696(Aresの银羽) 03:53:22
这些代码封在MFC库里了啊
617703( 大大) 03:53:54
我在问,处理菜单不用消息应射就可以??
617703( 大大) 03:54:33
答案我已经知道,肯定是可以,但不知道是为啥,ms又不说,搞人呐
617703( 大大) 03:55:21
c什么类也没有处理这个的,就算有也要用红应射上去的
47357696(Aresの银羽) 03:55:41
我倒 ̄
617703( 大大) 03:56:10
你比方说,那个新建文件,人家就有处理了,用了个oncommand景射到机类上了617703( 大大) 03:56:38
你就倒吧,,我也倒,没办法喽
47357696(Aresの银羽) 03:56:59
我把宏删掉,看MFC认不认识就知道了
617703( 大大) 03:57:22
好啊,试试
617703( 大大) 03:58:17
不响应
47357696(Aresの银羽) 03:58:18
在工程里根本就没有定义ID_FILE_NEW这个宏
说明这个宏是MFC强制定义了
617703( 大大) 03:58:23
呵呵,解释吧
617703( 大大) 03:58:56
晕,ID_FILE_NEW是个ID呀哈哈
47357696(Aresの银羽) 03:59:07
ID也是宏啊
617703( 大大) 03:59:14
没听说过
47357696(Aresの银羽) 03:59:20
#@!¥#@!¥#@!¥
47357696(Aresの银羽) 03:59:35
果然强
617703( 大大) 03:59:39
你去csdn发贴问问吧
617703( 大大) 04:00:02
你说我强?搞笑
47357696(Aresの银羽) 04:00:44
你随便找个程序打开resource.h看看
是不是所有的ID都是以宏的形式定义了
47357696(Aresの银羽) 04:01:08
象ID_FILE_NEW是为了识别方便
其实ID就是个数字
617703( 大大) 04:01:11
ID是define的617703( 大大) 04:01:40
define的就是红还是define本身是红你别搞错呀
617703( 大大) 04:02:10
是个UINT呀,哈哈,是红吗?
47357696(Aresの银羽) 04:02:11
算了,与你扯不清,你自己去想吧
47357696(Aresの银羽) 04:02:19
ID_FILE_NEW是个宏
617703( 大大) 04:02:36
那我去问问
項目會引起對話盒的,像是Open 對話盒、Save As 對話盒、Print 對話盒、Print Setup 對
話盒、Find 對話盒、Replace 對話盒,都已經恭候差遣;Edit 選單㆖的每㆒項功能都已
經可以應用在由CEditView 掌控的文字編輯器㆖;File 選單最㆘方記錄著最近使用過的
(所謂LRU)㆕個檔案名稱(個數可在Appwizard ㆗更改),以方便再開啟;View 選
單允許你把工具列和狀態列設為可見或隱藏;Window 選單提供重新排列子視窗圖示的
能力,以及對子視窗的排列管理,包括卡片式(Cascade)或拼貼式(Tile)。㆘表是預設之選單命令項及其處理常式的摘要整理。最後㆒個欄位「是否預有關聯」如
果是Yes,意指只要你的程式選單㆗有此命令項,當它被選按,自然就會引發命令處理
常式,應用程式不需要在任何類別的Message Map ㆗攔截此命令訊息。但如果是No,
選單內容命令項ID 預設的處理函式預有關聯
New ID_FILE_NEW CWinApp::OnFileNew No
Open ID_FILE_OPEN CWinApp::OnFileOpen No
Close ID_FILE_CLOSE CDocument::OnFileClose Yes
Save ID_FILE_SAVE CDocument::OnFileSave Yes
Save As ID_FILE_SAVEAS CDocument::OnFileSaveAs Yes
Print ID_FILE_PRINT CView::OnFilePrint No
Print Pre&view ID_FILE_PRINT_PREVIEW CView::OnFilePrintPreview No
Print Setup ID_FILE_PRINT_SETUP CWinApp::OnFilePrintSetup No
"Recent File Name" ID_FILE_MRU_FILE1~4 CWinApp::OnOpenRecentFile Yes
器只做文本替代,它既没有类型检查思想,也没有类型检查工具,所以预处理器的值替代会产
生一些微小的问题,这些问题在C + +中可通过使用c o n s t而避免。
C语言中预处理器用值替代名字的典型用法是这样的:
#define BUFSIZE 100这个就是传说中的宏吗?楼主的分是倒出来的还是这个问题vc6象导生成的sdi//所有步凑都是默认的然后它生成的东西编译后是个sdi应用程序,我不知道这个里边的菜单项里的工具栏,状太栏那两项在哪响应的,好心人给讲讲讲
器只做文本替代,它既没有类型检查思想,也没有类型检查工具,所以预处理器的值替代会产
生一些微小的问题,这些问题在C + +中可通过使用c o n s t而避免。
C语言中预处理器用值替代名字的典型用法是这样的:
这段话是thinking in C++中的
ID_VIEW_STATUS_BAR在CFrameWnd中有
// turning on and off standard frame gadgetry
ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck)
ON_UPDATE_COMMAND_UI(ID_VIEW_REBAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_REBAR, OnBarCheck)
我找了半天没找到,不然就不用和他浪费口水了