WinCE识别触摸笔的右键点击

WinCE系统中,触摸笔长按事件相当于是鼠标右键弹出上下文菜单,在网上大约能找到两段相似的代码,一是用timer事件实现,另一个是捕获WM_LBUTTON_DOWN消息,再调用SHRecognizeGesture实现,大致代码如下:

 

在桌面上按住左键不放  弹出右键菜单。
case WM_LBUTTONDOWN:
{
  SHRGINFO    shrg;
  HMENU       hmenu;
 
  shrg.cbSize = sizeof(shrg);
  shrg.hwndClient = hWnd;
  shrg.ptDown.x = LOWORD(lParam);
  shrg.ptDown.y = HIWORD(lParam);
  shrg.dwFlags = SHRG_RETURNCMD | SHRG_NOANIMATION;
 
  if (SHRecognizeGesture(&shrg) == GN_CONTEXTMENU) {
    hmenu = GetSubMenu(g_hMainMenu, 0);
    TrackPopupMenuEx(hmenu,
                     TPM_LEFTALIGN,
                     LOWORD(lParam),                                              
                     HIWORD(lParam),
                     hWnd,
                     NULL);
  }
  break;
}

 

 

说明:

OS Versions: Windows CE .NET 4.2 and later.
Header: Aygshell.h.
Link Library: Aygshell.lib.

 

经过试验,两种方式都工作的不好,以上这种方式偶尔能弹出一下,多数时候并不能正常工作。经验长按并截获消息发现,长按时会发送一个WM_CONTEXTMENU消息,这就是长按后发送的消息。所以,处理方法如下:例如要在CListCtrl列表上选中一行,并长按触摸笔并弹出上下文菜单,重载窗口的PreTranslateMessage函数,将收到的上下文菜单发到自定消息处理函数处理。

 

//定议消息

#define    ID_MSG_CONTEXT_MENU   WM_USER + 101

 

//消息处理函数

LRESULT MyDialog::OnCListCtrlContextMenu(WPARAM wParam, LPARAM lParam)

 

//消息映射

BEGIN_MESSAGE_MAP(MyDialog, CDialog)

    ON_MESSAGE(ID_MSG_CONTEXT_MENU, OnCListCtrlContextMenu)

END_MESSAGE_MAP()

 

重载PreTranslateMessage函数

 

BOOL MyDialog::PreTranslateMessage(MSG* pMsg)

{

//处理鼠标长按

    if(pMsg->message == WM_CONTEXTMENU)

    {

       CWnd* pCur = WindowFromPoint(pMsg->pt);

 

       if (pCur == &m_listView)

       {

           PostMessage(ID_MSG_CONTEXT_MENU,NULL,NULL);

       }

    }

    return CDialog::PreTranslateMessage(pMsg);

}

 

//弹出上下文菜单

LRESULT MyDialog::OnCListCtrlContextMenu(WPARAM wParam, LPARAM lParam)

{

    POSITION  pos = m_listView.GetFirstSelectedItemPosition();

    if (pos != NULL)

    { 

       int item = m_ listView.GetNextSelectedItem(pos);

       POINT point;

       GetCursorPos(&point);

       //自定义上下文化菜单

CMenuActive Menu(point, this);

Menu.InitMenu(MENU_ADD|MENU_EDIT|MENU_DELETE);

      

    }

    return 0;

}

这样就能完美的实现长按时弹出上下文菜单。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值