WindowsCEのポインティングデバイスはマウスではなくスタイラスペンです。スタイラスのタップはマウスの左ボタンに相当します。スタイラスで右ボタンを押したい場合、H/PCでは ALT+タップ、PocketPCではタップアンドホールドで代用されます(一定時間スタイラスを同じ位置で押す)。
スタイラスで右ボタンを押す方法
H/PCの場合 - ALT+タップ
スタイラスは左ボタンなので、ALT+タップを押した場合も発生するイベントはあくまでWM_LBUTTONDOWN(左ボタン押下)です。左ボタンのイベントハンドラの中で、ALTキーが押されているかどうかを調べることになります。
ALT+タップでコンテキストメニューを表示する例。 void CEBWinView::OnLButtonDown(UINT nFlags, CPoint point) { if ( GetAsyncKeyState( VK_MENU )& 0x8000 ) { // ALT押下 CMenu menu,*pPopup; menu.LoadMenu(IDR_POPUP_MENU); pPopup = menu.GetSubMenu(0); MakeSubMenu( pPopup ); if ( pPopup ) { ClientToScreen( & point ); pPopup->TrackPopupMenu(TPM_LEFTALIGN , point.x, point.y, AfxGetApp()->GetMainWnd()); } } else { // 通常の左ボタンの処理 } }
PocketPCの場合 - タップアンドホールド
タップアンドホールドでコンテキストメニューを表示する例。 void CEBWinView::OnLButtonDown(UINT nFlags, CPoint point) { #if defined(_WIN32_WCE_PSPC) && (_WIN32_WCE >= 212) SHRGINFO RGesture; RGesture.cbSize = sizeof(SHRGINFO); RGesture.hwndClient = m_hWnd; //タップアンドホールドメニューをつけたいウインドウのハンドル RGesture.ptDown.x = point.x; RGesture.ptDown.y = point.y; RGesture.dwFlags = SHRG_RETURNCMD; // 一定時間同じスポットが押さえられているかを認識する if( ::SHRecognizeGesture(&RGesture) == GN_CONTEXTMENU ){ // ↑これでグルグルマークが出ます。 CMenu menu,*pPopup; menu.LoadMenu(IDR_POPUP_MENU); pPopup = menu.GetSubMenu(0); MakeSubMenu( pPopup ); if ( pPopup ) { ClientToScreen( & point ); pPopup->TrackPopupMenu(TPM_LEFTALIGN , point.x, point.y, AfxGetApp()->GetMainWnd()); } } else { // 通常の左ボタンの処理 } #endif }