CEdit添加右键菜单, ClistCtrl接收文件拖拽

原创 2015年07月09日 14:56:51

CEdit接收文件拖拽很容易(属性"Accept Files"选为true,添加窗体消息OnDropFiles),但ClistCtrl却很难;

CListCtrl添加右键菜单很容易,而CEdit却很难。


这种功能不全面,阴差阳错的感觉让人很头疼。

下面介绍一下 CEdit添加右键菜单 和 CListCtrl接收文件拖拽的方法


1. CEdit 添加右键菜单

从CEdit派生出一个类CMyEdit,添加消息ON_WM_CONTEXTMENU(),响应消息函数OnContextMenu()。如下:

类定义:

//自定义CMyEdit
//目的为了实现CEdit添加右键菜单

class CMyEdit : public CEdit
{
	DECLARE_DYNAMIC(CMyEdit)

public:

	CMyEdit();
	virtual ~CMyEdit();

	DECLARE_MESSAGE_MAP()

public:
	afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
};
类实现:

//自定义CMyListCtrl 类
IMPLEMENT_DYNAMIC(CMyEdit, CEdit)

BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
	ON_WM_CONTEXTMENU()    //必须要加
END_MESSAGE_MAP()

CMyEdit::CMyEdit()
{
}

CMyEdit::~CMyEdit()
{
}

void CMyEdit::OnContextMenu(CWnd* pWnd, CPoint point)
{
	// CG: This block was added by the Pop-up Menu component

	if (point.x == -1 && point.y == -1)
	{
		//keystroke invocation
		CRect rect;
		GetClientRect(rect);
		ClientToScreen(rect);

		point = rect.TopLeft();
		point.Offset(5, 5);
	}

	CMenu menu;
	VERIFY(menu.LoadMenu(IDR_MENU1));

	CMenu* pPopup = menu.GetSubMenu(0);
	ASSERT(pPopup != NULL);

	CWnd* pWndPopupOwner = this;

	while (pWndPopupOwner->GetStyle() & WS_CHILD)
	{
		pWndPopupOwner = pWndPopupOwner->GetParent();
	}

	pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner);
}

2. CListCtrl支持文件拖拽

类声明:

//自定义CMyListCtrl
//目的为了实现ListCtrl接收文件拖拽

class CMyListCtrl : public CListCtrl
{
	DECLARE_DYNAMIC(CMyListCtrl)

public:

	CMyListCtrl();
	virtual ~CMyListCtrl();

	DECLARE_MESSAGE_MAP()

public:
	afx_msg void OnDropFiles(HDROP hDropInfo);
};

类定义:

//自定义CMyListCtrl 类
IMPLEMENT_DYNAMIC(CMyListCtrl, CListCtrl)

BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
	ON_WM_DROPFILES()   //必须
END_MESSAGE_MAP()

CMyListCtrl::CMyListCtrl()
{
}

CMyListCtrl::~CMyListCtrl()
{
}

//ListCtrl接收拖拽(并且AcceptFiles属性要设为TRUE)
void CMyListCtrl::OnDropFiles(HDROP hDropInfo)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值

	((CUploadAPK*)GetParent())->OnDropFiles(hDropInfo);
}


CButton 添加右键菜单同理:

void CRButtonMenuDlg::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)  
{  
    // TODO: 在此处添加消息处理程序代码  
    CRect rect;  
    m_button.GetWindowRect(&rect);  
    CPoint p;  
    GetCursorPos(&p);//鼠标点的屏幕坐标  
    if (rect.PtInRect(p))  
    {  
        CMenu m_Menu;  
        m_Menu.LoadMenu(IDR_MENU1);//编辑好的菜单资源  
        CMenu *m_SubMenu = m_Menu.GetSubMenu(0);  
  
        m_SubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, this);  
    }  
} 



版权声明:本文为博主原创文章,未经博主允许不得转载。

MFC开发实用教程1:CListCtrl控件实现Item项拖拽效果

CListCtrl控件拖拽Item项,闲话少说,先上效果图给大家看看 看到效果图后,大家是不是觉得很赞,是不是很想知道,这样的效果是怎样实现的呢?ok 直奔主题,下面我说说实现步骤 一、添加一个...
  • d704791892
  • d704791892
  • 2014年03月30日 19:14
  • 2588

MFC总结之CListCtrl用法及技巧

主要包括以下十三点内容:基本操作、获取选中行的行号、复选框操作、动态设置选中行的字体颜色、设置选中行的背景颜色、禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与...
  • hebbely
  • hebbely
  • 2016年05月12日 19:09
  • 1935

CListCtrl添加右键菜单

添加CListCtrl的右键响应事件(NM_RCLICK) void CCardInfoDlg::OnNMRClickListCard(NMHDR *pNMHDR, LRESULT *pResult...
  • love3s
  • love3s
  • 2012年09月23日 11:22
  • 6681

MFC API——》WM_CONTEXTMENU、OnContextMenu (CWnd* pWnd, CPoint point) 弹出式菜单

使用弹出式菜单(PopMenu) 弹出式菜单(PopMenu)大家都熟悉,在WIN98的桌面上单击鼠标右键弹出的菜单就是弹出式菜单。通常情况下,弹出式菜单在鼠标右键单击时弹出,当然,也可以根据需...
  • liuxiaomao1988
  • liuxiaomao1988
  • 2014年04月11日 11:24
  • 739

CListCtrl删除选中行和CListCtrl的用法(详)

CListCtrl删除选中行 CListCtrl选中行有两种属性情况,如果设置了Single Selection为TRUE,则只能单选,否则为多选(默认)。 方法一: int CListCtr...
  • wang15061955806
  • wang15061955806
  • 2016年10月09日 11:01
  • 631

CListCtrl控件的标题栏添加checkbox

CListCtrl控件的标题栏添加checkbox CListCtrl控件添加checkbox很容易,直接设置CListCtrl的风格就可以了。但是在标题栏也添加checkbox,实现全选和全不...
  • JUST_DO_1122
  • JUST_DO_1122
  • 2016年08月15日 19:30
  • 2016

CListBox和CListCtrl添加右键菜单

CListBox添加右键菜单: 1》重载  virtual BOOL PreTranslateMessage(MSG* pMsg); 2》实现方法 BOOL Cpage1_l...
  • B_H_L
  • B_H_L
  • 2012年05月09日 11:54
  • 4742

OnContextMenu VS OnRButtonDown

楼主zary_linux(诚实、信用)2006-11-14 18:52:56 在 VC/MFC / 界面 提问单独用OnContextMenu   可以弹出菜单。     但加上OnRButtonDo...
  • spinaches
  • spinaches
  • 2010年07月02日 16:12
  • 815

自定义MFC ClistCtrl控件的示例代码

Author: kagula@20150401 环境:  vs2013sp1  自定义行高、字体、颜色。 如何引用的示例代码 初始化 BOOL CTestListCtrlDlg::OnInit...
  • lee353086
  • lee353086
  • 2015年04月01日 14:52
  • 2488

CListCtrl 虚拟列表

平常所用到的列ListView/ListCtrl控件,都是只有行至几百行数据,直至今日,在项目中遇到了上10W量级数据条,终于感觉到普通加载的艰辛,遂到网上乱找一通,发现大同小异,转载了这篇比较详细的...
  • mylovepanning
  • mylovepanning
  • 2015年05月22日 14:46
  • 1400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CEdit添加右键菜单, ClistCtrl接收文件拖拽
举报原因:
原因补充:

(最多只允许输入30个字)