VC++主要菜单工具
- 格式:ppt
- 大小:239.00 KB
- 文档页数:15
VC++6.0系统开发环境在Windows 98/2000/XP操作系统中正确安装了Visual C++ 6.0后,可以启动Visual C++6.0系统。
第一次运行时,将显示出“Tip of the Day”对话框,单击“Next”命令按钮,可看到有关各种操作的提示;如果不选中“Show tips at startup”复选框,那么以后运行Visual C++ 6.0时将不再出现此对话框。
单击“Close”命令按钮关闭此对话框,进入Visual C++6.0系统开发环境。
1 开发环境的菜单功能Visual C++6.0开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以及状态栏等组成。
在开发环境界面中,可以看到在它的上方排列着一系列菜单,如图1所示,而每一个菜单下都有各自的菜单命令。
在进一步与开发环境打交道之前,先了解各个菜单命令的基本功能是很有必要的,因为大部分的操作都是通过菜单来完成的。
图 1 VC++主菜单栏1. File莱单File菜单中的命令主要用来对文件和项目进行操作,如“新建”、“打开”、“保存”、“打印”等。
其中各项命令的功能描述如表1所示。
表 1 File菜单命令的快捷键及功能描述菜单命令快捷键功能描述New Ctrl+N 创建一个新项目或文件Open Ctrl+O 打开已有的文件Close 关闭当前被打开的文件Open Workspace 打开一个已有的项目Save Workspace 保存当前项目Close Workspace 关闭当前项目Save Ctrl+S 保存当前文件Save As 将当前文件用新文件名保存Save All 保存所有打开的文件Page Setup 文件打印的页设置(续表)菜单命令快捷键功能描述Print Ctrl+P 打印当前文件内容或选定的当前内容Recent Files 选择打开最近的文件Recent Workspace 选择打开最近的项目Exit 退出Visual C++6.0开发环境2. Edit菜单Edit菜单中的命令用来使用户方便快捷地编辑文件内容,如进行删除、复制等操作,其中大多数命令功能与Windows中标准字处理程序的编辑命令一致,各项命令的快捷键及它们的功能描述如表2所示。
VC经验技巧:标题栏、按钮、菜单等。
-wonsoft的专栏-CSDN博客VC经验技巧1.窗口最大最小化按纽的控制①怎样在程式开始的时候让他最大化?②vC++做出来的exe文档在窗体的右上方是没有最大化和最小化按钮的,怎样实现这一功能?③如何在显示窗口时,使最大化按钮变灰?①在App类里的C…App::InitInstance()中把m_pMainWnd->ShowWindow(SW_SHOW)改成m_pMainWnd->ShowWindow(SW_MAXIMIZE);②在CreateWidnow时用WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX 风格.③ 第一种方法:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cs// disable the maxmini boxcs.style &= ~WS_MAXIMIZEBOX;return TRUE;}第二种方法:CMenu*pMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE );int x=pMenu->GetMenuItemCount( );UINT pID=pMenu->GetMenuItemID(x-1);pMenu->EnableMenuItem(pID, MF_DISABLED);第三种方法:ModifyStyle(WS_MAXIMIZEBOX, 0);这个函数也能够是最大化按钮失效!并且能够在程式中动态的改变窗口的风格2.创建动态菜单void CMainFrame::OnSelectState(NMTOOLBAR* pnmtb, LRESULT *plr){CMenu menu;if(!menu.CreateMenu())return;menu.AppendMenu(MF_STRING,0,"开始");menu.AppendMenu(MF_STRING,0,"结束");CRect rc;m_wndT oolBar.SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);m_wndT oolBar.ClientToScreen(&rc);menu.TrackMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,rc.left, rc.bottom, this, &rc);// menu.DestroyMenu();menu.detach();}3.如何禁止对话框关闭按钮和浮动工具条上的系统菜单1、禁止对话框中的关闭按钮有二种方法。
VC++6.0系统开发环境在Windows98/2000/XP操作系统中正确安装了Visual C++6.0后,可以启动Visual C++6.0系统。
第一次运行时,将显示出“Tip of the Day”对话框,单击“Next”命令按钮,可看到有关各种操作的提示;如果不选中“Show tips at startup”复选框,那么以后运行Visual C++6.0时将不再出现此对话框。
单击“Close”命令按钮关闭此对话框,进入Visual C++6.0系统开发环境。
1开发环境的菜单功能Visual C++6.0开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以及状态栏等组成。
在开发环境界面中,可以看到在它的上方排列着一系列菜单,如图1所示,而每一个菜单下都有各自的菜单命令。
在进一步与开发环境打交道之前,先了解各个菜单命令的基本功能是很有必要的,因为大部分的操作都是通过菜单来完成的。
图1VC++主菜单栏1.File莱单File菜单中的命令主要用来对文件和项目进行操作,如“新建”、“打开”、“保存”、“打印”等。
其中各项命令的功能描述如表1所示。
表1File菜单命令的快捷键及功能描述菜单命令快捷键功能描述New Ctrl+N创建一个新项目或文件Open Ctrl+O打开已有的文件Close关闭当前被打开的文件Open Workspace打开一个已有的项目Save Workspace保存当前项目Close Workspace关闭当前项目Save Ctrl+S保存当前文件Save As将当前文件用新文件名保存Save All保存所有打开的文件Page Setup文件打印的页设置(续表)菜单命令快捷键功能描述Print Ctrl+P打印当前文件内容或选定的当前内容Recent Files选择打开最近的文件Recent Workspace选择打开最近的项目Exit退出Visual C++6.0开发环境2.Edit菜单Edit菜单中的命令用来使用户方便快捷地编辑文件内容,如进行删除、复制等操作,其中大多数命令功能与Windows中标准字处理程序的编辑命令一致,各项命令的快捷键及它们的功能描述如表2所示。
Vc++ 6.0 菜单的基本操作凡是从CWnd派生的类,它们既可以接收标准消息,也可以接收命令消息和通告消息。
而对于那些从CCmdTarget派生的类,则只能接收命令消息和通告消息,不能接收标准消息。
响应菜单项命令的顺序依次是:视类,文档类,框架类,最后才是应用程序类。
基本菜单操作:1. 标记菜单:可以通过CWnd的成员函数:GetMenu来获得指向菜单栏的指针,在框架类的OnCreate函数中,加入以下代码GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_C HECKED);2. 默认菜单项:分隔栏在子菜单中占据索引位置,一个子菜单只有一个默认菜单项GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);3. 图形标记菜单:m_bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION ,&m_bitmap,&m_bitmap);图形标记菜单上显示的位图的尺寸有固定的标准,我们创建的位图太大了,只显示了当前位图左上角的一小部分内容,通过GetSystemMetrics函数可以得到图形标记菜单上显示的位图的尺寸。
当该参数的值为SM_XMENUCHECK or SM_CYMENUCHECK时,这个函数将获取标记菜单项上标记图形的默认尺寸。
CString类提供了一个名为Format的函数,这个函数可以按照一定的格式把内容格式,然后将结果保存到CString类型的字符串对象中。
4. 禁用菜单项一旦在CMainFrame类的构造函数中把成员变量m_bAutoMenuEnable设置为FALSE后,就不需要对ON_UPDATE_COMMAND_UI或ON_COMMAND消息进行响应处理了,CMenu 类的EnableMenuItem函数将能够正常工作。
VC对话框程序添加目录菜单、工具条和状态栏为<对话框>添加工具条和状态栏前,先说说添加目录菜单栏;1,在Insert下拉菜单中选择Resorce,新建一个MENU,2,在CDialog::OnInitDialog();后面添加代码:CMenu menu;menu.LoadMenu(IDR_MENU1); // 红色部分为你新建MENU的ID索引SetMenu(&menu);为对话框程序添加工具条和状态栏摘要:本文介绍了在对话框程序基础上通过程序控制来动态添加工具条和状态条的实现过程和方法。
一、引言对于不需要文档/视图结构支持的程序一般都采用对话框做为程序的基础框架。
虽然在对话框程序上可以通过修改其属性来添加系统菜单,但对比SDI和MDI程序的工具条和状态栏未免使界面显得简单、单调。
虽然在Visual Basic 中提供有独立的工具条和状态栏标准控件可以直接在对话框上使用,但Visual C++ 6.0所提供的26种基本Windows标准控件却没有将它们包含其中。
因此要在对话框程序中实现工具条和状态栏只能通过编程来动态实现。
二、工具条的实现过程MFC对于工具条和状态栏分别提供了CToolBar和CStatusBar两个基本类库,但由于在实现时MFC 对其做了过多的封装,以至无法了解内部的一些核心技术。
因此本文在实现过程中放弃了相对比较方便的CToolBar和CStatusBar类的使用,而是通过SDK(Software Developers Kit,软件开发工具箱)式的WinAPI 应用程序接口来实现的。
在API函数中经常需要用到对话框的窗口句柄和当前的实例句柄,在SDK程序设计中以上两个句柄可以直接从入口函数WinMain()中引出,而在MFC下也对其做了封装,不能直接获取。
但MFC也为其留有接口:CWnd窗口类提供的GetSafeHwnd()可以返回对话框的窗口句柄;函数AfxGetInstanceHandle()则可以获取当前应用程序的实例句柄。
VC++控件使⽤——菜单VC++简单应⽤指南四——菜单⼀、菜单资源设计1.打开⼯作区窗⼝,在Resource View选项卡中,右击,选择插⼊2.打开插⼊资源对话框,选择Menu节点,点击新建3.打开菜单资源设计窗⼝,再按Enter键,显⽰菜单资源属性窗⼝4.在菜单资源属性窗⼝中填写标题5.选中菜单标题填写的⼦菜单,并点击Enter 键或者双击6.添加分割线,在菜单资源属性中点选分隔符(Separator)7.⼦菜单添加弹出菜单,菜单资源属性中点选弹出(Pop-up)8.给菜单添加快捷键,在标题后添加“&+字母”,则Alt+字母就是快捷键⼆、菜单项的命令处理1.命令设置在类向导中;打开类向导,点选Message Maps选项卡2.打开Message Maps选项卡,Class name对应对话框;Object IDs对应菜单项ID;Messages 对应事件:COMMAND单击事件3.选择COMMAND单击事件,点击Add Function,弹出创建窗⼝,点击OK4.在类向导中点击Edit Code按钮,显⽰命令处理函数三、动态创建菜单1.创建基于对话框的应⽤程序2.头⽂件中声明⼀个CMenu类对象m_Menu3.1在FileView选项卡中打开资源头⽂件(Resource.h),定义命令ID3.2在资源头⽂件中添加的代码如下#define ID_MENUCAT 1001#define ID_MENUDOG 1002#define ID_MENUMONKEY 10034.1在对话框OnInitDialog⽅法中创建菜单 4.2创建菜单程序m_Menu.CreateMenu();CMenu m_PopMenu;m_PopMenu.CreatePopupMenu();m_Menu.AppendMenu(MF_POPUP,(UINT)m_PopMenu,m_hMenu,"动物");m_PopMenu.AppendMenu(MF_STRING,ID_MENUCAT,"猫");m_PopMenu.AppendMenu(MF_STRING,ID_MENUDOG,"狗");m_PopMenu.AppendMenu(MF_STRING,ID_MENUMONKEY,"猴⼦");m_PopMenu.Detach();SetMenu(&m_Menu);5.2程序5.1在对话框的头⽂件中声明菜单的消息处理函数afx_msg void OnMenucat();afx_msg void OnMenudog();afx_msg void OnMenumonkey();6.2程序6.1在对话框源⽂件中添加消息映射宏,将命令ID关联到消息处理函数中ON_COMMAND(ID_MENUCAT,OnMenucat)ON_COMMAND(ID_MENUDOG,OnMenudog)ON_COMMAND(ID_MENUMONKEY,OnMenumonkey) 7.1在对话框源⽂件中添加消息处理函数7.2程序void CMy124Dlg::OnMenucat(){MessageBox("猫");}void CMy124Dlg::OnMenudog(){MessageBox("狗");}void CMy124Dlg::OnMenumonkey(){MessageBox("猴⼦");}四、创建弹出式菜单1.创建基于对话框的应⽤程序2.在资源选项卡中右击,选择插⼊,在插⼊资源窗⼝中选择Menu 点击新建3.对菜单进⾏编辑4.在对话框头⽂件中声明⼀个CMenu类对象m_Menu6.在类视图选项卡中,右击对话框程序节点,然后选择Add Windows Message Handler命令,在弹出的对话框中选择WM_RBUTTONUP 事件,点击Add Handler ,点击确定:⿏标右键抬起触发m_Menu.LoadMenu(IDR_MENU1);7.1在⿏标右键抬起事件处理函数中添加代码7.2程序CMenu *pMenu =m_Menu.GetSubMenu(0);CRect rect;ClientToScreen(&point);rect.top = point.x;rect.left = point.y;pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);8.1给弹出菜单中添加⽂件增加单击事件8.2程序MessageBox("成功");五、创建图标菜单1.创建基于对话框的应⽤程序2.在⼯作区窗⼝选择Recource View选项卡,右击⼀个节点,弹出快捷菜单,点击Insert命令3.在插⼊资源窗⼝,选择菜单资源,插⼊并编辑4.新建⼀个类;打开类向导,创建类名为CMenuIcon,5.打开CMenuIcon类的头⽂件,为该类添加⼀个基类Cmenu6.1在CMenuIcon头⽂件中定义⼀个数据结6.2程序构,⽤来保存菜单信息struct CMenuItem{CString m_ItemText;int m_IconIndex;int m_ItemID;};int m_Index;int m_IconIndex;CImageList m_ImageList;8.2程序8.1在CMenuIcon类的构造函数中初始化图像列表m_Index=0;m_IconIndex=0;m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));9.1在CMenuIcon类中添加AttatchMenu⽅法9.2AttatchMenu⽅法中添加程序9.3程序LoadMenu(m_uID);return TRUE;10.210.1在CMenuIcon类中添加MenuItem⽅法,并添加程序BOOL CMenuIcon::MenuItem(CMenu *pMenu){if(pMenu!=NULL){int m_Count=pMenu->GetMenuItemCount();for(int i=0;ipMenu->GetMenuString(i,m_ItemLists[m_Index].m_ItemText,MF_B YPOSITION);int m_itemID=pMenu->GetMenuItemID(i);m_ItemLists[m_Index].m_ItemID=m_itemID;if(m_itemID>0){m_ItemLists[m_Index].m_IconIndex=m_IconIndex;m_IconIndex+=1;}RING,m_ItemLists[m_Index].m_ItemID,(LPSTR)&(m_ItemLists[m_Index])); m_Index+=1;CMenu *m_SubMenu=pMenu->GetSubMenu(i);if(m_SubMenu){MenuItem(m_SubMenu);}}} return TRUE;}11.2程序11.1重载CMenuIcon类中MeasureItem虚拟⽅法,计算菜单项的⼤⼩1.在类上⽅右击,选择新建成员函数,并创建voidCMenuIcon::MeasureItem(LPMEASUREITEMSTRUCT IpStruct){if(IpStruct->CtlType==ODT_MENU){IpStruct->itemHeight=ITEMHEIGHT;IpStruct->itemWidth=ITEMWIDTH;CMenuItem* m_item;m_item=(CMenuItem*)IpStruct->itemData;IpStruct->itemWidth=((CMenuItem*)IpStruct->itemData)->m_ItemText.GetLength()*10;if(m_item->m_ItemID==0){IpStruct->itemHeight=2;}}}员函数,绘制菜单项⽂本void CMenuIcon::DrawItemText(CDC *pDC,LPSTR Str, CRect Rect){pDC->DrawText(Str,Rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);13.2程序13.1在CMenuIcon类中添加DrawItemIcon成员函数,绘制菜单项图标void CMenuIcon::DrawItemIcon(CDC *pDC, CRect Rect, int Icon){m_ImageList.Draw(pDC,Icon,CPoint(Rect.left+2,Rect.top+4),ILD_TRANSPARENT);}14.2程序14.1在CMenuIcon类中添加DrawSeparater成员函数,绘制分隔条void CMenuIcon::DrawSeparater(CDC *pDC, CRect Rect){pDC->Draw3dRect(Rect,RGB(255,0,255),RGB(255,0,255));}15.2程序15.1在CMenuIcon类中添加DrawTopMenu成员函数,绘制顶层菜单void CMenuIcon::DrawTopMenu(CDC *pDC, CRect Rect, BOOL Selected){if(Selected){pDC->Rectangle(&Rect);Rect.DeflateRect(1,1);pDC->FillSolidRect(Rect,RGB(192,170,220));}else{pDC->FillSolidRect(&Rect,RGB(192,192,192));}成员函数,绘制普通菜单项void CMenuIcon::DrawComMenu(CDC *pDC, CRect Rect, BOOL Selected) {if(Selected){pDC->Rectangle(&Rect);Rect.DeflateRect(1,1);pDC->FillSolidRect(Rect,RGB(255,0,0));}else{pDC->FillSolidRect(&Rect,RGB(255,255,255));}}17.2程序17.1重载CMenuIcon类中DrawItem虚拟⽅法,根据菜单项的不同状态绘制菜单项void CMenuIcon::DrawItem(LPDRAWITEMSTRUCT IpStruct){ if(IpStruct->CtlType==ODT_MENU) {if(IpStruct->itemData==NULL)return;unsigned int m_state=IpStruct->itemState;CDC* pDC=CDC::FromHandle(IpStruct->hDC);CString str =((CMenuItem*)(IpStruct->itemData))->m_ItemText;LPSTR m_str = str.GetBuffer(str.GetLength());intm_itemID=((CMenuItem*)(IpStruct->itemData))->m_ItemID;intm_itemicon=((CMenuItem*)(IpStruct->itemData))->m_IconIndex;CRect m_rect=IpStruct->rcItem;pDC->SetBkMode(TRANSPARENT);switch(m_itemID) {case -1: {DrawTopMenu(pDC,m_rect,(m_state&ODS_SELECTED)||(mDrawItemText(pDC,m_str,m_rect);break; }case 0: {DrawSeparater(pDC,m_rect);break;}default: {DrawComMenu(pDC,m_rect,m_state&ODS_SELECTED);DrawItemText(pDC,m_str,m_rect);DrawItemIcon(pDC,m_rect,m_itemicon);break; }}}}18.在对话框头⽂件中声明CMenuIcon类对象m_Menu 19.在对话框OnInitDialog⽅法中加载菜单资源,并设置菜单项m_Menu.AttatchMenu(IDR_MENU1);m_Menu.MenuItem(&m_Menu);this->SetMenu(&m_Menu);20重载对话框的OnDrawItem⽅法,在该⽅法中体⽤菜单类中DrawItem⽅法21重载对话框的OnMeasureItem⽅法,在该⽅法中体⽤菜单类中MeasureItem⽅法22.屏蔽message_map 23.析构函数中添加程序m_ImageList.Detach();。
菜单介绍Visual C++ 6.0开发环境中的菜单包括File、Edit、View、Insert、Project、Build、Tools、Window、Help、Layout等,下面对这些菜单进行介绍。
表1.1 File菜单中各命令的功能说明表1.2 Edit菜单中各命令的功能说明4.Insert菜单表1.4 Insert表1.5 Project菜单中各命令的功能说明表1.6 Build菜单中各命令的功能说明表1.7 Tools菜单中各命令的功能说明表1.9 Help菜单中各命令的功能说明工具栏介绍工具栏的作用是提供了一种快捷方式,用户不用在一层层的菜单中查找所需的功能。
通常,在工具栏中显示的是一些常用的命令。
默认情况下Visual C++ 6.0提供了11个标准工具栏,这些工具栏并不都显示在开发环境中,可以在工具栏上任意位置单击鼠标右键,从而选择要显示的工具栏,如图1.12所示。
Standard工具栏:用于维护和编辑工作区的文本和文件,如图1.13所示Build MiniBar工具栏:用于运行程序和调试程序,如图1.14所示。
Debug工具栏:用于调试程序,如图1.15所示工作区介绍工作区窗口主要包含3个选项卡,分别为ClassView(类视图)选项卡、ResourceView(资源视图)选项卡和FileView(文件视图)选项卡,下面分别进行介绍。
1.ClassView(类视图)ClassView选项卡用于显示工程中的类信息、结构信息、全局变量等。
通常,在程序中利用类视图来查看类的数据成员,定位类的方法,以及向类中添加数据成员、添加方法等。
ClassView选项卡如图1.16所示。
ClassView选项卡提供了工程中所有的类的层次列表,通过展开各个节点可以显示类中包含的细节。
在层次列表的每个项目前面都有一个图标,每个项目对应的图标含义如表1.11所示。
表1.11 项目对应的图标含义当用户双击类或者其成员的图标时,光标自动定位到类或其成员定义的起始位置。
VC++对话框的应用程序的菜单操作对话框的应用程序的菜单操作一、课程设计的功能:在一个基于对话框的应用程序中增加一个菜单资源,并把它连接到对话框窗口中,运行时显示出来。
完成以后的程序其运行界面如图1所示。
应用程序的标题为Application of Dialog based。
其主窗口中有三个按钮,它们分别为“时间”、“显示”和“退出”,以及两个“文件”和“帮助”的菜单栏。
单击“文件”菜单,出现一个下拉菜单,选择“时间”菜单,可以看到显示当前系统时间的消息框;单击菜单中的“显示”选项,则弹出一个显示基本信息的消息框;选择“退出”菜单,退出本应用程序。
单击相应的按钮完成同样的效果。
若单击“帮助”菜单,出现一个“关于应用程序”菜单项。
图1 Ex4_2程序主窗口二、课程的设计步骤1使用AppWizard创建一个对话框MFC应用程序(2)在Visual C++主菜单栏中选择File菜单中的New选项,打开New对话框。
(3)选择Project标签页,并在该标签页中选择MFC AppWizard应用程序向导,在Project name编辑框中输入工程文件名为Ex4_2,单击“OK”按钮。
(4)在MFC AppWizard-Step1对话框中,选择Dialog based选项,在MFCAppWizard-Step 2 of 4对话框中,在Please enter a title for your dialog 编辑框中给应用程序主窗口标题命名为“Application of Dialog based”。
单击“Finish”完成应用程序框架文件的创建。
2编辑对话框(1)选择项目工作区的ResourceView面板,(2) 切换到资源视图。
展开Dialog对话框资源类型。
双击IDD_EX4_2_DIALOG菜单资(3) 将弹出对话框编辑窗口和一个控件工具栏面板如下图所示。
图2 初始对话框编辑窗口控件工具栏面板列出了VC中所可以建立的控件类型,用户只要把鼠标停在某个控件标识上,可显示该控件的类型提示。
vc的菜单,⼯具栏⾸先,MFC会⾃动⽣成⼀些菜单,我们也可以在resource view中添加菜单。
点击菜单栏属性--〉左上⾓校园最图形,可以将属性页显⽰。
不会随着菜单项变动丢失。
ID号变灰的栏是不可以编辑的。
是弹出的POPUP菜单。
它不能被⽤来做响应。
⼤写字母标⽰资源。
IDI IDC IDM分别表⽰不同的类型资源。
⼀个菜单项可以由CMAINFRAM CXXXVIEW CXXApp CXXDOC view类先对其响应,接着doc类对其进⾏响应,MAINFRAM第三个对其进⾏响应,第四个响应的APP类对其进⾏响应。
Afxmessagebox框架函数,可以响应⾮WND派⽣类的弹出的提⽰,⽽wnd派⽣的可以直接⽤MessageBox函数。
消息包括三类:WM_XXX标准消息,从cwnd派⽣的类可以接收也可以接受命令消息,WM_COMMANed命令消息(通过ID号标识识别,由cmdtarget派⽣的类可以接受,⽐如说⽂档类,CEIDTview类),第三类通知消息,有cmdtarget派⽣的类可以接收。
APP和Doc类从CMDTARGET派⽣,所以不能接收标准消息。
命令消息,头⽂件消息影射中添加原形,原⽂件中添加ON_COMMND宏完成影射,还有命令函数实现。
命令函数由ONCOMMAND来处理,通知消息由ONNOTIFY来实现。
命令消息到来时⾸先到达CMAINFRAM然后到送达CVIEW 来处理,根据命令消息影射来处理,如果没有处理函数,交给DOC类,如果还没有处理函数,交还给VIEW类,------〉交还CMAINFRAM 类,如果他也没有处理函数,交给APP类来处理。
标记菜单(打对购得):在CMAINFRAM中ONCREATE中创建。
菜单属于框架窗⼝,获取菜单栏指针的⽅法为GetMenu,它返回⼀个返回CMenu的指针。
但是其指向的对象是不⼀样的,⼀个为菜单,⼀个为⼦菜单。
CMenu中的checkmenuitem⽅法可以设置标记。
VC菜单命令详解(文件打开、保存与关闭)第一部分:五个命令ID:处理函数ID_FILE_NEW CWinApp::OnFileNewID_FILE_OPEN CWinApp::OnFileOpenID_FILE_SA VE CDocument::OnFileSaveID_FILE_SA VEAS CDocument::OnFileSaveAsID_FILE_CLOSE CDocument::OnFileClose1.ID_FILE_NEWCWinApp::OnFileNew调用CDocManager::OnFileNew。
|CDocManager::OnFileNew判断文档模板是否多于一个,是则显示文档类型对话框(AFX_IDD_NEWTYPEDLG)让用户选择要创建的文档类型。
然后调用CDocTemplate::OpenDocumentFile(NULL)。
|CDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName,BOOL bMake_Visible=TRUE)对于SDI和MDI的处理不一样。
对于SDI,1,若已有文档打开,对其重新初始化,调用CDocument::SaveModified()保存当前文档;若没有文档存在,则调用CreateNewDocument()创建文档对象,再调用CreateNewFrame(pDoucment,NULL)创建文档的框架窗口。
2,若lpszPathName为NULL,则调用CDocument::OnNewDocument()处理新文档,用pDocument->SetPathName(lpszPathName)设置文档的路径。
3,判断当前线程主框架窗口是否存在,不存在则将1中创建的新框架作为主框架。
4,调用InitialUpdateFrame显示框架窗口。
对于MDI,与SDI基本相同,但是没有第3步。
|CDocument::OnNewDocument()首先调用DeleteContents()删除原文档内容,使用m_strPathName.Empty()清除当前文档路径,SetModifiedFlag(FALSE)。