天天看点

CListCtrl添加右键菜单

添加CListCtrl的右键响应事件(NM_RCLICK)

void CCardInfoDlg::OnNMRClickListCard(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	//防止在空白区点击弹出菜单
	if (m_LstCtrl.GetSelectedCount() <= 0)
	{
		return;
	}
	//下面的这段代码, 不单单适应于ListCtrl
	CMenu menu, *pPopup;
	menu.LoadMenu(IDR_MENU_CARD_INFO);
	pPopup = menu.GetSubMenu(0);
	CPoint myPoint;
	ClientToScreen(&myPoint);
	GetCursorPos(&myPoint); //鼠标位置
	pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, myPoint.x, myPoint.y,GetParent());
}
           

 这里需要注意一个地方, TrackPopupMenu的最后一个参数, 按钮如果想要响应事件, 则必须指定为 事件所在类, 一般指定为this,如果用GetParent的话, ListCtrl只能弹出菜单, 但却响应不了事件, 当然, 除非你为ListCtrl创建类, 并在类里边实现菜单的各个事件

继续阅读