CMFCToolBarButton中有时候要用不同的图标表示不同的状态,那么如何改变CMFCToolBarButton的位图或者图标呢?
这个问题今天困扰了我一天?查了一天的资料终于解决了。
图中红色圆形中的图标在程序初始化时是灰色的,但是当我点击连接设备并成功后图标变为绿色,代表表连接成功。
实现方法:
1、在创建CMFCToolBar工具栏时
//创建串口工具栏 if (!m_wndSerialPortToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(1,1,1,1), IDR_TOOLBAR_SERIALPORT) || !m_wndSerialPortToolBar.LoadToolBar(IDR_TOOLBAR_SERIALPORT, 0, 0, TRUE, IDB_SERIALPORT_COOL, 0, IDB_SERIALPORT_HOT)) { TRACE0("未能创建工具栏\n"); return -1; // 未能创建 }要添加两个资源,一个是 IDB_SERIALPORT_HOT,一个是 IDB_SERIALPORT_COOL
2、需要添加按钮的消息映射。
在头文件中添加:afx_msg void OnBnClickedButtonStatueIcon();
在实现文中添加:
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
ON_BN_CLICKED(ID_BUTTON_SERIALPORT_STATUEICON, &CMainFrame::OnBnClickedButtonStatueIcon)
END_MESSAGE_MAP()
以及
void CMainFrame::OnBnClickedButtonStatueIcon()
{
}
3、添加状态切换的消息映射
头文件中添加:afx_msg void OnUpdateMainmenuOncommandStatueIcon(CCmdUI *pCmdUI);
实现文件中添加:
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWndEx)
ON_UPDATE_COMMAND_UI(ID_BUTTON_SERIALPORT_STATUEICON, &CMainFrame::OnUpdateMainmenuOncommandStatueIcon)
END_MESSAGE_MAP()
以及
void CMainFrame::OnUpdateMainmenuOncommandStatueIcon(CCmdUI *pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(m_bOnlineStatue);
}
4、在头文件中添加一个BOOl变量m_bOnlineStatue,由于3中的函数是自动触发的,所以只要改变m_bOnlineStatue的值,就可以任意控制按钮上的图标是灰是亮了。
OK,完美解决!