MFC下拉菜单打钩图标存取实例(源码下载)

1、本程序基于前期我的博客文章《MFC_ CFile类实现下拉菜单读写实例(源码下载)》
2、程序功能动态添加下拉子菜单,用CFile类读取保存下拉菜单,用GetProfileInt WriteProfileInt读取保存下拉菜单打钩序列号,实现选中即切换成打钩图标。
3、如何添加打钩图标参阅前期我的博客文章《按钮弹出式菜单子菜单选中实时显式打钩图标实例(源码下载)MFC菜单系列三》
4、在myDlg.h 文件
class CMyDlg : public CDialog中添加代码

CBitmap m_bmSel,m_bmList;
	void OnTypeChange(UINT nID);

5、在myDlg.cpp 文件开头添加代码

#define ID_DEF_PRODUCT 50000

void CMyDlg::DoDataExchange(CDataExchange* pDX)中添加代码

	//}}AFX_MSG_MAP
	ON_COMMAND_RANGE(ID_DEF_PRODUCT, ID_DEF_PRODUCT + 100, OnTypeChange)
END_MESSAGE_MAP()

6、在myDlg.cpp 文件添加OnTypeChange函数代码

void CMyDlg::OnTypeChange(UINT nID)
{
	theApp.m_nProductSel = nID - ID_DEF_PRODUCT+1;
	CWinApp* pApp = AfxGetApp();
    pApp->WriteProfileInt("参数","nProductSel1",theApp.m_nProductSel);

}

7、在myDlg.cpp 文件下拉菜单按钮中添加代码

void CMyDlg::OnButton2() 
{
int	m_nActivePlace = 0;

	CRect rect;
	GetDlgItem(IDC_BUTTON2)->GetWindowRect(&rect);
		while(m_menuType.GetSubMenu(0)->GetMenuItemCount() >2)
	{
		m_menuType.GetSubMenu(0)->RemoveMenu(2,MF_BYPOSITION);
	}
	for(int i = 0 ; i < theApp.m_allPara.GetSize() -1; i ++)
	{
		CString str;
		if(strlen(theApp.m_allPara[i + 1].m_strBrand) > 0)
			str.Format("%s(%s)",theApp.m_allPara[i + 1].m_strTypeName,theApp.m_allPara[i + 1].m_strBrand);
		else
			str.Format("%s",theApp.m_allPara[i + 1].m_strTypeName,theApp.m_allPara[i + 1].m_strBrand);
		m_menuType.GetSubMenu(0)->AppendMenu(MF_STRING,ID_DEF_PRODUCT + i,str);
	    m_menuType.GetSubMenu(0)->SetMenuItemBitmaps(ID_DEF_PRODUCT + i, MF_BYCOMMAND, &m_bmList,&m_bmSel);
	}

		CWinApp* pApp = AfxGetApp();
    int  m_nProductSel=pApp->GetProfileInt("参数","nProductSel1",0);		
	m_menuType.GetSubMenu(0)->CheckMenuItem(2 + m_nProductSel - 1,MF_CHECKED|MF_BYPOSITION);
	m_menuType.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,
	rect.left,rect.bottom,this);
	
}

运行程序
在这里插入图片描述
源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兵哥工控

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值