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"。
运行如下图:
当然,也可以加入其它菜单,这就交给聪明的您了!


发布评论