OnNotify虚函数是干什么的?

hitxiang 2002-09-06 08:55:54
它与ON_NOTIFY有什么联系?
...全文
2109 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hankuu 2002-09-07
  • 打赏
  • 举报
回复
你看看这个文件:

X:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\wincore.cpp


里的函数:
BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)

这是消息处理过程,你看了就知道用sendmessage发送消息时谁先处理了
andy_lau 2002-09-07
  • 打赏
  • 举报
回复
在win3.x时,子控件是通过WM_COMMAND来通知父窗口,当要传递更多信息时,WM_COMMAND不能胜任,因为参数太少,应而产生了很多象WM_CTLCOLOR, WM_VSCROLL这类的消息,这使得消息很复杂

到Win32后,控件也越来越复杂,因而必须有一个消息能传递大量信息,这就是WM_NOTIFY
hitxiang 2002-09-07
  • 打赏
  • 举报
回复
我觉得WM_NOTIFY的消息是系统定义的,而OnNotify可以自定义消息的内容,也可以是系统定义的!!

还有如果既有OnNotify,又有ON_NOTIFY,如果发送了自己用SendMessage函数实现的一个ON_NOTIFY消息,是那个先对他处理?OnNotify或ON_NOTIFY?
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
你自己也可以在子控件中发送WM_NOTIFY消息,在LPARAM中带上你自己的信息
hitxiang 2002-09-06
  • 打赏
  • 举报
回复
最后一个问题:

我觉得WM_NOTIFY的消息是系统定义的,而OnNotify可以自定义消息的内容,也可以是系统定义的!!
对吗?
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
OnNotify也是有WM_NOTIFY来到时才调用的
hitxiang 2002-09-06
  • 打赏
  • 举报
回复
用OnNotify方法和用响应WM_NOTIFY的方法其实处理的东西都是一样的,不同在于子控件和父窗口谁先处理该消息而已


我觉得WM_NOTIFY的消息是系统定义的,而OnNotify可以自定义消息的内容!
对吗?
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
LVN_ENDLABELEDIT是控件自动发送的
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
用OnNotify方法和用响应WM_NOTIFY的方法其实处理的东西都是一样的,不同在于子控件和父窗口谁先处理该消息而已
hitxiang 2002-09-06
  • 打赏
  • 举报
回复
ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT,OnEndlabeledit)

LVN_ENDLABELEDIT消息是控件自动发的,还是自己编程实现的
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
触发WM_NOTIFY都是在子控件要通知父窗口,且有很多信息要传递时
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
在win3.x时,子控件是通过WM_COMMAND来通知父窗口,当要传递更多信息时,WM_COMMAND不能胜任,因为参数太少,应而产生了很多象WM_CTLCOLOR, WM_VSCROLL这类的消息,这使得消息很复杂

到Win32后,控件也越来越复杂,因而必须有一个消息能传递大量信息,这就是WM_NOTIFY
hitxiang 2002-09-06
  • 打赏
  • 举报
回复
一个WM_NOTIFY消息

如果我们要父窗口先处理,然后子窗口处理,按这钟顺序下去,用OnNotify

如果我们要子窗口先处理,然后父窗口处理,这时应按相应WM_NOTIFY的方式

就是说OnNotify和WM_NOTIFY功能相似。谢谢
在问一下:一般什么时候,什么情况触发WM_NOTIFY消息,

hitxiang 2002-09-06
  • 打赏
  • 举报
回复
不好意思,英语不太好,有一点模糊!
能具体电吗
Hankuu 2002-09-06
  • 打赏
  • 举报
回复
一个WM_NOTIFY消息

如果我们要父窗口先处理,然后子窗口处理,按这钟顺序下去,用OnNotify

如果我们要子窗口先处理,然后父窗口处理,这时应按相应WM_NOTIFY的方式
In355Hz 2002-09-06
  • 打赏
  • 举报
回复
处理WM_NOTIFY消息,看看CWnd::OnWndMsg的代码:

if (message == WM_NOTIFY)
{
NMHDR* pNMHDR = (NMHDR*)lParam;
if (pNMHDR->hwndFrom != NULL && OnNotify(wParam, lParam, &lResult))
goto LReturnTrue;
return FALSE;
}
siphonelee 2002-09-06
  • 打赏
  • 举报
回复
OnNotify是一个虚函数,仔细看下面一段话。

The framework calls this member function to inform the parent window of a control that an event has occurred in the control or that the control requires some kind of information.

OnNotify processes the message map for control notification.

Override this member function in your derived class to handle the WM_NOTIFY message. An override will not process the message map unless the base class OnNotify is called.

siphonelee 2002-09-06
  • 打赏
  • 举报
回复
你说的对
其实OnNotify定义了控件相应ON_NOTIFY消息的入口
hitxiang 2002-09-06
  • 打赏
  • 举报
回复
我在程序中有:
afx_msg void OnEndlabeledit(NMHDR *pNMHDR,LRESULT *pResult);

ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT,OnEndlabeledit)

virtual BOOL OnNotify(WPARAM wParam,LPARAM lParam,LRESULT *pResult);
前两个对应,第三个跟谁对应?
hitxiang 2002-09-06
  • 打赏
  • 举报
回复
是不是当有自定义的ON_NOTIFY和ON_NOTIFY_REFLECT时,
OnNotify推动对应的message map运作。
加载更多回复(3)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧