WPARAM与LPARAM的疑惑

recapturetaiwan 2000-08-30 09:34:00
我看见一个托盘程序的例子,对自定义消息的WPARAM与LPARAM参数的值来自哪里
非常不解
程序大概是这样的
主程序MyDlg.cpp
1.自定义消息:#define WM_TRAY WM_USER + 100
2.函数原形:afx_msg LRESULT OnTrayNotify(WPARAM wParam,LPARAM lParam);
3.消息映射:ON_MESSAGE(WM_TRAY,OnTrayNotify)
4.原函数:
LRESULT CMyDlg::OnTrayNotify(WPARAM wParam,LPARAM lParam)
{
return m_tray.OnTrayNotify(wParam,lParam);
}

托盘类的实现程序Tray.cpp
1.成员函数:
int OnTrayNotify(WPARAM wID,LPARAM lEvent)
{
if(wID == TRAYNOTIFYDATA.uID)
return 0;
if(lEvent == WM_LBUTTONDOWN){
处理代码
}
else if(lEvent == WM_RBUTTONDOWN){
处理代码
}
return 0;
}

其主要功能是这样的:
当用户点击任务区的该应用的图标(托盘)时,如果是右键,
弹出用户自己定义的菜单,如果是左键,则执行弹出菜单的
第一项对应的单击处理函数

我的疑问是:在用户用鼠标单击托盘时,将执行
CMyDlg::OnTrayNotify(...)函数,然后将调用
CTray::OnTrayNotify(...)函数,但WPARAM与LPARAM的值
从何处来?
注:
1.程序运行良好。
2.创建托盘的程序未给出,需要提醒的是:
在创建托盘结构时,已有
TRAYNOTIFYDATA.uCallBackMessage = WM_TRAY;
3.有些语句可能记得不是很准确。
4.先谢谢各位帮忙

...全文
334 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
EdwinYeah 2000-09-02
  • 打赏
  • 举报
回复
WINDOWS编程中的回调函数(CALL BACK)通常都是由WINDOWS自已调用,参数赋值也是由WINDOWS来赋.WINDOWS是多任务系统,所有消息都是首先由WINDOWS截获,然后确定消息属于那些窗口(注意有些进程没有窗口),然后就通过调用所属窗口的窗口函数,把消息传给该窗口。在调用回调函数时,WINDOWS会把消息的参数通过wParam和lParam传给函数。如上面的OnTrayNotify(WPARAM wParam,LPARAM lParam),当用户有左键或右键击托盘时,WINDOWS首先收到,然后就调用OnTrayNotify,并通过wParam及lParam告诉OnTrayNotify是左键还是右键击了托盘。

Holly 2000-08-31
  • 打赏
  • 举报
回复
luxes:
解释有误,回调函数只是函数指针使用的一种情况,并不是WINDOWS专有!
你自己写一个函数接收函数指针,然后在该函数内部通过调用函数指针实现回调的过程,那么函数指针所指向的函数就称为回调函数!
luxes 2000-08-31
  • 打赏
  • 举报
回复
回调函数就是说函数你来写,但你不负责调用它,而由WINDOWS来调用。如果你对SDK/C编程熟悉的话,你就会知道窗口处理函数就是回调函数。
wParam 表示图标的ID号
lParam 表示鼠标的按键事件
recapturetaiwan 2000-08-31
  • 打赏
  • 举报
回复
能否给一个回调函数的例子,为什么window程序的窗口过程都是回调函数,它究竟是
怎样回调的,windows为什么要使用回调函数
recapturetaiwan 2000-08-31
  • 打赏
  • 举报
回复
什么是回调函数?
自定义消息的wparam,lparam函数到底被window付了怎样的值?
Holly 2000-08-30
  • 打赏
  • 举报
回复
实际上所有的消息响应都有WPARAM和LPARAM的存在,只是有些消息响应WPARAM和LPARAM没有意义,所以在MFC封装后有些固定的消息响应函数看不到WPARAM和LPARAM,但依然可以通过GetCurrentMessage()取得当前的消息来查看WPARAM和LPARAM。
U皮特U 2000-08-30
  • 打赏
  • 举报
回复
这是典型的windows回调函数,WPARAM和LPARAM参数是windows系统在鼠标单击托盘时自动赋值的。
回调函数就是这样,你只要编写事件发生时如何处理的过程,而传进来的参数由windows负责。

16,472

社区成员

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

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

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