今天我将记录我学习的内容,那就是如何设计在列表中显示弹出菜单。
我们先新建立一个资源。
我们将ID设置为比较有意义的ID,这样比较好区分。
我们来学习GHOST的菜单,当GHOST在选择机器控制的时候,菜单资源才会可用,不然菜单资源就是灰色的。
当我们管理机器的时候,需要右键,然后跳出菜单来选择功能。所以我们需要添加一个事件。
加入RCLICK,当右键点击的时候响应事件。然后来写代码
void CGhostDlg::OnNMRClickListoline(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: Add your control notification handler code here CMenu popup; popup.LoadMenu(IDR_MENU); CMenu* pM = popup.GetSubMenu(0); CPoint p; GetCursorPos(&p); int count = pM->GetMenuItemCount(); if (m_list_oline.GetSelectedCount() == 0) //如果没有选中 { for (int i = 0; i < count; i++) { pM->EnableMenuItem(i, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //菜单全部变灰 } } pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this); *pResult = 0; }
接下来看效果。
接下来我们来完成菜单栏的功能函数。
我们依次添加响应事件即可。