您的位置:首页 > 其它

MFC中的CListCtrl添加右键菜单消息响应实例分析

2017-08-25 16:12 1881 查看
一.创建一个菜单资源无论是静态还是动态,首先必须创建一个菜单资源,因为我们右键点击ClistCtrl的一项之后需要弹出一个菜单。


二.给菜单添加消息响应这一步跟一般的使用菜单时添加消息响应是一样的,假如是如上面静态创建的菜单的话,那么直接使用向导生成一个菜单响应函数即可。
void CCustomerQueryBookInfoDlg::OnMenuBuy()
{	// TODO: Add your command handler code here

// 进行购买操作,增加一个订单信息即可
OrderInfo order ;	int nRet = 0 ;	int nItem = 0 ;

CString bookId ;

UpdateData() ;	// 获取选中CListCtrl控件的一行,获取信息
int nIndex = m_bookInfoListCtrl.GetNextItem(-1,LVIS_SELECTED);

POSITION ps = m_bookInfoListCtrl.GetFirstSelectedItemPosition() ;	if( NULL != ps )
{
nItem = m_bookInfoListCtrl.GetNextSelectedItem( ps ) ;
bookId = m_bookInfoListCtrl.GetItemText( nItem , 0 ) ;
}	// 构造订单数据
strcpy( order.bookId , (LPSTR)(LPCTSTR)bookId ) ;	char tmp[20] ;
itoa( (_ttoi(bookId) + 1) , tmp , 10 ) ;	strcpy( order.orderId , tmp ) ;	strcpy( order.buyerId , g_user.userId ) ;	strcpy( order.buyType , "VIP" ) ;

nRet = Insert( "f:\\db\\netBookShop.db" , "OrderInfo" , &order , INSERT_ORDER ) ;	if( 1 == nRet )
{
MessageBox( "Buy success!" , "Message" ) ;
}	else
{
MessageBox( "Buy fail!" , "Message" ) ;
}
}

上面的代码是给菜单项“购买”添加一个响应函数,当我们选中一行,单击鼠标右键,那么这个菜单便会弹出来,我们选择相应的菜单项后就可以进行菜单项指定的操作,这些操作都是在菜单项响应函数中实现的。

上面的代码有一个关于CListCtrl的重要操作,就是如何对选中的CListCtrl项进行处理,涉及到的API有GetNextItem,GetFirstSelectedItemPosition以及GetItemText。

三.对CListCtrl进行消息处理(1)给CListCtrl控件增添事件



增加NM_RBLCLK事件,生成一个响应函数。
void CCustomerQueryBookInfoDlg::OnRclickListQueryBookInfo(NMHDR* pNMHDR, LRESULT* pResult)
{	// TODO: Add your control notification handler code here
POINT pt;
GetCursorPos(&pt);    int x=m_bookInfoListCtrl.GetSelectionMark();

CMenu menu;
menu.LoadMenuA(IDR_MENU_LISTCTRL1 );
CMenu * pop=menu.GetSubMenu(0);
pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,this) ;

*pResult = 0;
}


四.效果演示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC 右键菜单 ListCtrl