コード例 #1
0
CString CToolbarHelper::GetTip(UINT nID, LPPOINT pPoint) const
{
	if (!nID)
	{
		return _T("");   // separator
	}

	// are we over the dropbutton?
	BOOL bOverDropBtn = FALSE;

	if (pPoint)
	{
		CSize sizeBtn(m_pToolbar->GetToolBarCtrl().GetButtonSize());
		CRect rButton;

		m_pToolbar->GetToolBarCtrl().GetRect(nID, rButton);
		rButton.left += sizeBtn.cx;

		if (rButton.PtInRect(*pPoint))
		{
			bOverDropBtn = TRUE;
		}
	}

	CString sTip;

	// do we have a mapping for this
	THButton dm;

	if (m_mapTHButtons.Lookup(nID, dm))
	{
		if (!bOverDropBtn)
		{
			// try the default item first
			if (dm.nDefCmdID && IsCmdEnabled(dm.nDefCmdID)/* && (dm.nDefCmdID != nID)*/)
			{
				sTip = GetTip(dm.nDefCmdID);

				if (!sTip.IsEmpty())
				{
					return sTip;
				}
			}
		}

		// try override tip
		if (_tcslen(dm.szTip))
		{
			return dm.szTip;
		}
	}

	return GetTip(nID);
}
コード例 #2
0
afx_msg void CServerView::OnUpdateRulerShow(CCmdUI* pCmdUI)
{
    BOOL state = IsCmdEnabled(0, this);

    // Toggle show/hide menu item to HIDE rulers if currently displayed.
    // Otherwise, SHOW them.
    if( !pCmdUI->m_pOther )
        OnUpdateShowHideMenu( IDM_RULERSHOW,
                              !( m_lpDisplay && m_lpDisplay->HasRulers ), pCmdUI );

    pCmdUI->Enable (state);
}
コード例 #3
0
afx_msg void CServerView::OnUpdateHideMarquee(CCmdUI* pCmdUI)
{
    BOOL state = IsCmdEnabled(0, this);
    CImage *pImage = GetDocument()->GetImage();

    if (state && !pImage->GetMask())
        state = FALSE;
    if( !pCmdUI->m_pOther )
        OnUpdateShowHideMenu( IDM_HIDEMARQUEE,
                              pImage && !IsMarqueeVisible( pImage ), pCmdUI );
    pCmdUI->Enable(	state );
}
コード例 #4
0
afx_msg void CServerView::OnUpdatePasteSpecial(CCmdUI* pCmdUI)
{
    if (IsCmdEnabled(0, this))
    {
        COleDataSource *pDataSource = COleDataSource::GetClipboardOwner();
        if (pDataSource)
            pCmdUI->Enable(FALSE);
        else
            OnUpdatePaste(pCmdUI);
    }
    else
        pCmdUI->Enable(FALSE);
}
コード例 #5
0
afx_msg void CServerView::OnUpdateStitch(CCmdUI* pCmdUI)
{
    BOOL state = IsCmdEnabled(0, this);
    if (state)
    {
        CImage *pImage = GetDocument()->GetImage();
        FRMTYPEINFO TypeInfo;
        pImage->GetTypeInfo(&TypeInfo);
        if (TypeInfo.DataType == FDT_PALETTECOLOR || pImage->InMaskEditMode())
            state = FALSE;
    }
    pCmdUI->Enable(	state );
}
コード例 #6
0
afx_msg void CServerView::on_update_zoom(int idCmd, CCmdUI* pCmdUI)
{
    if (IsCmdEnabled(0, this) && m_lpDisplay->ViewPercentage)
    {
        int inc;

        if (idCmd == IDC_ZOOMIN)
            inc = 100;
        else
            inc = -100;
        pCmdUI->Enable(	ZoomEnable(GetSafeHwnd(), inc, YES) );
    }
    else
        pCmdUI->Enable( FALSE );
}
コード例 #7
0
afx_msg void CServerView::OnUpdateHideObjMarquee(CCmdUI* pCmdUI)
{
    BOOL state = IsCmdEnabled(0, this);
    if (state)
    {
        CImage *pImage = GetDocument()->GetImage();
        if (pImage->MultipleObjects())
        {
            if( !pCmdUI->m_pOther )
                OnUpdateShowHideMenu( IDM_OBJ_HIDEMARQUEE,
                                      !pImage->UseObjectMarquee, pCmdUI );
        }
        else
            state = FALSE;
    }
    pCmdUI->Enable(state);
}
コード例 #8
0
afx_msg void CServerView::OnUpdatePaste(CCmdUI* pCmdUI)
{
    BOOL state = IsCmdEnabled(0, this);
    if (state)
    {
        state = FALSE;
        if ( OpenClipboard() )
        {
            if ( IsClipboardFormatAvailable(CF_METAFILEPICT) || // new jtm
                    IsClipboardFormatAvailable(CF_DIB) ||
                    IsClipboardFormatAvailable(CF_BITMAP) ||
                    IsClipboardFormatAvailable(Control.cfImage) ||
                    IsClipboardFormatAvailable(Control.cfImagePP4) )
                state = TRUE;
            CloseClipboard();
        }
    }
    pCmdUI->Enable( state );
}
コード例 #9
0
LRESULT CToolbarHelper::WindowProc(HWND hRealWnd, UINT msg, WPARAM wp, LPARAM lp)
{
	switch (msg)
	{
	case WM_NOTIFY:
		{
			LPNMHDR pNMHDR = (LPNMHDR)lp;
			
			switch (pNMHDR->code)
			{
			case TBN_DROPDOWN:
				// check its our toolbar
				if (pNMHDR->hwndFrom == m_pToolbar->GetSafeHwnd())
				{
					// load the menu
					LPNMTOOLBAR pNMTB = (LPNMTOOLBAR)pNMHDR;
					
					if (DisplayDropMenu((UINT)pNMTB->iItem))
						return FALSE; // we handled it
				}
				break;
				
#ifndef _UNICODE
			case TTN_NEEDTEXTA:
#else
			case TTN_NEEDTEXTW:
#endif
				{
					// to be thorough we will need to handle UNICODE versions of the message also !!
					TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;

					// only handle this if it's not already been done
					if (pTTT->lpszText && *(pTTT->lpszText))
						break;
										
					UINT nID = pNMHDR->idFrom;
					
					if (pTTT->uFlags & TTF_IDISHWND) // idFrom is actually the HWND of the tool 
						nID = ::GetDlgCtrlID((HWND)nID);

					// get cursor pos
					CPoint point(::GetMessagePos());
					m_pToolbar->ScreenToClient(&point);
					
					// get tip
					static CString sTipText;
										
					sTipText = GetTip(nID, &point);
					
					if (!sTipText.IsEmpty()) // will be zero on a separator
					{
						pTTT->lpszText = (LPTSTR)(LPCTSTR)sTipText;
						return TRUE;
					}
				}
				break;

			case TTN_SHOW:
				{
					CWnd* pTooltipCtrl = CWnd::FromHandle(pNMHDR->hwndFrom);
					ASSERT (pTooltipCtrl);

					pTooltipCtrl->SendMessage(TTM_SETMAXTIPWIDTH, 0, (m_bMultiline ? m_nMultilineWidth : UINT_MAX));

					if (m_pShortcutMgr)
					{
						static UINT nIDLastShow = 0;
						UINT nCmdID = pNMHDR->idFrom;

						// prevent re-entrancy on same tip
						if (nCmdID != nIDLastShow)
						{
							TOOLINFO ti =  { 0 };
							ti.cbSize = sizeof(ti);
							ti.hwnd = *m_pToolbar;

							// restore callback on last shown item
							if (nIDLastShow)
							{
								ti.uId = nIDLastShow;
								pTooltipCtrl->SendMessage(TTM_GETTOOLINFO, 0, (LPARAM)&ti);

								ti.lpszText = LPSTR_TEXTCALLBACK;
								pTooltipCtrl->SendMessage(TTM_SETTOOLINFO, 0, (LPARAM)&ti);

								nIDLastShow = 0;
							}

							// append shortcut text to new item
							THButton dm = { 0 };

							if (m_mapTHButtons.Lookup(nCmdID, dm))
							{
								if (dm.nDefCmdID)
									nCmdID = dm.nDefCmdID;
							}

							CString sShortcut = m_pShortcutMgr->GetShortcutTextByCmd(nCmdID);

							if (!sShortcut.IsEmpty())
							{
								// store original id immediately to prevent re-entrancy
								nIDLastShow = pNMHDR->idFrom;

								const int TIP_LEN = 80;
								TCHAR szTip[TIP_LEN] = { 0 };

								ti.lpszText = szTip;
								ti.hwnd = *m_pToolbar;
								ti.uId = pNMHDR->idFrom;

								pTooltipCtrl->SendMessage(TTM_GETTEXT, TIP_LEN, (LPARAM)&ti);

								CString sTip;
								sTip.Format(_T("%s (%s)"), szTip, sShortcut);
								ti.lpszText = (LPTSTR)(LPCTSTR)sTip;

								pTooltipCtrl->SendMessage(TTM_UPDATETIPTEXT, 0, (LPARAM)&ti);
								pTooltipCtrl->SendMessage(TTM_UPDATE);
							}
						}
					}
				}
				break;
			}
		}
		break;
	
	case WM_COMMAND:
		{
			HWND hCtrlFrom = (HWND)lp;

			// if m_pToolbar sent the command and we have a mapping for it then
			// change it to the default cmd for that button
			if (hCtrlFrom == *m_pToolbar)
			{
				THButton dm = { 0 };
				UINT nCmdID = LOWORD(wp);

				if (m_mapTHButtons.Lookup(nCmdID, dm))
				{
					// if we have an enabled default command then send it
					if (dm.nDefCmdID && IsCmdEnabled(dm.nDefCmdID))
					{
						wp = MAKEWPARAM(dm.nDefCmdID, HIWORD(wp));
					}
					else
					{
						BOOL bRes = DisplayDropMenu(nCmdID, TRUE);

						if (bRes)
							return 0L; // we handled it
					}
				}
			}
		}
		break;

	case WM_DESTROY:
		{
			// must call rest of chain first
			LRESULT lr =  CSubclassWnd::WindowProc(hRealWnd, msg, wp, lp);
			HookWindow(NULL);
			return lr;
		}
	}

	return CSubclassWnd::WindowProc(hRealWnd, msg, wp, lp);
}
コード例 #10
0
afx_msg void CServerView::OnUpdateSaveShape(CCmdUI* pCmdUI)
{
    pCmdUI->Enable( IsCmdEnabled(0, this) );
}
コード例 #11
0
afx_msg void CServerView::OnUpdateViewAll(CCmdUI* pCmdUI)
{
    pCmdUI->Enable( IsCmdEnabled(0, this) );
}
コード例 #12
0
LRESULT CToolbarHelper::WindowProc(HWND hRealWnd, UINT msg, WPARAM wp, LPARAM lp)
{
	switch (msg)
	{
	case WM_NOTIFY:
		{
			LPNMHDR pNMHDR = (LPNMHDR)lp;

			switch (pNMHDR->code)
			{
			case TBN_DROPDOWN:
				// check its our toolbar
				if (pNMHDR->hwndFrom == m_pToolbar->GetSafeHwnd())
				{
					// load the menu
					LPNMTOOLBAR pNMTB = (LPNMTOOLBAR)pNMHDR;

					if (DisplayDropMenu((UINT)pNMTB->iItem))
					{
						return FALSE;   // we handled it
					}
				}
				break;

			case TTN_NEEDTEXT:
				{
					// to be thorough we will need to handle UNICODE versions of the message also !!
					TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;
					UINT nID = pNMHDR->idFrom;

					if (pTTT->uFlags & TTF_IDISHWND) // idFrom is actually the HWND of the tool
					{
						nID = ::GetDlgCtrlID((HWND)nID);
					}

					// get cursor pos
					CPoint point(::GetMessagePos());
					m_pToolbar->ScreenToClient(&point);

					// get tip
					static CString sTipText;

					sTipText = GetTip(nID, &point);

					if (!sTipText.IsEmpty()) // will be zero on a separator
					{
						pTTT->lpszText = (LPTSTR)(LPCTSTR)sTipText;
						return TRUE;
					}
				}
				break;

			case TTN_SHOW:
				{
					CWnd* pTooltipCtrl = CWnd::FromHandle(pNMHDR->hwndFrom);
					ASSERT(pTooltipCtrl);

					pTooltipCtrl->SendMessage(TTM_SETMAXTIPWIDTH, 0, m_bMultiline ? m_nMultilineWidth : UINT_MAX);
				}
				break;
			}
		}
		break;

	case WM_COMMAND:
		{
			HWND hCtrlFrom = (HWND)lp;

			// if m_pToolbar sent the command and we have a mapping for it then
			// change it to the default cmd for that button
			if (hCtrlFrom == *m_pToolbar)
			{
				THButton dm;
				UINT nCmdID = LOWORD(wp);

				if (m_mapTHButtons.Lookup(nCmdID, dm))
				{
					// if we have an enabled default command then send it
					if (dm.nDefCmdID && IsCmdEnabled(dm.nDefCmdID))
					{
						wp = MAKEWPARAM(dm.nDefCmdID, HIWORD(wp));
					}
					else
					{
						BOOL bRes = DisplayDropMenu(nCmdID, TRUE);

						if (bRes)
						{
							return 0L;   // we handled it
						}
					}
				}
			}
		}
		break;

	case WM_KICKIDLE:
		break;

	case WM_DESTROY:
		{
			// must call rest of chain first
			LRESULT lr = CSubclassWnd::WindowProc(hRealWnd, msg, wp, lp);
			HookWindow(NULL);
			return lr;
		}
	}

	return CSubclassWnd::WindowProc(hRealWnd, msg, wp, lp);
}