コード例 #1
0
ファイル: MainFrm.cpp プロジェクト: zxlooong/bcgexp
LRESULT CMainFrame::OnToolbarContextMenu(WPARAM,LPARAM lp)
{
    CPoint point (BCG_GET_X_LPARAM(lp), BCG_GET_Y_LPARAM(lp));

    CMenu menu;
    VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR));

    CMenu* pPopup = menu.GetSubMenu(0);
    ASSERT(pPopup != NULL);

    CBCGPPopupMenu* pPopupMenu = new CBCGPPopupMenu;
    pPopupMenu->Create (this, point.x, point.y, pPopup->Detach ());

    return 0;
}
コード例 #2
0
ファイル: MainFrm.cpp プロジェクト: zxlooong/bcgexp
LRESULT CMainFrame::OnToolbarContextMenu(WPARAM wp,LPARAM lp)
{
    CBCGPToolBar* pToolBar = DYNAMIC_DOWNCAST (CBCGPToolBar,
                             CWnd::FromHandlePermanent ((HWND) wp));
    m_bMainToolbarMenu = (
                             pToolBar != NULL && pToolBar->GetDlgCtrlID () == AFX_IDW_TOOLBAR);

    CPoint point (BCG_GET_X_LPARAM(lp), BCG_GET_Y_LPARAM(lp));

    CMenu menu;
    VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR));

    CMenu* pPopup = menu.GetSubMenu(0);
    ASSERT(pPopup != NULL);

    CBCGPPopupMenu* pPopupMenu = new CBCGPPopupMenu;
    pPopupMenu->Create (this, point.x, point.y, pPopup->Detach ());

    return 0;
}
コード例 #3
0
//***************************************************************************
BOOL CLoginBarToolTipCtrl::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message >= WM_MOUSEFIRST &&
		pMsg->message <= WM_MOUSELAST)
	{
		if (pMsg->message != WM_MOUSEMOVE)
		{
			Hide ();
		}

		ASSERT_VALID (m_pWndParent);

		// the parent should receive the mouse message in its client coordinates
		CPoint pt(BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
		MapWindowPoints (m_pWndParent, &pt, 1);
		LPARAM lParam = MAKELPARAM (pt.x, pt.y);

		m_pWndParent->SendMessage (pMsg->message, pMsg->wParam, lParam);
		return TRUE;
	}
	
	return CWnd::PreTranslateMessage(pMsg);
}
コード例 #4
0
LRESULT CBCGPPlannerManagerView::OnNotifyLButtonDblClk (WPARAM wParam, LPARAM lParam)
{
	CPoint pt(BCG_GET_X_LPARAM(lParam), BCG_GET_Y_LPARAM(lParam));
	OnDblClkCtrl ((UINT) wParam, pt);
	return 0L;
}
コード例 #5
0
//*******************************************************************************************
BOOL CBCGPOleDocIPFrameWnd::PreTranslateMessage(MSG* pMsg) 
{
	switch (pMsg->message)
	{
	case WM_KEYDOWN:
		if (!CBCGPFrameImpl::IsHelpKey (pMsg) && 
			m_Impl.ProcessKeyboard ((int) pMsg->wParam))
		{
			return TRUE;
		}
		break;

	case WM_LBUTTONDOWN:
	case WM_LBUTTONDBLCLK:
	case WM_RBUTTONDOWN:
	case WM_RBUTTONUP:
	case WM_RBUTTONDBLCLK:
	case WM_MBUTTONDOWN:
	case WM_MBUTTONUP:
	case WM_MBUTTONDBLCLK:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);

			if (pWnd != NULL && ::IsWindow (pMsg->hwnd))
			{
				pWnd->ClientToScreen (&pt);
			}

			if (m_Impl.ProcessMouseClick (pMsg->message, pt, pMsg->hwnd))
			{
				return TRUE;
			}

			if (!::IsWindow (pMsg->hwnd))
			{
				return TRUE;
			}
		}
		break;

	case WM_NCLBUTTONDOWN:
	case WM_NCLBUTTONUP:
	case WM_NCRBUTTONDOWN:
	case WM_NCRBUTTONUP:
	case WM_NCMBUTTONDOWN:
	case WM_NCMBUTTONUP:
		if (m_Impl.ProcessMouseClick (pMsg->message,
			CPoint (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)),
			pMsg->hwnd))
		{
			return TRUE;
		}
		break;

	case WM_MOUSEMOVE:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);

			if (pWnd != NULL)
			{
				pWnd->ClientToScreen (&pt);
			}

			if (m_Impl.ProcessMouseMove (pt))
			{
				return TRUE;
			}
		}
	}

	return CFrameWnd::PreTranslateMessage(pMsg);
}
コード例 #6
0
//*******************************************************************************************
BOOL CBCGPFrameWnd::PreTranslateMessage(MSG* pMsg)
{
    BOOL bProcessAccel = TRUE;

    switch (pMsg->message)
    {
    case WM_SYSKEYDOWN:
#ifndef BCGP_EXCLUDE_RIBBON
        if (m_Impl.m_pRibbonBar != NULL && m_Impl.m_pRibbonBar->OnSysKeyDown (this, pMsg->wParam, pMsg->lParam))
        {
            return TRUE;
        }

        if (pMsg->wParam == VK_F4 && m_Impl.m_pRibbonBar != NULL && m_Impl.m_pRibbonBar->IsBackstageViewActive())
        {
            break;
        }
#endif
        if (CBCGPPopupMenu::GetSafeActivePopupMenu() == NULL)
        {
            m_Impl.CancelToolbarMode();
        }

    case WM_CONTEXTMENU:
        if (!globalData.m_bSysUnderlineKeyboardShortcuts && !globalData.m_bUnderlineKeyboardShortcuts)
        {
            globalData.m_bUnderlineKeyboardShortcuts = TRUE;
            CBCGPToolBar::RedrawUnderlines ();
        }

        if (CBCGPPopupMenu::GetSafeActivePopupMenu() != NULL && (pMsg->wParam == VK_MENU || pMsg->wParam == VK_F10))
        {
            CBCGPPopupMenu::m_pActivePopupMenu->SendMessage (WM_CLOSE);
            return TRUE;
        }
        else if (m_Impl.ProcessKeyboard ((int) pMsg->wParam))
        {
            return TRUE;
        }
        break;

    case WM_SYSKEYUP:
        if (m_Impl.ProcessSysKeyUp(pMsg->wParam, pMsg->lParam))
        {
            return TRUE;
        }
        break;

    case WM_KEYDOWN:
        //-----------------------------------------
        // Pass keyboard action to the active menu:
        //-----------------------------------------
        if (!CBCGPFrameImpl::IsHelpKey (pMsg) &&
                m_Impl.ProcessKeyboard ((int) pMsg->wParam, &bProcessAccel))
        {
            return TRUE;
        }

        if (pMsg->wParam == VK_ESCAPE)
        {
            if (IsFullScreen())
            {
                if (!IsPrintPreview())
                {
                    m_Impl.InvokeFullScreenCommand();
                    return TRUE;
                }
            }

            CBCGPSmartDockingManager* pSDManager = NULL;
            if ((pSDManager = m_dockManager.GetSDManagerPermanent()) != NULL &&
                    pSDManager->IsStarted())
            {
                pSDManager->CauseCancelMode ();
            }

            CBCGPSlider* pSlider = DYNAMIC_DOWNCAST (CBCGPSlider, GetCapture ());
            if (pSlider != NULL)
            {
                pSlider->SendMessage (WM_CANCELMODE);
                return TRUE;
            }
        }

        if (!bProcessAccel)
        {
            return FALSE;
        }
        break;

    case WM_LBUTTONDOWN:
    case WM_RBUTTONDOWN:
    case WM_RBUTTONUP:
    case WM_MBUTTONDOWN:
    case WM_MBUTTONUP:
    {
        CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
        CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);

        if (pWnd != NULL && ::IsWindow (pMsg->hwnd))
        {
            pWnd->ClientToScreen (&pt);
        }

        if (m_Impl.ProcessMouseClick (pMsg->message, pt, pMsg->hwnd))
        {
            return TRUE;
        }

        if (!::IsWindow (pMsg->hwnd))
        {
            return TRUE;
        }
    }
    break;

    case WM_NCLBUTTONDOWN:
    case WM_NCLBUTTONUP:
    case WM_NCRBUTTONDOWN:
    case WM_NCRBUTTONUP:
    case WM_NCMBUTTONDOWN:
    case WM_NCMBUTTONUP:
        if (m_Impl.ProcessMouseClick (pMsg->message,
                                      CPoint (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)),
                                      pMsg->hwnd))
        {
            return TRUE;
        }
        break;

    case WM_MOUSEWHEEL:
        if (m_Impl.ProcessMouseWheel (pMsg->wParam, pMsg->lParam))
        {
            return TRUE;
        }
        break;

    case WM_MOUSEMOVE:
    {
        CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
        CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);

        if (pWnd != NULL)
        {
            pWnd->ClientToScreen (&pt);
        }

        if (m_Impl.ProcessMouseMove (pt))
        {
            return TRUE;
        }
    }
    }

    return CFrameWnd::PreTranslateMessage(pMsg);
}
コード例 #7
0
//**************************************************************************************
BOOL CBCGPDlgImpl::PreTranslateMessage(MSG* pMsg) 
{
	switch (pMsg->message)
	{
	case WM_SYSKEYDOWN:
	case WM_CONTEXTMENU:
		if (CBCGPPopupMenu::GetActiveMenu() != NULL &&
			::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd) &&
			pMsg->wParam == VK_MENU)
		{
			CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_CLOSE);
			return TRUE;
		}
		break;

	case WM_SYSKEYUP:
		if (CBCGPPopupMenu::GetActiveMenu() != NULL &&
			::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd))
		{
			return TRUE;	// To prevent system menu opening
		}
		break;

	case WM_KEYDOWN:
		//-----------------------------------------
		// Pass keyboard action to the active menu:
		//-----------------------------------------
		if (CBCGPPopupMenu::GetActiveMenu() != NULL &&
			::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd))
		{
			CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_KEYDOWN, (int) pMsg->wParam);
			return TRUE;
		}

#ifndef BCGP_EXCLUDE_RIBBON
#ifndef _BCGSUITE_
		if (m_bBackstageMode && (pMsg->wParam == VK_HOME || pMsg->wParam == VK_ESCAPE))
		{
			for (CWnd* pWndParent = m_Dlg.GetParent(); pWndParent != NULL; pWndParent = pWndParent->GetParent())
			{
				CBCGPRibbonBackstageView* pView = DYNAMIC_DOWNCAST(CBCGPRibbonBackstageView, pWndParent);
				if (pView != NULL)
				{
					if (pMsg->wParam == VK_HOME)
					{
						#define MAX_CLASS_NAME		255
						#define EDIT_CLASS			_T("Edit")

						TCHAR lpszClassName [MAX_CLASS_NAME + 1];

						if (CWnd::GetFocus()->GetSafeHwnd() != NULL)
						{
							::GetClassName (CWnd::GetFocus()->GetSafeHwnd (), lpszClassName, MAX_CLASS_NAME);
							CString strClass = lpszClassName;

							if (strClass == EDIT_CLASS)
							{
								return FALSE;
							}
						}

						pView->SetFocus();
					}
					else	// Escape
					{
						pView->SendMessage(WM_CLOSE);
					}
					return TRUE;
				}
			}
			return TRUE;
		}
#endif
#endif
		break;

	case WM_LBUTTONDOWN:
	case WM_RBUTTONDOWN:
	case WM_RBUTTONUP:
	case WM_MBUTTONDOWN:
	case WM_MBUTTONUP:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);

			if (pWnd != NULL && ::IsWindow (pMsg->hwnd))
			{
				pWnd->ClientToScreen (&pt);
			}

			if (ProcessMouseClick (pt))
			{
				return TRUE;
			}

			if (!::IsWindow (pMsg->hwnd))
			{
				return TRUE;
			}
		}
		break;

	case WM_NCLBUTTONDOWN:
	case WM_NCLBUTTONUP:
	case WM_NCRBUTTONDOWN:
	case WM_NCRBUTTONUP:
	case WM_NCMBUTTONDOWN:
	case WM_NCMBUTTONUP:
		if (ProcessMouseClick (CPoint (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam))))
		{
			return TRUE;
		}

		if (pMsg->message == WM_NCRBUTTONUP && pMsg->hwnd == m_Dlg.GetSafeHwnd () && IsOwnerDrawCaption ())
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));

			UINT nHit = OnNcHitTest (pt);

			if (nHit == HTCAPTION || nHit == HTSYSMENU)
			{
				CMenu* pMenu = m_Dlg.GetSystemMenu (FALSE);
				if (pMenu->GetSafeHmenu () != NULL && ::IsMenu (pMenu->GetSafeHmenu ()))
				{
					UINT uiRes = ::TrackPopupMenu (pMenu->GetSafeHmenu(), TPM_LEFTBUTTON | TPM_RETURNCMD, 
						pt.x, pt.y, 0, m_Dlg.GetSafeHwnd (), NULL);

					if (uiRes != 0)
					{
						m_Dlg.SendMessage (WM_SYSCOMMAND, uiRes);
						return TRUE;
					}
				}

			}
		}
		break;

	case WM_MOUSEWHEEL:
		if (CBCGPPopupMenu::GetActiveMenu() != NULL &&
			::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd) &&
			CBCGPPopupMenu::GetActiveMenu()->IsScrollable ())
		{
			CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_MOUSEWHEEL,
				pMsg->wParam, pMsg->lParam);

		}
#ifndef BCGP_EXCLUDE_RIBBON
#ifndef _BCGSUITE_
		else
		{
			CPoint ptCursor;
			::GetCursorPos (&ptCursor);

			CWnd* pWnd = CWnd::WindowFromPoint(ptCursor);

			CBCGPRibbonGalleryCtrl* pGalleryCtrl = DYNAMIC_DOWNCAST(CBCGPRibbonGalleryCtrl, pWnd);

			if (pGalleryCtrl != NULL)
			{
				pGalleryCtrl->SendMessage (WM_MOUSEWHEEL, pMsg->wParam, pMsg->lParam);
				return TRUE;
			}
		}
#endif
#endif
		break;

	case WM_MOUSEMOVE:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);

			if (pWnd != NULL)
			{
				pWnd->ClientToScreen (&pt);
			}

			if (ProcessMouseMove (pt))
			{
				return TRUE;
			}
		}
	}

	return FALSE;
}
コード例 #8
0
//*******************************************************************************************
BOOL CBCGOleDocIPFrameWnd::PreTranslateMessage(MSG* pMsg) 
{
	switch (pMsg->message)
	{
	case WM_KEYDOWN:
		if (!CBCGFrameImpl::IsHelpKey (pMsg) && 
			m_Impl.ProcessKeyboard ((int) pMsg->wParam))
		{
			return TRUE;
		}
		break;

	case WM_LBUTTONDOWN:
	case WM_LBUTTONDBLCLK:
	case WM_RBUTTONDOWN:
	case WM_RBUTTONUP:
	case WM_RBUTTONDBLCLK:
	case WM_MBUTTONDOWN:
	case WM_MBUTTONUP:
	case WM_MBUTTONDBLCLK:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);

			if (!::IsWindow (pMsg->hwnd))
			{
				return TRUE;
			}

			if (pWnd != NULL)
			{
				pWnd->ClientToScreen (&pt);
			}

			if (m_Impl.ProcessMouseClick (pMsg->message, pt, pMsg->hwnd))
			{
				return TRUE;
			}

			if (!::IsWindow (pMsg->hwnd))
			{
				return TRUE;
			}

			if (pMsg->message == WM_RBUTTONUP &&
				!CBCGToolBar::IsCustomizeMode ())
			{
				//---------------------------------------
				// Activate the control bar context menu:
				//---------------------------------------
				CDockBar* pBar = DYNAMIC_DOWNCAST(CDockBar, pWnd);
				if (pBar != NULL)
				{
					CPoint pt;

					pt.x = BCG_GET_X_LPARAM(pMsg->lParam);
					pt.y = BCG_GET_Y_LPARAM(pMsg->lParam);
					pBar->ClientToScreen(&pt);

					SendMessage (BCGM_TOOLBARMENU,
								(WPARAM) GetSafeHwnd (),
								MAKELPARAM (pt.x, pt.y));
				}
			}
		}
		break;

	case WM_NCLBUTTONDOWN:
	case WM_NCLBUTTONUP:
	case WM_NCRBUTTONDOWN:
	case WM_NCRBUTTONUP:
	case WM_NCMBUTTONDOWN:
	case WM_NCMBUTTONUP:
		if (m_Impl.ProcessMouseClick (pMsg->message,
			CPoint (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam)),
			pMsg->hwnd))
		{
			return TRUE;
		}
		break;

	case WM_MOUSEMOVE:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);

			if (pWnd != NULL)
			{
				pWnd->ClientToScreen (&pt);
			}

			if (m_Impl.ProcessMouseMove (pt))
			{
				return TRUE;
			}
		}
	}

	return CFrameWnd::PreTranslateMessage(pMsg);
}
コード例 #9
0
//***********************************************************************************************************
BOOL CBCGPBaseVisualCtrl::PreTranslateMessage(MSG* pMsg) 
{
	switch (pMsg->message)
	{
	case WM_KEYDOWN:
	case WM_SYSKEYDOWN:
	case WM_LBUTTONDOWN:
	case WM_RBUTTONDOWN:
	case WM_MBUTTONDOWN:
	case WM_LBUTTONUP:
	case WM_RBUTTONUP:
	case WM_MBUTTONUP:
	case WM_NCLBUTTONDOWN:
	case WM_NCRBUTTONDOWN:
	case WM_NCMBUTTONDOWN:
	case WM_NCLBUTTONUP:
	case WM_NCRBUTTONUP:
	case WM_NCMBUTTONUP:
	case WM_MOUSEMOVE:
		if (m_pToolTip->GetSafeHwnd () != NULL)
		{
			m_pToolTip->RelayEvent(pMsg);
		}
	}

	switch (pMsg->message)
	{
	case WM_LBUTTONDOWN:
	case WM_RBUTTONDOWN:
	case WM_MBUTTONDOWN:
		if (pMsg->hwnd == GetSafeHwnd())
		{
			if (!m_bIsPopup)
			{
				SetFocus();
			}

			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			if (OnMouseDown(pMsg->message == WM_LBUTTONDOWN ? 0 : pMsg->message == WM_RBUTTONDOWN ? 1 : 2, pt))
			{
#if !defined _BCGPCHART_STANDALONE
				if (CBCGPPopupMenu::GetActiveMenu() != NULL && ::IsWindow (CBCGPPopupMenu::GetActiveMenu()->m_hWnd))
				{
					CBCGPPopupMenu::GetActiveMenu()->SendMessage (WM_CLOSE);
				}
#endif
				SetCapture();
				m_bIsCaptured = TRUE;

				StartClickAndHold();
				return TRUE;
			}
		}
		break;

	case WM_LBUTTONUP:
	case WM_RBUTTONUP:
	case WM_MBUTTONUP:
		if (pMsg->hwnd == GetSafeHwnd())
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			OnMouseUp(pMsg->message == WM_LBUTTONUP ? 0 : pMsg->message == WM_RBUTTONUP ? 1 : 2, pt);

			if (m_bIsCaptured)
			{
				ReleaseCapture();
				m_bIsCaptured = FALSE;
			}

			StopClickAndHold();
		}
		break;

	case WM_LBUTTONDBLCLK:
	case WM_RBUTTONDBLCLK:
	case WM_MBUTTONDBLCLK:
		if (pMsg->hwnd == GetSafeHwnd())
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));
			OnMouseDblClick(pMsg->message == WM_LBUTTONDBLCLK ? 0 : pMsg->message == WM_RBUTTONDBLCLK ? 1 : 2, pt);
		}
		break;
	
	case WM_MOUSEWHEEL:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));

			CWnd* pWnd = CWnd::FromHandle (pMsg->hwnd);
			if (pWnd != NULL)
			{
				pWnd->ScreenToClient(&pt);
			}

			if (OnMouseWheel(pt, HIWORD(pMsg->wParam)))
			{
				if (m_pToolTip->GetSafeHwnd () != NULL)
				{
					m_pToolTip->Pop();
				}

				return TRUE;
			}
		}
		break;

	case WM_MOUSEMOVE:
		{
			CPoint pt (BCG_GET_X_LPARAM(pMsg->lParam), BCG_GET_Y_LPARAM(pMsg->lParam));

			OnMouseMove(pt);

			if (!m_bIsTracked)
			{
				m_bIsTracked = TRUE;
				
				TRACKMOUSEEVENT trackmouseevent;
				trackmouseevent.cbSize = sizeof(trackmouseevent);
				trackmouseevent.dwFlags = TME_LEAVE;
				trackmouseevent.hwndTrack = GetSafeHwnd();
				trackmouseevent.dwHoverTime = HOVER_DEFAULT;
				::BCGPTrackMouse (&trackmouseevent);	
			}

			if (m_pToolTip->GetSafeHwnd () != NULL)
			{
				CString strToolTip;
				CString strDescr;

				OnGetToolTip(pt, strToolTip, strDescr);

				if (strToolTip != m_strLastDisplayedToolTip || strDescr != m_strLastDisplayedToolTipDescr)
				{
					if (m_bTooltipTrackingMode)
					{
						m_pToolTip->Update();
					}
					else
					{
						m_pToolTip->Pop ();
					}

					if (!strToolTip.IsEmpty() && !strDescr.IsEmpty())
					{
						m_bToolTipCleared = TRUE;
					}
				}
			}
		}
		break;

	case WM_CANCELMODE:
		if (m_bIsCaptured)
		{
			ReleaseCapture();
			m_bIsCaptured = FALSE;

			OnCancelMode();
		}

		StopClickAndHold();
		break;

	case WM_KEYDOWN:
		if (pMsg->wParam == VK_ESCAPE)
		{
			if (OnKeyboardDown((UINT)pMsg->wParam, (pMsg->lParam & 0xFFFF), 0))
			{
				return TRUE;
			}
		}
		break;

	case WM_TIMER:
		if (pMsg->hwnd == GetSafeHwnd() && pMsg->wParam == GetClickAndHoldID())
		{
			CPoint point;
			
			::GetCursorPos (&point);
			ScreenToClient (&point);

			if (GetClickAndHoldRect().PtInRect(point))
			{
				OnClickAndHoldEvent(GetClickAndHoldID(), point);
				return TRUE;
			}
		}
		break;
	}

	return CStatic::PreTranslateMessage(pMsg);
}