MFC:从不同的类调用上下文菜单单击的函数,而不是让它调用其默认函数
MFC: Call a function from different class for context-menu click instead of having it call its default function?
假设我有一个名为CListCtrlStyled的网格类,它派生自CWnd,一个来自MFC的内置类。
假设我有另一个叫做Parent的类,它使用一个CListCtrlStyled的实例,并映射到一个列表控件。交货。
void Parent::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_CONTROL, listCtrl);
}
CListCtrlStyled也有自己的函数和处理程序。它将以这种方式处理右键单击事件。
BEGIN_MESSAGE_MAP(CListCtrlStyled, CListCtrl)
//{{AFX_MSG_MAP(CListCtrlStyled)
ON_NOTIFY_REFLECT_EX(NM_RCLICK, OnRclick)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
OnRclick调用某个函数,这取决于点击了哪个上下文菜单选项(复制、粘贴等)。
我想在不调用实例类中的处理程序的情况下处理Parent类中的右键事件,但我不确定如何。
我试过这样处理。
BEGIN_MESSAGE_MAP(Parent, CDialog)
//{{AFX_MSG_MAP(CListCtrlStyled)
ON_NOTIFY(NM_RCLICK, IDC_LIST_CONTROL, &Parent::OnRclick)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
虽然它在Parent类中处理右键,但它也在CListCtrlStyled类中处理它。
注意,CListCtrlStyled也在其他类中使用,所以只是编辑这个类中的复制函数来适应我想对Parent类做的事情不是一个选项。
最终,当我从右键菜单中单击"复制"时,我想使用父类的复制函数而不是实例的类。
也许这个设计有缺陷?如果有其他的设计可以让我做到我所说的,我应该考虑,请告诉我,谢谢。
您(或其他人)已经设计了CListCtrlStyled
控件,它首先使用ON_NOTIFY_REFLECT_EX(NM_RCLICK, OnRclick)
宏处理右键单击事件的方式。宏将CListCtrlStyled::OnRclick
方法定义为右击事件的第一个处理程序。在处理程序中,您可以返回TRUE或FALSE以允许父进程处理Right Click事件。然而,正如您正确注意到的那样,事件将首先由CListCtrlStyled
处理,然后传递给Parent
类的处理程序。
有一种方法可以首先在Parent
中处理此事件,甚至阻止它在CListCtrlStyled
中处理。你在PreTranslateMessage中做这个。您在消息被分派之前处理它,如果您返回TRUE, CListCtrlStyled
甚至不会知道它。下面是一小段代码:
BOOL Parent::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_RBUTTONUP && pMsg->hwnd == listCtrl.GetSafeHwnd())
{
// do something
// if you want to block the message from later processing then return TRUE.
// if you want to allow the handlers for NM_RCLICK to also handle the message
// then comment the line below
return TRUE;
}
return __super::PreTranslateMessage(pMsg);
}
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 代码的效率. 转到和函数调用
- 是同一作用域的函数部分中的函数调用
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 类型擦除的std::function与虚拟函数调用的开销