2023年12月30日发(作者:)

CListCtrl右键菜单

VCKBASE真的是我非常喜欢的网站,学到了很多东西,但一直都没写点东西,今天就献丑了。

CListCtrl没有右键菜单,如果想点击右键弹出菜单该怎么办?当然可以从CListCtrl中派生出自己的类喽。

VC6.0:文件-新建-工程-MFC AppWizard(exe),工程吗CMyListCtrl,基于对话框-完成。选择列表控件,在对话框中画出矩形区域。点击右键-列表控件属性,样式-查看,选择报告(report)。点击菜单“查看”-“建立类向导”-MemberVariables,双击IDC_LIST1-Add Member Variable:Member variable

name:

m_list,Category:Control,Variable type:CListCtrl,OK,确定。

在OnInitDialog加入以下代码: /*-----------------------------------------------------------*/

m_endedStyle(LVS_EX_FULLROWSELECT |

LVS_EX_GRIDLINES);

m_olor(RGB(247,247,255));

m_tColor(RGB(0,0,255));

m_tBkColor(RGB(247,247,255));

m_Column(0, "学号", LVCFMT_LEFT, 110);

m_Column(1, "姓名", LVCFMT_LEFT, 130);

m_Column(2, "成绩", LVCFMT_LEFT, 47);

m_Item(0,"2002112105");

m_mText(0,1,"程红秀");

m_mText(0,2,"96");

m_Item(1,"2002112126");

m_mText(1,1,"符中辉");

m_mText(1,2,"85");

m_Item(2,"2002112125");

m_mText(2,1,"王斌年");

m_mText(2,2,"95");

m_Item(3,"2002112103");

m_mText(3,1,"袁浩");

m_mText(3,2,"92");

运行:如下图:

现在,列表控件中已经加入了数据,但没有右键菜单!这就是我们今天要做的了。选择resoure标签,点击菜单“插入”-“资源”-Menu-新建;菜单中添加复制相,ID:

IDM_COPY.

选中Class标签,选中工程目录,右键-New Class,Name:

CMyListCtrl,Base

class:CListCtrl,确定,我们就新建了个CMyListCtrl的类,右键点击CMyListCtrl-Add Windows Message Handler;双击WM_CONTEXTMENU-Edit

Existing,OnContextMenu函数如下:

void CMyListCtrl::OnContextMenu(CWnd* pWnd, CPoint point)

{

// TODO: Add your message handler code here

CMenu TheMenu;

nu(IDR_MENU1);

CMenu * pMenu = Menu(0);

int nRet = pMenu->TrackPopupMenu(TPM_RETURNCMD,point.x,point.y,this);

switch(nRet){

case IDM_COPY:

ListCopy();

break;

}

}

ListCopy()函数是要自己加入的,详见源码。

这样我们就把带有右键弹出菜单的CMyListCtrl给做好了。

最后要注意,把CMyListCtrlDlg.h中 CListCtrl m_list;定义,换成

CMyListCtrl m_list;,当然还要#include "MyListCtrl.h"。

运行如下图:

当然,也可以加入其它菜单,这就交给聪明的您了!