第一步,建立基于对话框的工程。
第二步,添加menu资源,添加菜单项。
第三步, 在menu资源界面进入ClassWizard,此时会d出一个对话框,选中“select an exiting class”,然后在select class对话框中选中主对话框类。然后点OK。
第四步, 打开主对话框的属性,general下有menu选项,选中刚才添加的mune资源的ID.
第五步,为菜单项(在窗口类里)添加响应的函数。
什么问题呢?是编译不通过还是运行不正常?
能不能将问题描述的再清楚点呢?该交代的信息也应该一并写出来 。。。
我估计问题出在
GetMenu()->AppendMenu(MF_POPUP,(UINT)men.m_hMenu,"test")
在VC6中,函数接口入口参数一般都是char *
而在VS2010中,因为定义了Unicode,所以参数的类型都变成了wchar, 你将上述的改为
GetMenu()->AppendMenu(MF_POPUP,(UINT)men.m_hMenu, _T("test") )
看清楚了是
"test" 改成 _T("test")
在VC++中,将菜单加入到应用程序中:加载用户自定义菜单
在框架类CMainFrame类的OnCreate函数中加载用户自定义的菜单。双击左侧工作区中CMainFrame类的OnCreate函数。编辑代码如下:
DockControlBar(&m_wndToolBar)
CMenu menu//声明菜单对象
menu.LoadMenu(CG_IDR_POPUP_MY_VIEW)//黑色加粗为添加代码,括号内为自定义菜单名。
this-SetMenu(&menu)//设置自定义菜单替换现有菜单return 0;注:如果想创建级联菜单可选中Pop-up选项。
右键菜单的响应:
在View类中加入WM_RBOTTONDOWN的响应函数OnRButtonDown,在其中加入代码,如下:
CMenu menu//定义菜单对象
menu.LoadMenu(IDR_MYMENU) //加载菜单资源,括号内为定义菜单名
CMenu *pSubMenu=menu.GetSubMenu(0)//取得第一个顶层菜单
ClientToScreen(&point) //转换坐标
pSubMenu-TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,
point.x,point.y,GetParent())//d出菜单
CView::OnRBtuuonDown(nFlags,point)
菜单项属性对话框:几组选项ID(菜单项的ID):一般情况下,菜单的ID取值应遵循以下原则:ID_顶层菜单名_下一级菜单项名(_再下一级菜单项名)。如:ID_LOLOR_RED. 注:d出菜单不需要ID号。
Caption(菜单项的名称):可以英文,中文,数字,符号等。注:用户可以在Caption文本框中定义某个菜单项的快捷键,在菜单标题中响应的字母前输入“&”即可。如果菜单是中文,就必须用小括号把快捷键的说明括起来,如:“新建”菜单项的快捷键使用“(&N)”定义。提示:Caption 文本框中还有一串字符“\tCtrl+N”,这是用来表明该菜单项的加速键。加速键可以在不打开菜单的情况下直接执行菜单项。
Separtor(分隔线)复选框:选中该复选框,则菜单项变成一个分隔线,而原有菜单项丢失。如果用户想在已添加一条分隔线,可以先用鼠标拖动空白菜单到需要分隔线的位置,然后将这个空白菜单选择【Separator】复选框即可。
Pop-up(d出式)复选框:选择此复选框,菜单项将变成d出式菜单,即单击此菜单会d出下一级子菜单。Visual C++6.0 默认顶层菜单为d出式菜单。
Inactive(不活动)复选框:选中此复选框表面菜单项的初始状态为非活动状态。
Checked(检查标记)复选框:此复选框是菜单初始值的检查标记。选择该复选框,会在菜单项的左边打上一个钩。
Grayed(变灰)复选框:选中此复选框,该菜单项将以灰色显示,表明菜单的初始状态为不可访问。如果该复选框被选中,那么菜单一定是不活动的,所以,此时Inactive复选框不可用。
Help(帮助形式)复选框:选中此复选框,菜单会出现在菜单栏的右侧。
Break(菜单项的分割):当一个菜单的菜单项过多时,放在一列当中会感觉很长很拥挤。此时可以考虑把他分成两列来显示。Break就起到了这个作用。Break选项对应一个组合框,共有三种选择形式,分别是None、Column和Bar。
None:系统默认选项,表示不分割。
Column:列分割。选中此项时,从选中的菜单项一下的菜单项将另起一行。例如,将【文件】菜单中的【打印】菜单项选中此项的结果。
并列格式:和Column类似,也是列分割。只不过与Column不同的是,两列之间有一条竖线将他们隔开。文本框:在Prompt后面的文本框中可以输入文本。在程序运行时,当鼠标移到菜单项上时,在底部的状态栏将给出此菜单的功能提示。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)