WTL上下文菜单

 
         WM_CONTEXTMENU消息会在右键点击窗口客户区的时候发出,通过处理该消息,我们可以在此时弹出上下文菜单。
         我们可以添加一个菜单资源。如下图:
         我们利用CMainFrame的成员变量CCommandBarCtrl m_CmdBar来显示我们的上下文菜单。
 
LRESULT CMainFrame::OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
     CMenu menu;
     menu.LoadMenu(IDR_MENU1);
     CMenuHandle menuPopup = menu.GetSubMenu(0);
     m_CmdBar.TrackPopupMenu(menuPopup,TPM_RIGHTBUTTON | TPM_VERPOSANIMATION | TPM_VERTICAL,
         GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
     return 0;
}
         这样就完成了上下文菜单的显示。
         对于消息的处理,我们需要使用下面的宏:
COMMAND_ID_HANDLER(ID_TEST_P1,OnP1)
     然后在 OnP1函数中添加实现代码。这是比较简单的做法。
 
    下面我演示一种不使用 CCommandBarCtrl类的方法。我觉得这种方法更简单。首先生成WTL对话框工程。然后添加菜单资源,实现WM_COMMAND消息处理方法如下:
LRESULT CMainDlg::OnContextMenu(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
{
     CMenuHandle menuPopup = m_popupMenu.GetSubMenu(0);
     menuPopup.TrackPopupMenu(TPM_RIGHTBUTTON,GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam),m_hWnd,0);
     return 0;
}
    m_popupMenu是 CMainDlg的成员变量,类型为CMenuT<true>。并且在WM_INITDIALOG消息处理函数中调用成员函数LoadMenu。
         最后我们添加自己的菜单响应函数。
COMMAND_ID_HANDLER(ID_TEST_P1,OnP1)
     静态分割窗口也可以使用这种方法。
     注意,如果使用成员函数而不使用菜单资源添加菜单项,会遇到无法拦截菜单点击消息的情况,具体原因我没有花时间去查明,暂时就使用菜单资源好了。

转载于:https://www.cnblogs.com/believeit/archive/2007/08/08/2183632.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值