新建空白工程:
免积分下载源码工程!搭配源码看文章
资源底部有源码,可以搭配源码来看。
在这里,我不将空白对话框作为Menu菜单的窗口,我们新建一个窗口:
右键添加AddResource ->MENU
依次类推:
我们给对话窗口添加一个类,方便我们做管理:
接下来给按钮添加响应,如图所示:
选择我们刚才新建的对话类窗口:
菜单栏单选
void CTOOLBOXMENU::On32774()
{
// TODO: 我们在ID_32774这个菜单上实现 单选。
//我们的[菜单栏学习]->[打开]->子菜单是从32773 - 32778
//例程-单选实现
CMenu* menu = GetMenu()->GetSubMenu(0); //获得菜单项的第0个子菜单 即[菜单栏学习]这一列
menu->CheckMenuRadioItem(ID_32773, ID_32778, ID_32774, MF_BYCOMMAND); //设置32774单选状态
}
去主文件中吧窗口切换到菜单栏学习窗口
去对话框窗口属性吧菜单栏选上
运行效果如下:
接下来我们给32776添加一个一样的
void CTOOLBOXMENU::On32776()
{
// TODO: Add your command handler code here
//例程-选中类 //改为ID_32776为选中项
GetMenu()->GetSubMenu(0)->CheckMenuRadioItem(ID_32773, ID_32778, ID_32776,MF_BYCOMMAND);
}
运行效果如下:
菜单栏选中加√
2和4只能选中其中之一,不能实现多选。
接下来我们在[关闭]这一栏为按钮添加复选效果
步骤跟上述一样,代码如下:
void CTOOLBOXMENU::On32779()
{
// TODO: Add your command handler code here
//例程-复选框
CMenu* menu = GetMenu()->GetSubMenu(0);
menu->CheckMenuItem(ID_32779, MF_BYCOMMAND | MF_CHECKED);//通过命令ID,选中ID_32779
}
void CTOOLBOXMENU::On32780()
{
// TODO: Add your command handler code here
//例程-复选框
CMenu* menu = GetMenu()->GetSubMenu(0);
menu->CheckMenuItem(ID_32780, MF_BYCOMMAND | MF_CHECKED);//通过命令ID,选中ID_32780
}
运行效果如下:
给菜单添加示例位图
代码如下:
BOOL CTOOLBOXMENU::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 位图代码添加到这里
CMenu *pMenu=GetMenu();
CMenu *pSubMenu=pMenu->GetSubMenu(1);
for(int i=0;i<3;i++)
{
CBitmap bmpmenu;
bmpmenu.LoadBitmap(IDB_MENU);
pSubMenu->SetMenuItemBitmaps(i,MF_BYPOSITION,&bmpmenu,&bmpmenu);
bmpmenu.Detach();
}
// END: 位图代码结束
return TRUE; // return TRUE unless you set the focus to a control
}
运行结果如下:
设计弹出式菜单
//弹出式菜单 右键
void CTOOLBOXMENU::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CMenu *Menu=GetMenu();
ClientToScreen(&point);//将窗口坐标转换成屏幕坐标
Menu->GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTBUTTON|TPM_VERTICAL,point.x,point.y,this);
Menu->Detach();
CDialogEx::OnRButtonUp(nFlags, point);
}
效果如下图所示:
源码链接:源码连接及笔记