一.創建一個菜單資源
無論是靜態還是動態,首先必須創建一個菜單資源,因爲我們右鍵點擊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; }
四.效果演示