CListCtrl 之右键菜单

在使用CListCtrl时要为它添加一个右键菜单,步骤如下:

1. 响应CListCtrl的NM_RCLICK消息。

2. 添加一个菜单资源,在菜单资源中插入要添加到菜单内容。

 

  CListCtrl添加右键菜单 - ♂『風』De 影子 - 風~~吹过~~~~

一般存在两种方法:

一、

void CListCtrlDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)

{

CPoint point;

::GetCursorPos(&point);

CMenu menu;

VERIFY(menu.LoadMenu(IDR_MENU1));      //IDR_MENU_POPUP是新建菜单ID

CMenu* popup=menu.GetSubMenu(0);

ASSERT(popup!=NULL );

popup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this );

*pResult = 0;

}

//***这时在listctrl的任何位置右键都会出现右键菜单

二、

 void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
      {
           NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
           if(pNMListView->iItem != -1)
           {
                DWORD dwPos = GetMessagePos();
                CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
   
                CMenu menu;
                VERIFY( menu.LoadMenu( IDR_MENU1 ) );
                CMenu* popup = menu.GetSubMenu(0);
                ASSERT( popup != NULL );
                popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
           }
           *pResult = 0;
  }

 

//***这时只有listctrl存在选中项目的时候才会出现右键菜单

您可以通过以下步骤来实现在 CListCtrl 的双击事件中弹出菜单: 1. 首先,创建一个菜单资源。在资源视图中,右键单击您的项目,选择 "添加" -> "资源" -> "菜单"。然后在菜单编辑器中创建您的菜单项。 2. 在您的对话框或窗口类中,添加一个成员变量来存储菜单对象。例如,在对话框类的头文件中添加以下代码: ```cpp CMenu m_menu; ``` 3. 在您的对话框或窗口类的 OnInitDialog() 函数中加载菜单资源,并将其与 CListCtrl 控件关联。例如: ```cpp BOOL YourDialog::OnInitDialog() { CDialog::OnInitDialog(); // 加载菜单资源 m_menu.LoadMenu(IDR_MENU1); // 将菜单与控件关联 GetDlgItem(IDC_LIST1)->SetMenu(&m_menu); return TRUE; } ``` 4. 在 CListCtrl 的双击事件处理函数中,使用 TrackPopupMenu() 函数显示菜单。例如: ```cpp void YourDialog::OnLButtonDblClk(UINT nFlags, CPoint point) { // 获取选定的项 int nItem = ((CListCtrl*)GetDlgItem(IDC_LIST1))->GetNextItem(-1, LVNI_SELECTED); if (nItem != -1) { // 获取控件的客户区坐标 CRect rect; ((CListCtrl*)GetDlgItem(IDC_LIST1))->GetClientRect(&rect); ((CListCtrl*)GetDlgItem(IDC_LIST1))->ClientToScreen(&rect); // 创建并显示菜单 CMenu* pSubMenu = m_menu.GetSubMenu(0); pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x + rect.left, point.y + rect.top, this); } CDialog::OnLButtonDblClk(nFlags, point); } ``` 这样,当用户双击 CListCtrl 的某一项时,将会弹出您之前创建的菜单。您可以根据需要在菜单项的响应函数中添加相应的逻辑处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值