从TrackPopupMenu(创建快捷菜单的函数)看菜单消息路由机制

本文探讨了TrackPopupMenu函数在创建右键快捷菜单时的消息路由机制。当在视图类中使用`this`作为参数时,消息会先传递给视图类,再传递给文档类,最后可能返回到视图类。若改为使用`AfxGetMainWnd()`,消息则会首先传递给框架类,遵循自上而下的处理方式。理解这一机制对于有效处理菜单消息至关重要。
摘要由CSDN通过智能技术生成

先摘段《vc++深入详解》孙鑫的话

 

 

以上讲的是点击主菜单时的消息路由过程,但鼠标右键快捷菜单的消息路由有点区别。

TrackPopupMenu函数用来创建右键快捷菜单。

 

例:

CMenu menu;

 

menu.LoadMenu(MENUID);

menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON

                                                                 , x_position, y_position

                                                                 , this);

注意最后这个参数this。

一般情况下,快捷菜单会在视类(view)中创建,也就是说上面这段代码写进视类中时,那么这个就this代表指向视类的指针。这个时候点击出现的快捷菜单,消息会如何传递呢?

首先由view类接收到消息,然后查看view类是否有对此消息进行处理,如果有,则进入view类消息处理函数进行处理。如果没有,将此消息传递给Doc类,然后再查看Doc类是否有对此消息进行处理,如果有,则进入Doc类消息处理函数进行处理。如果没有,则将此消息返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值