📄 06.3.2 默认菜单项.txt
字号:
6.3.2 默认菜单项
当使用各种软件时,读者可能注意到,有些应用程序的子菜单下有一个菜单项是以粗体形式显示的,以这种形式显示的就是该子菜单的默认菜单项。为了实现这种菜单项,可以利用CMenu类的SetDefaultltem成员函数来完成。这个函数的声明形式如下所示:
BOOL SetDefaultltem( UINT uitem, BOOL fByPos = FALSE );
这个函数有两个参数,井且第-个参数的取值也是由第二个参数决定的。第一个参数 Cultem)可以是新的默认菜单项的标识或位置索引,如果值为一1,则表明没有默认菜单项。第二个参数 CffiyPos)是BOOL类型,如果它的值为FALSE,则表明第一个参数是菜单项标识,否则是菜单项位置索引。由此可见,这个函数也为我们提供了两种访问菜单项的方式。
下面,我们就把【文件】子菜单下的【打开】菜单项设置为该子菜单的默认菜单项。首先利用位置索引的方式来实现,这时, SetDefaultltem函数的第二个参数应该设置为 TRUE,并且【打开】菜单项的位置索引是1,因此代码应该是例6-3中加灰显示的那行代
码。 1
例6-3
int CMainFr ame::OnCreate(LPCREATESTRUCT lpCreateStruc t} {
GetMenu(}->GetSubMenu(O} ->CheckMenultem(O , MF_BYPOS工TION I MF_CHECKED) ;
GetMenu(}->GetSubMenu(O}->SetDefaultLtem(1,TRUE} ;
return 0;
图 6.13打开菜单项为默认菜单项
Build并运行Menu程序,打开【文件】子菜单,就会看到【打开】菜单项已经变成以粗体显示的了,如图6.13所示。
当然,也可以利用菜单项标识的方式来实现默认菜单项。这时, SetDefaultItem函数的第二个参数应该设置为FALSE,因为这个参数的默认值就是 F丛SE,所以也可以不写这个参数。可以通过在菜单编辑器中利用菜单项属性对话框,查到【打开】菜单项的标识: ID_FILE_OPEN。于是,如果利用菜单项标识的方式实现默认菜单项,代码就应如例6-4中加灰显示的那行代码所示。
~tl6-4
int CMainFr ame::OnCreate(LPCREATESTRUCT lpCreateStruct} {
~~~ I 173
第6
…...
GetMenu()->GetSubMenu(O)->Chec)剖enultem(O, MF_BYPOSIT工ON I MF_CHECKED); GetMenu()->GetSubMenu(O)叩>SetDefault工tern(工D_F工LE_Of'EN, FALSE);
return 0;
下面,再将Menu程序中的【文件】子菜单下的【打印】菜单项也设置为默认菜单项,看看程序会出现什么样的结果。根据图6.13所示的【文件】子菜单的内容,可以数一下【打印】这个菜单项的索引号,如果按有文字显示的菜单项计数的话,得到结果就应是数值: 4。于是,可以在上述例6-4中加灰显示的那行代码之后添加6-5所示加灰显示的这行代码,以便将【打印】菜单项也设置为默认菜单。
例6-5
int CMainFrarne: :OnCreate(LPCREATESTRUCT lpCreateStruct) {
.
GetMenu()->GetSubMenu(O)->CheckMenultem(O , MF_BYPOSITION I MF_CHECKED);
GetMenu()->GetSubMenu(O)->SetDefaultltem(ID_FILE_OPEN, FALSE);
GetMenu()->GetSubMenu(O)->SetDefaultltern(4 , TRUE);
return 0;
Build并运行Menu程序,将发现【打印】菜单项并没有变成粗体显示。这是什么原因呢?是不是默认菜单项只能有一项呢?我们把设置【打开】菜单项为默认菜单项的那行代码(即上述例6-4中加灰显示的那行代码)注释起来,然后再次Build井运行Menu程序,但是将会发现【打印】菜单项还是没有以粗体显示。其实,真正的原因是我们在进行【打印】这个菜单项的索引计算时失误了。根据图 6.13,可以看到在【另存为】和【打印】菜单项之间有一个很长的分隔栏,这个分隔栏在于菜单中是占据索引位置的,也就是说,【打印】菜单项的索引应该是5,读者一定要应该注意这一点。于是,我们修改上述例 6-5中加显示的那行代码,将菜单位置索引值由 4改为5。再次Build并运行Menu程序,可以发现【打印】菜单项终图6.14打印菜单项为于变成粗体显示的了,结果如图6.14所示。默认菜单项
那么一个子菜单下能够同时有两个默认菜单项吗?先把刚才注释掉的设置【打开】菜单项为默认菜单项的那行代码前面的注释去掉,即这时代码应如例6-5所示,也就是说,程序希望将【文件】子菜单下的【打开】和【打印】这两个菜单项都设置为默认菜单项。 Build并运行Menu程序,打开【文件】子菜单,将会发现【打开】菜单项没有以粗体显示,
只有【打印】菜单项以粗体显示了,结果与图6.14是一样的。这说明一个子菜单只
个默认莱单项。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -