请教关于MFC菜单项变灰的问题
首先,要想控制系统的初始化效果,需要添加Test的InitInstance()虚函数,在里面写菜单栏的置灰操作,代码如下:
CMenu* submenu = m_pMainWnd->GetMenu();
submenu->EnableMenuItem(1,MF_BYPOSITION | MF_ENABLED | MF_GRAYED);
用到了变量m_pMainWnd,这个是系统定义的窗口句柄;函数EnableMenuItem(),这里的含义是:是对菜单栏上第二个菜单项进行置灰操作,由于在系统的顶级菜单项没有ID,因此,我通过指定位置的方式进行。
在需要使菜单栏生效的地方,只要做相反的操作即可。代码如下:
CMenu* pMenu = AfxGetMainWnd()->GetMenu();
pMenu->EnableMenuItem(1,MF_BYPOSITION | MF_ENABLED );
这样就完成了菜单栏上菜单项的控制操作。
MFC中,怎么让弹出菜单的某一个菜单项变灰(不可用)?
CMenu::EnableMenuItem
UINT EnableMenuItem( UINT nIDEnableItem, UINT
nEnable );
返回值:
返回以前的状态(MF_DISABLED, MF_ENABLED,
或MF_GRAYED),如果无效,则返回-1。
参数:
nIDEnableItem 指定由nEnable决定的将要有效的菜单项。该参数既可以指定弹出菜单项,也可以指定标准菜单项。
nEnable 指定了将要进行的动作。它可以是MF_DISABLED, MF_ENABLED,或MF_GRAYED与
MF_BYCOMMAND或MF_BYPOSITION的组合。这些值通过位与操作进行组合。这些值有下列含义:
·
MF_BYCOMMAND
指定参数给出已存在的菜单项的命令ID号。此为缺省值。
·
MF_BYPOSITION
指定参数给出已存在菜单项的位置。第一项所在的位置是0。
·
MF_DISABLED
使菜单项无效,以便它不能被选择,但不变灰。
·
MF_ENABLED
使菜单项有效,以便它能够被选择,并可从变灰的状态中恢复出来。
·
MF_GRAYED
使菜单项无效,以便它不能被选择并同时变灰。
说明:
使菜单项有效、无效或变灰。CreateMenu,InsertMenu,ModifyMenu和LoadMenuIndirect成员函数同时也设置菜单项的状态(有效、无效、或变灰)。
使用MF_BYPOSITION的值需要应用恰当的CMenu对象。若菜单条的CMenu被使用,那么顶层菜单项(菜单条中的某项)将受影响。如果为了在弹出菜单或嵌套的弹出菜单中通过位置来设置项的状态,那么应用必须指定弹出菜单的CMenu。
当应用指定了MF_BYCOMMAND标志,那么Windows将检测所有的属于CMenu的弹出菜单项。因此,除非当前正在复制菜单项,那么使用菜单条的CMenu是非常有效的。
如何让MFC对话框中的Menu菜单变灰或恢复
MFC中,菜单按钮的使能问题是在系统空闲时候处理的。
一个菜单项用于处理一个功能,功能处理问题和使能问题,写代码上基本相同:
假如一个菜单项的 ID 为 ID_COMMAND
功能处理:
在窗口的 h 文件中定义函数
afx_msg void OnGrapFenJie();
afx_msg void OnUpdateFenjie(CCmdUI * pCmdUI);
然后在窗口的 CPP 文件中实现代码:
void OnGrapFenJie()
{
菜单的功能代码
}
void OnUpdateFenjie(CCmdUI * pCmdUI);
{
pCmdUI->Enable(菜单可用 ? TRUE : FALSE);
}
最后 窗口 CPP 文件是 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间加入代码,相应消息就可以了。
ON_COMMAND(ID_COMMAND, OnGrapFenJie)
ON_UPDATE_COMMAND_UI(IDID_COMMAND, OnUpdateFenjie)
MFC 想讲菜单中的一个选项实现与一个按钮一样的功能,如何实现
在菜单编辑器里对应的菜单项上点右键-添加事件处理程序还有一种方法是在代码里添加。在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()中间添加ON_COMMAND()ON_COMMAND的第一个参数为菜单ID,第二个参数为对应的处理函数地址如果你的IDC_BUTTON4按钮消息处理函数已经写好了的话。这里的第二个参数只需把IDC_BUTTON4按钮的消息处理函数地址复制上去即可
mfc如何给工具栏关联函数
Create和LoadToolBar函数,只是实现了类的创建和资源加载,之后还要实现显示和子类化。建议在OnInitDialog里面做工具条初始化,而不是OnCreate里面。工具条的Create要有初始位置(参数,有默认值0),如果没有,则需要在创建后通过MoveWindow之类的函数设定。显示工具条,在你提问中两个函数调用之后,先设置m_wndToolBar.ShowWindow(SW_SHOW)的显示属性,再调用工具条必须使用的函数:RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);注意工具条变量必须是类成员。
vb是什么
vb:Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言。是一种可用于微软自家产品开发的语言。“Visual” 指的是开发图形用户界面 (GUI) 的方法——不需编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象add到屏幕上的一点即可。“Basic”指的是 BASIC (Beginners All-Purpose Symbolic Instruction Code) 语言,是一种在计算技术发展历史上应用得最为广泛的语言。Visual Basic源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库。或者轻松的创建Active X控件,用于高效生成类型安全和面向对象的应用程序 。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。扩展资料:VB的语言特色:1、可视化的设计平台:在使用传统的程序设计语言编程时,一般需要通过编写程序来设计应用程序的界面(如界面的外观和位置等),在设计过程中看不见界面的实际效果。而在Visual Basic 6.0中,采用面向对象程序设计方法(Object-Oriented Programming),把程序和数据封装起来作为一个对象,每个对象都是可视的。开发人员在界面设计时,可以直接用Visual Basic 6.0的工具箱在屏幕上"画"出窗口、菜单、命令按键等不同类型的对象,并为每个对象设置属性。开发人员要做的仅仅是对要完成事件过程的对象进行编写代码,因而程序设计的效率可大大提高。2、事件驱动的编程机制:面向过程的程序是由一个主程序和若干个子程序及函数组成的。程序运行时总是先从主程序开始,由主程序调用子程序和函数,开发人员在编程时必须事先确定整个程序的执行顺序。而Visual Basic 6.0事件驱动的编程是针对用户触发某个对象的相关事件进行编码,每个事件都可以驱动一段程序的运行。开发人员只要编写响应用户动作的代码。这样的应用程序代码精简,比较容易编写与维护。3、结构化的程序设计语言:Visual Basic 6.0具有丰富的数据类型和众多的内部函数。其采用模块化和结构化程序设计语言,结构清晰,语法简单,容易学习。4、强大的数据库功能:Visual Basic 6.0利用数据控件可以访问Access、FoxPro等多种数据库系统,也可以访问Excel、Lotus等多种电子表格。5、ActiveX技术:ActiveX发展了原有的OLE技术,使开发人员摆脱了特定语言的束缚,方便地使用其他应用程序提供的功能,使Visual Basic 6.0能够开发集声音、图像、动画、字处理、电子表格、Web等对象于一体的应用程序。6、网络功能:Visual Basic 6.0提供的DHTML(动态HTML)设计工具可以使开发者动态地创建和编辑Web页面,使用户能开发出多功能的网络应用软件。参考资料:百度百科_Visual Basic
excel中如何实现在选中某一个单元格后使其改变背景颜色,在鼠标移开后,其颜色又恢复为无色
最好通过VBA编程实现:思路:1、对选定区域内的所有单元格进行判定:若地址和激活单元格相同,底色为某种颜色(如红色);否则为无色。2、退出前再次判定:若有单元格底色不为无色,则设置为无色。具体步骤:(设填充底色为红色)1、确定需要满足变色单元格的区域(如A1:D10)2、第一轮判定:打开Excel,按Alt+F11进入VB界面,双击左侧【工程-VBAProject】窗口中的“Sheet1(Sheet1)”进入代码窗口,粘贴如下代码后保存代码:Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Range For Each i In Range("A1:D10") If i.Address = Target.Address Then i.Interior.ColorIndex = 3 Else i.Interior.ColorIndex = 0 '代码解释:若选定区域的某一单元格地址与当前激活单元格相同,底色设置为红色,否则为无色。 NextEnd Sub3、第二轮判定:双击【工程-VBAProject】窗口中的“ThisWorkbook”进入代码窗口,粘贴如下代码后保存代码:Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim ii As Range For Each ii In Range("A1:D10") If ii.Interior.ColorIndex 0 Then ii.Interior.ColorIndex = 0 NextEnd Sub4、后续工作:保存代码、保存文件(文件类型为带宏的Excel)。退出VB界面,在A1:D10中激活任一单元格,则底色置红色。保存文件后,退出时可看到红色区域消失。注意事项:1、该方法需要在代码中人为修改符合要求的单元格区域范围(如上面的A1:D10),执行时可根据需要自行修改,也可以通过输入对话框Inputbox()等方式自动引入(此处从略)。2、底色颜色不一定为红色,可将Interior.ColorIndex属性值改为其他自然数,颜色对照表参见下面的链接:http://blog.sina.com.cn/s/blog_44cb3d3d0100fzh7.html3、如有疑问或更好的想法可发邮件到zandong_19@yahoo.cn,欢迎交流学习!