MFC中的CListCtrl添加右鍵菜單消息響應實例分析

一.建立一個菜單資源ide

不管是靜態仍是動態,首先必須建立一個菜單資源,由於咱們右鍵點擊ClistCtrl的一項以後須要彈出一個菜單。函數


二.給菜單添加消息響應this

這一步跟通常的使用菜單時添加消息響應是同樣的,假如是如上面靜態建立的菜單的話,那麼直接使用嚮導生成一個菜單響應函數便可。spa


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" ) ;
	}
}


上面的代碼是給菜單項「購買」添加一個響應函數,當咱們選中一行,單擊鼠標右鍵,那麼這個菜單便會彈出來,咱們選擇相應的菜單項後就能夠進行菜單項指定的操做,這些操做都是在菜單項響應函數中實現的。code


上面的代碼有一個關於CListCtrl的重要操做,就是如何對選中的CListCtrl項進行處理,涉及到的API有GetNextItem,GetFirstSelectedItemPosition以及GetItemText。
orm


三.對CListCtrl進行消息處理事件

(1)給CListCtrl控件增添事件資源

增長NM_RBLCLK事件,生成一個響應函數。it


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;
}




四.效果演示io

相關文章
相關標籤/搜索