BOOL TRecvDlg::EventButton(UINT uMsg, int nHitTest, POINTS pos) { switch (uMsg) { case WM_RBUTTONUP: if (!IsNewShell()) PopupContextMenu(pos); return TRUE; } return FALSE; }
/** * WM_MOUSEMOVE メッセージハンドラ * ・ドラッグ中ならば動的スクロール処理を行う */ void CTouchListCtrl::OnMouseMove(UINT nFlags, CPoint point) { if (!m_bDragging && m_bStopDragging) { return; } if( m_bDragging ) { int dx = point.x - m_ptDragStart.x; int dy = point.y - m_ptDragStart.y; DWORD dwNow = GetTickCount(); // MZ3_TRACE(L"CTouchListCtrl::OnMouseMove : 0x%X\n", dwNow); // dx,dyのドラッグ量に応じて、ドラッグ開始かどうかを判定する // m_bPanDragging, m_bVerticalDragging, m_drPanScrollDirection が設定される MySetDragFlagWhenMovedPixelOverLimit(dx, dy); // 縦スクロール中か? if (m_bVerticalDragging) { if (theApp.m_Platforms.WM6_5 || theApp.m_Platforms.WM6_5_1) { // WM6.5 以降であれば無効 } else { //if( m_bCanSlide ){ // SetSelectItem( m_iDragStartItem ); //} // 縦スクロール中 // グーのカーソルに変更 ::SetCursor( AfxGetApp()->LoadCursor(IDC_GRABBING_CURSOR) ); // 縦ドラッグ処理 // MZ3LOGGER_INFO(util::FormatString(L"OnMouseMove : 前回からの経過時間=%d[msec] (%d)", dwNow - m_dwLastDrawTick, dwNow)); ScrollByMoveY( point.y ); // ドラッグ開始時のN画面確保用フラグを解除しておく m_bFullPageDrawForBlackScrollStart = false; #ifdef WINCE if( !IsScrollWithBk() ){ // WMで、かつ背景同時スクロールでない場合は遅延再描画 MySetRedrawTimer( TIMER_INTERVAL_TOUCHLIST_SCROLLREDRAW_L ); } #endif // 慣性スクロール情報取得 m_autoScrollInfo.push( GetTickCount(), point ); } } else if( m_bPanDragging ){ // 横スクロール中 // マウスポインタ変更 switch( m_drPanScrollDirection ){ case PAN_SCROLL_DIRECTION_LEFT: // 左方向 ::SetCursor( AfxGetApp()->LoadCursor(IDC_ARROW_LEFT_CURSOR) ); break; case PAN_SCROLL_DIRECTION_RIGHT: // 右方向 ::SetCursor( AfxGetApp()->LoadCursor(IDC_ARROW_RIGHT_CURSOR) ); break; } } else { ::SetCursor( ::LoadCursor(NULL, IDC_ARROW) ); #ifdef WINCE // フォーカス矩形を表示 DrawItemFocusRect( m_iDragStartItem ); // タップ長押しでソフトキーメニュー表示 // (指先が微動した時のため) SHRGINFO RGesture; RGesture.cbSize = sizeof(SHRGINFO); RGesture.hwndClient = m_hWnd; RGesture.ptDown = point; RGesture.dwFlags = SHRG_RETURNCMD; if (::SHRecognizeGesture(&RGesture) == GN_CONTEXTMENU) { // 長押しした // フォーカス矩形を消す DrawItemFocusRect( m_iDragStartItem ); // WM_LBUTTONUPと同様にドラッグ終了処理を行う // キャプチャ終了 ReleaseCapture(); // 遅延描画タイマーのリセット MyResetRedrawTimer(); // 選択状態の設定 SetSelectItem( m_iDragStartItem ); RedrawItems( m_iDragStartItem , m_iDragStartItem ); // オフセットの調整(念のため) MyAdjustDrawOffset(); m_autoScrollInfo.clear(); // ドラッグフラグクリア m_bDragging = false; m_bPanDragging = false; m_bVerticalDragging = false; m_drPanScrollDirection = PAN_SCROLL_DIRECTION_NONE; // メニューポップアップ ClientToScreen(&point); PopupContextMenu(point); return; } // フォーカス矩形を消す DrawItemFocusRect( m_iDragStartItem ); #endif } } //CListCtrl::OnMouseMove(nFlags, point); }
/** * WM_LBUTTONDOWN メッセージハンドラ * ・ドラッグを開始する */ void CTouchListCtrl::OnLButtonDown(UINT nFlags, CPoint point) { if (!m_bDragging && m_bStopDragging) { return; } MZ3_TRACE( L"OnLButtonDown()\n"); // フォーカスを設定する SetFocus(); // オフセットのずれを調整 MyAdjustDrawOffset(); // 慣性スクロール停止 MyResetAutoScrollTimer(); m_iDragStartItem = HitTest( point ); //if( !m_bCanSlide ){ // SetSelectItem( m_iDragStartItem ); //} #ifdef WINCE // フォーカス矩形を表示 DrawItemFocusRect( m_iDragStartItem ); // タップ長押しでソフトキーメニュー表示 SHRGINFO RGesture; RGesture.cbSize = sizeof(SHRGINFO); RGesture.hwndClient = m_hWnd; RGesture.ptDown = point; RGesture.dwFlags = SHRG_RETURNCMD; if (::SHRecognizeGesture(&RGesture) == GN_CONTEXTMENU) { // 長押しした // フォーカス矩形を消す DrawItemFocusRect( m_iDragStartItem ); // 項目を選択する SetSelectItem( m_iDragStartItem ); RedrawItems( m_iDragStartItem , m_iDragStartItem ); // メニューをポップアップ ClientToScreen(&point); PopupContextMenu(point); return; } // フォーカス矩形を消す DrawItemFocusRect( m_iDragStartItem ); #endif // ドラッグ開始 m_bDragging = true; m_ptDragStart = point; m_iDragLine = 0; m_offsetPixelY = 0; // キャプチャ開始 SetCapture(); // 慣性スクロール情報取得 m_autoScrollInfo.push( GetTickCount(), point ); // 標準処理を呼ぶとキャプチャとかWM_LBUTTONUPが怪しいので呼ばない // とりあえずクリック処理として // ・アイテムの選択 // ・フォーカスの設定 // ・クリック通知メッセージを親に送る // をやってるが、足りなかったら追加しましょ //CListCtrl::OnLButtonDown(nFlags, point); }
/* Context Menu event call back */ BOOL TRecvDlg::EvContextMenu(HWND childWnd, POINTS pos) { PopupContextMenu(pos); return TRUE; }