void CHistTracksListCtrl::InitMainMenu(BCMenu& menu)
{
	int a = GetSelectedCount();
	menu.EnableMenuItem(ACMD_OpenFolder, a == 1 ? MF_ENABLED : MF_GRAYED);
	menu.EnableMenuItem(ACMD_History,  a == 1 ? MF_ENABLED : MF_GRAYED);

}
Beispiel #2
0
BOOL CButtonST::OnClicked() 
{	
	SetFocus();

	if (m_bIsCheckBox)
	{
		m_nCheck = !m_nCheck;
		Invalidate();
	} // if
	else
	{
		// Handle the menu (if any)
#ifdef	BTNST_USE_BCMENU
		if (m_menuPopup.m_hMenu)
#else
		if (m_hMenu)
#endif
		{
			CRect	rWnd;
			GetWindowRect(rWnd);

			m_bMenuDisplayed = TRUE;
			Invalidate();

#ifdef	BTNST_USE_BCMENU
			BCMenu *psub = (BCMenu*)m_menuPopup.GetSubMenu(0);
			DWORD dwRetValue = psub->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, rWnd.left, rWnd.bottom, this, NULL);
#else
			HMENU hSubMenu = ::GetSubMenu(m_hMenu, 0);
			//DWORD dwRetValue = ::TrackPopupMenuEx(hSubMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON, rWnd.left, rWnd.bottom, m_hParentWndMenu, NULL);
			DWORD dwRetValue = ::TrackPopupMenuEx(hSubMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, rWnd.left, rWnd.bottom, m_hParentWndMenu, NULL);
#endif

			m_bMenuDisplayed = FALSE;
			Invalidate();

			if (dwRetValue)
				::PostMessage(m_hParentWndMenu, WM_COMMAND, MAKEWPARAM(dwRetValue, 0), (LPARAM)NULL);
		} // if
		else
		{
			// Handle the URL (if any)
			if (_tcslen(m_szURL) > 0)
			{
				SHELLEXECUTEINFO	csSEI;

				memset(&csSEI, 0, sizeof(csSEI));
				csSEI.cbSize = sizeof(SHELLEXECUTEINFO);
				csSEI.fMask = SEE_MASK_FLAG_NO_UI;
				csSEI.lpVerb = _T("open");
				csSEI.lpFile = m_szURL;
				csSEI.nShow = SW_SHOWMAXIMIZED;
				::ShellExecuteEx(&csSEI);
			} // if
		} // else
	} // else

	return FALSE;
} // End of OnClicked
Beispiel #3
0
BOOL NewGUI_SetIcon(BCMenu& rMenu, UINT uCommand, int nResourceID)
{
	CString strMenuItemText;
	if(rMenu.GetMenuText(uCommand, strMenuItemText, MF_BYCOMMAND) == FALSE)
		return FALSE;
	if(strMenuItemText.GetLength() == 0) return FALSE;

	if(rMenu.ModifyODMenu(NULL, uCommand, nResourceID) == FALSE)
		return FALSE;

	return TRUE;
}
Beispiel #4
0
void CPluginsDlg::OnRClickPluginsList(NMHDR* pNMHDR, LRESULT* pResult)
{
	DWORD dwID = GetSelectedPluginID();
	KP_PLUGIN_INSTANCE *p = m_pPiMgr->GetPluginByID(dwID);

	UNREFERENCED_PARAMETER(pNMHDR);

	*pResult = 0;

	POINT pt;
	GetCursorPos(&pt);

	m_popmenu.LoadMenu(IDR_PLUGINS_MENU);

	m_popmenu.SetMenuDrawMode(BCMENU_DRAWMODE_XP); // <<<!=>>> BCMENU_DRAWMODE_ORIGINAL
	m_popmenu.SetSelectDisableMode(FALSE);
	m_popmenu.SetXPBitmap3D(TRUE);
	m_popmenu.SetBitmapBackground(RGB(255, 0, 255));
	m_popmenu.SetIconSize(16, 16);

	m_popmenu.LoadToolbar(IDR_INFOICONS, IDB_INFOICONS_EX);

	BCMenu* psub = NewGUI_GetBCMenu(m_popmenu.GetSubMenu(0));
	if(psub == NULL) { ASSERT(FALSE); psub = &m_popmenu; }

	// psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_ENABLE, m_pImgList, 2);
	// psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_DISABLE, m_pImgList, 45);
	psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_CONFIG, m_pImgList, 21);
	psub->ModifyODMenu(NULL, (UINT)ID_PLUGIN_ABOUT, m_pImgList, 22);

	CPwSafeDlg::_TranslateMenu(psub, FALSE, NULL);

	if(p != NULL)
	{
		// if(p->bEnabled == FALSE)
		// {
		//	psub->EnableMenuItem(ID_PLUGIN_DISABLE, MF_BYCOMMAND | MF_GRAYED);
		//	psub->EnableMenuItem(ID_PLUGIN_CONFIG, MF_BYCOMMAND | MF_GRAYED);
		//	psub->EnableMenuItem(ID_PLUGIN_ABOUT, MF_BYCOMMAND | MF_GRAYED);
		// }
		// else psub->EnableMenuItem(ID_PLUGIN_ENABLE, MF_BYCOMMAND | MF_GRAYED);

		if(p->hinstDLL == NULL)
		{
			psub->EnableMenuItem(ID_PLUGIN_CONFIG, MF_BYCOMMAND | MF_GRAYED);
			psub->EnableMenuItem(ID_PLUGIN_ABOUT, MF_BYCOMMAND | MF_GRAYED);
		}
	}
	else
	{
		// psub->EnableMenuItem(ID_PLUGIN_ENABLE, MF_BYCOMMAND | MF_GRAYED);
		// psub->EnableMenuItem(ID_PLUGIN_DISABLE, MF_BYCOMMAND | MF_GRAYED);
		psub->EnableMenuItem(ID_PLUGIN_CONFIG, MF_BYCOMMAND | MF_GRAYED);
		psub->EnableMenuItem(ID_PLUGIN_ABOUT, MF_BYCOMMAND | MF_GRAYED);
	}

	psub->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);

	m_popmenu.DestroyMenu();
}
void CCWArrangePage::OnRclickListTracks(NMHDR* pNMHDR, LRESULT* pResult) 
{
	POSITION pos = m_List.GetFirstSelectedItemPosition ();
	if (pos == NULL)
		return;

	int idx = m_List.GetNextSelectedItem (pos);

	BCMenu menu;

	if (m_List.GetItemText (idx, 0) == STR_SEPARATOR)
		menu.LoadMenu (IDR_MENU_SEP);
	else
	{
		menu.LoadMenu (IDR_MENU_TRACK);
		if (!m_pTracks->IsManuallyEditable ())
			((BCMenu*) menu.GetSubMenu (0))->RemoveMenu (ID_DELETETRACK, MF_BYCOMMAND);
	}
	menu.LoadToolbar (IDR_TOOLBAR_GRP);

	CPoint pt;
	GetCursorPos (&pt);
	menu.GetSubMenu (0)->TrackPopupMenu (TPM_RIGHTALIGN, pt.x, pt.y, this);

	menu.DestroyMenu ();

	*pResult = 0;
}
void CHistTracksListCtrl::CreateMainMenu(BCMenu& menu)
{
	PrgAPI* pAPI = PRGAPI();
	menu.AppendMenu(MF_STRING, ACMD_Play, 
		(LPTSTR) pAPI->GetString(IDS_PLAY), pAPI->GetIcon(ICO_Play16));
	menu.SetDefaultItem(ACMD_Play);
	menu.AppendMenu(MF_STRING, ACMD_Enqueue, 
		(LPTSTR) pAPI->GetString(IDS_ENQUEUE), pAPI->GetIcon(ICO_Add16));
	menu.AppendMenu(MF_SEPARATOR, NULL, NULL);
	menu.AppendMenu(MF_STRING, ACMD_OpenFolder, 
		(LPTSTR) pAPI->GetString(IDS_OPENCONTAININGFOLDER), pAPI->GetIcon(ICO_Find16));
	menu.AppendMenu(MF_SEPARATOR, NULL, NULL);
	menu.AppendMenu(MF_STRING, ID_EXPORTSELECTION, (LPTSTR) pAPI->GetString(IDS_EXPORTSELECTEDLINES));
	menu.AppendMenu(MF_STRING, ID_EXPORTALL, (LPTSTR) pAPI->GetString(IDS_EXPORTALL));
	menu.AppendMenu(MF_SEPARATOR, NULL, NULL);
	menu.AppendMenu(MF_STRING, ACMD_History, (LPTSTR) pAPI->GetString(IDS_SHOWHISTORY));
	//menu.LoadToolbar(IDR_MAINLISTNORMAL);

}
Beispiel #7
0
void CShowMenu::InsertMenu(int subpos,int pos,DWORD dwMenuItemID,const char* pszMenuStr)
{
	BCMenu* pSubMenu = (BCMenu*)m_pMenu->GetSubMenu(subpos);

	string strInput = pszMenuStr;

	int iPos  = -1;

	while( (iPos = strInput.find('&',iPos+1)) != string::npos )
	{
		string strLeft = strInput.substr(0,iPos);
		string strRight = strInput.substr(iPos,strInput.length()-iPos+1);
		iPos++;

		strInput = strLeft + string("&") + strRight;
	}

	pSubMenu->InsertMenu( pos,MF_BYPOSITION|MF_STRING,dwMenuItemID,strInput.c_str() );
}
Beispiel #8
0
void CDemoView::OnContextMenu(CWnd* /*pWnd*/, CPoint point) 
{
	CDemoDoc* pDoc = GetDocument();
	if (pDoc && pDoc->m_tool==2) return;
#ifdef VATI_EXTENSIONS
	// suppress context menu if right-click function was called just now
	if ( m_suppressContextMenu == true )
		return;
#endif
	static UINT toolbars[]={
		IDR_MAINFRAME,
		IDR_TOOLBAR1,
	};
	BCMenu menu;
	menu.LoadMenu(IDM_CXIMAGE1);
	menu.LoadToolbars(toolbars,2);
	CMenu *pContextMenu=menu.GetSubMenu(0);
	pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd());
}
Beispiel #9
0
void FileScrapDropDlg::OnContextMenu(CWnd* pWnd, CPoint pt) 
{
    BCMenu sMenu;
    if (sMenu.LoadMenu(IDR_FILE_SCRAP_DROP) == XPR_TRUE)
    {
        if (pt.x == -1 || pt.y == -1)
        {
            CRect sRect;
            GetClientRect(&sRect);
            ClientToScreen(&sRect);
            pt = sRect.TopLeft();
        }

        BCMenu *sPopupMenu = (BCMenu *)sMenu.GetSubMenu(0);
        if (XPR_IS_NOT_NULL(sPopupMenu))
        {
            sPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt, this);
        }
    }
}
/**
 * @brief Offer a context menu
 */
void CMergeDiffDetailView::OnContextMenu(CWnd* pWnd, CPoint point)
{
	// Create the menu and populate it with the available functions
	BCMenu menu;
	VERIFY(menu.LoadMenu(IDR_POPUP_MERGEDETAILVIEW));
	VERIFY(menu.LoadToolbar(IDR_MAINFRAME));
	theApp.TranslateMenu(menu.m_hMenu);

	BCMenu *pSub = (BCMenu *)menu.GetSubMenu(0);
	ASSERT(pSub != NULL);

	// Context menu opened using keyboard has no coordinates
	if (point.x == -1 && point.y == -1)
	{
		CRect rect;
		GetClientRect(rect);
		ClientToScreen(rect);

		point = rect.TopLeft();
		point.Offset(5, 5);
	}

	pSub->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
		point.x, point.y, AfxGetMainWnd());
}
Beispiel #11
0
LRESULT CKeyborDlg::OnNotifyIcon(WPARAM wParam,LPARAM lParam)
{
	//单击鼠标左键
	 if((lParam==WM_LBUTTONDOWN)&&(!ShowWindow(SW_HIDE)))
	 { 	
             OnSet();
	 }

	//鼠标单击右键
	 if(lParam==WM_RBUTTONDOWN)
	 {
		  //  弹出菜单
		  POINT rpoint;
	      GetCursorPos(&rpoint);
	      BCMenu mu;
		  mu.LoadMenu(IDR_MENU1);
          SetForegroundWindow();
		  mu.GetSubMenu(0)->SetDefaultItem(ID_32779);
		  mu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x,rpoint.y,this);
	 }
	 
	 return 0;

}
Beispiel #12
0
// Control status change.
LRESULT Brainchild::OnStatusUpdate( LPNMSTATUSUPDATE pStatusUpd, BOOL& bNotifyParent )
{
	// No need to bother the parent.
	bNotifyParent = FALSE;

	if ( m_pOwner )
	{
    // Check, if there is a file to open
    /*BOOL bIsPathSelected = FALSE;
    {
      TCHAR szSelection[MAX_PATH];
      if (GetSelectionLength() && GetSelectionLength() < MAX_PATH+2)
      {
        GetSelection(szSelection);
        szSelection[GetSelectionLength()-2] = 0;
      }
      else
        szSelection[0] = 0;

      if (_tcslen(szSelection) &&
          (_tcsstr(szSelection, _T(":")) || _tcsstr(szSelection, _T("\\")) || _tcsstr(szSelection, _T("."))))
        bIsPathSelected = TRUE;
    }*/

		// Get child menu.
		BCMenu *pMenu = &m_pOwner->m_pFrame->m_ChildMenu;

		// Update menus...
		pMenu->EnableItem( IDM_COPY,	      pStatusUpd->bCanCopy   ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		pMenu->EnableItem( IDM_CLEARBM,	    pStatusUpd->bBookmarks ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		pMenu->EnableItem( IDM_FIRSTBM,     pStatusUpd->bBookmarks ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		pMenu->EnableItem( IDM_NEXTBM,      pStatusUpd->bBookmarks ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		pMenu->EnableItem( IDM_PREVBM,      pStatusUpd->bBookmarks ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		pMenu->EnableItem( IDM_LASTBM,      pStatusUpd->bBookmarks ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		//pMenu->EnableItem(IDM_OPEN_SELECTED_PATH,   bIsPathSelected ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );

		// And the popup menu...
		pMenu = &m_pOwner->m_pFrame->m_ContextMenu;
		pMenu->EnableItem(IDM_COPY,        pStatusUpd->bCanCopy   ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );
		//pMenu->EnableItem(IDM_OPEN_SELECTED_PATH,   bIsPathSelected ? MF_BYCOMMAND | MF_ENABLED : MF_BYCOMMAND | MF_GRAYED );

		// And toolbar buttons.
		BCToolbar *pTool = &m_pOwner->m_pFrame->m_Toolbar;
		pTool->EnableButton( IDM_COPY,	  pStatusUpd->bCanCopy   );
		pTool->EnableButton( IDM_CLEARBM, pStatusUpd->bBookmarks );
		pTool->EnableButton( IDM_NEXTBM,  pStatusUpd->bBookmarks );
		pTool->EnableButton( IDM_PREVBM,  pStatusUpd->bBookmarks );

		// Update...
		m_pOwner->SetTitle();
	}
	return 0;
}
Beispiel #13
0
void CMymenuView::OnRButtonDown(UINT /*nFlags*/, CPoint point) //SK: removed warning C4100: 'nFlags' : unreferenced formal parameter
{
	popmenu.LoadMenu(IDR_RIGHT_CLICK);
	popmenu.LoadToolbar(IDR_TOOLBAR);
	popmenu.LoadToolbar(IDR_MAINFRAME);
	ClientToScreen(&point);
	BCMenu *psub = (BCMenu *)popmenu.GetSubMenu(0);
	BCMenu *pSelect = (BCMenu *)psub->GetSubMenu(1);
	if(pSelect){
		pSelect->AppendMenu(MF_STRING,ID_WINDOW_TILE_HORZ,_T("&Tile"));
		pSelect->ModifyODMenu(NULL,ID_WINDOW_TILE_HORZ,IDB_WINDOW_TILE);
	}
	psub->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,AfxGetMainWnd());
	popmenu.DestroyMenu();
}
Beispiel #14
0
void CShowMenu::InsertMenu(int subpos,int pos, UINT nFlag)
{
	BCMenu* pSubMenu = (BCMenu*)m_pMenu->GetSubMenu(subpos);
	pSubMenu->InsertMenu( pos, nFlag );
}
Beispiel #15
0
void FileScrapDropDlg::OnInitMenuPopup(CMenu* pPopupMenu, xpr_uint_t nIndex, xpr_bool_t bSysMenu) 
{
    ASSERT(pPopupMenu != XPR_NULL);

    //super::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);

    // for multi-language
    BCMenu *pBCPopupMenu = dynamic_cast<BCMenu *>(pPopupMenu);
    if (pBCPopupMenu != XPR_NULL)
    {
        xpr_uint_t sId;
        xpr_sint_t sCount = pBCPopupMenu->GetMenuItemCount();

        const xpr_tchar_t *sStringId;
        const xpr_tchar_t *sString;
        xpr::string sMenuText;
        CommandStringTable &sCommandStringTable = CommandStringTable::instance();

        xpr_sint_t i;
        for (i = 0; i < sCount; ++i)
        {
            sId = pBCPopupMenu->GetMenuItemID(i);

            // apply string table
            if (sId != 0) // if sId is 0, it's separator.
            {
                if (sId == -1)
                {
                    // if sId(xpr_uint_t) is -1, it's sub-menu.
                    pBCPopupMenu->GetMenuText(i, sMenuText, MF_BYPOSITION);

                    sString = gApp.loadString(sMenuText);
                    pBCPopupMenu->SetMenuText(i, (xpr_tchar_t *)sString, MF_BYPOSITION);
                }
                else
                {
                    sStringId = sCommandStringTable.loadString(sId);
                    if (sStringId != XPR_NULL)
                    {
                        sString = gApp.loadString(sStringId);

                        pBCPopupMenu->SetMenuText(sId, (xpr_tchar_t *)sString, MF_BYCOMMAND);
                    }
                }
            }
        }
    }

    // Check the enabled state of various menu items.
    CCmdUI sState;
    sState.m_pMenu = pPopupMenu;
    ASSERT(sState.m_pOther == XPR_NULL);
    ASSERT(sState.m_pParentMenu == XPR_NULL);

    // Determine if menu is popup in top-level menu and set m_pOther to
    // it if so (m_pParentMenu == XPR_NULL indicates that it is secondary popup).
    HMENU sParentMenu;
    if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
        sState.m_pParentMenu = pPopupMenu;    // Parent == child for tracking popup.
    else if ((sParentMenu = ::GetMenu(m_hWnd)) != XPR_NULL)
    {
        CWnd *sParentWnd = this;
        // Child windows don't have menus--need to go to the top!
        if (sParentWnd != XPR_NULL && (sParentMenu = ::GetMenu(sParentWnd->m_hWnd)) != XPR_NULL)
        {
            xpr_sint_t sIndex;
            xpr_sint_t sIndexMax = ::GetMenuItemCount(sParentMenu);
            for (sIndex = 0; sIndex < sIndexMax; ++sIndex)
            {
                if (::GetSubMenu(sParentMenu, sIndex) == pPopupMenu->m_hMenu)
                {
                    // When popup is found, m_pParentMenu is containing menu.
                    sState.m_pParentMenu = CMenu::FromHandle(sParentMenu);
                    break;
                }
            }
        }
    }

    sState.m_nIndexMax = pPopupMenu->GetMenuItemCount();
    for (sState.m_nIndex = 0; sState.m_nIndex < sState.m_nIndexMax; ++sState.m_nIndex)
    {
        sState.m_nID = pPopupMenu->GetMenuItemID(sState.m_nIndex);
        if (sState.m_nID == 0)
            continue; // Menu separator or invalid cmd - ignore it.

        ASSERT(sState.m_pOther == XPR_NULL);
        ASSERT(sState.m_pMenu != XPR_NULL);
        if (sState.m_nID == (xpr_uint_t)-1)
        {
            // Possibly a popup menu, route to first item of that popup.
            sState.m_pSubMenu = pPopupMenu->GetSubMenu(sState.m_nIndex);
            if (sState.m_pSubMenu == XPR_NULL ||
                (sState.m_nID = sState.m_pSubMenu->GetMenuItemID(0)) == 0 ||
                sState.m_nID == (xpr_uint_t)-1)
            {
                continue;       // First item of popup can't be routed to.
            }

            sState.DoUpdate(this, XPR_TRUE);   // Popups are never auto disabled.
        }
        else
        {
            // Normal menu item.
            // Auto enable/disable if frame window has m_bAutoMenuEnable
            // set and command is _not_ a system command.
            sState.m_pSubMenu = XPR_NULL;
            sState.DoUpdate(this, XPR_FALSE);
        }

        // Adjust for menu deletions and additions.
        xpr_uint_t sCount = pPopupMenu->GetMenuItemCount();
        if (sCount < sState.m_nIndexMax)
        {
            sState.m_nIndex -= (sState.m_nIndexMax - sCount);
            while (sState.m_nIndex < sCount && pPopupMenu->GetMenuItemID(sState.m_nIndex) == sState.m_nID)
            {
                sState.m_nIndex++;
            }
        }

        sState.m_nIndexMax = sCount;
    }
}
Beispiel #16
0
void BookmarkToolBar::OnContextMenu(CWnd* pWnd, CPoint aPoint)
{
    CToolBarCtrl &sToolBarCtrl = GetToolBarCtrl();

    CPoint sClientPoint(aPoint);
    ScreenToClient(&sClientPoint);

    xpr_bool_t sSucceeded = XPR_FALSE;
    xpr_sint_t sIndex = sToolBarCtrl.HitTest(&sClientPoint);
    if (GetKeyState(VK_CONTROL) < 0 && sIndex >= 0)
    {
        BookmarkItem *sBookmarkItem = BookmarkMgr::instance().getBookmark(sIndex);
        if (sBookmarkItem != XPR_NULL)
        {
            LPITEMIDLIST sFullPidl = sBookmarkItem->getPidl();
            if (sFullPidl != XPR_NULL)
            {
                xpr_bool_t    sResult;
                LPSHELLFOLDER sShellFolder = XPR_NULL;
                LPCITEMIDLIST sPidl        = XPR_NULL;

                sResult = fxfile::base::Pidl::getSimplePidl(sFullPidl, sShellFolder, sPidl);
                if (SUCCEEDED(sResult) && sShellFolder != XPR_NULL && sPidl != XPR_NULL)
                {
                    ContextMenu sContextMenu(GetSafeHwnd());
                    if (sContextMenu.init(sShellFolder, &sPidl, 1))
                    {
                        TBBUTTON sTbButton = {0};
                        sToolBarCtrl.GetButton(sIndex, &sTbButton);
                        sToolBarCtrl.SetState(sTbButton.idCommand, TBSTATE_MARKED | TBSTATE_ENABLED);

                        xpr_uint_t sId = sContextMenu.trackPopupMenu(TPM_LEFTALIGN | TPM_RETURNCMD | TPM_RIGHTBUTTON, &aPoint, CMF_EXPLORE);
                        if (sId != -1)
                        {
                            sId -= sContextMenu.getFirstId();

                            xpr_tchar_t sVerb[0xff] = {0};
                            sContextMenu.getCommandVerb(sId, sVerb, 0xfe);

                            xpr_bool_t sSelfInvoke = XPR_FALSE;

                            if (_tcsicmp(sVerb, CMID_VERB_OPEN) == 0)
                            {
                                gFrame->gotoBookmark(sIndex);
                                sSelfInvoke = XPR_TRUE;
                            }

                            if (sSelfInvoke == XPR_FALSE)
                                sContextMenu.invokeCommand(sId);
                        }

                        sToolBarCtrl.GetButton(sIndex, &sTbButton);
                        sToolBarCtrl.SetState(sTbButton.idCommand, TBSTATE_ENABLED);
                    }

                    sContextMenu.destroy();

                    sSucceeded = XPR_TRUE;
                }

                COM_RELEASE(sShellFolder);
                COM_FREE(sFullPidl);
            }
        }
    }

    if (sSucceeded == XPR_FALSE)
    {
        BCMenu sMenu;
        if (sMenu.LoadMenu(IDR_COOLBAR_BOOKMARKBAR) == XPR_TRUE)
        {
            BCMenu *sPopupMenu = (BCMenu *)sMenu.GetSubMenu(0);
            if (XPR_IS_NOT_NULL(sPopupMenu))
                sPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, aPoint, AfxGetMainWnd());
        }
    }
}
Beispiel #17
0
/**
 * Show context menu and handle user selection.
 */
void CLocationView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	if (point.x == -1 && point.y == -1)
	{
		//keystroke invocation
		CRect rect;
		GetClientRect(rect);
		ClientToScreen(rect);

		point = rect.TopLeft();
		point.Offset(5, 5);
	}

	CRect rc;
	CPoint pt = point;
	GetClientRect(rc);
	ScreenToClient(&pt);
	BCMenu menu;
	VERIFY(menu.LoadMenu(IDR_POPUP_LOCATIONBAR));
	theApp.TranslateMenu(menu.m_hMenu);

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

	CCmdUI cmdUI;
	cmdUI.m_pMenu = pPopup;
	cmdUI.m_nIndexMax = cmdUI.m_pMenu->GetMenuItemCount();
	for (cmdUI.m_nIndex = 0 ; cmdUI.m_nIndex < cmdUI.m_nIndexMax ; ++cmdUI.m_nIndex)
	{
		cmdUI.m_nID = cmdUI.m_pMenu->GetMenuItemID(cmdUI.m_nIndex);
		switch (cmdUI.m_nID)
		{
		case ID_DISPLAY_MOVED_NONE:
			cmdUI.SetRadio(m_displayMovedBlocks == DISPLAY_MOVED_NONE);
			break;
		case ID_DISPLAY_MOVED_ALL:
			cmdUI.SetRadio(m_displayMovedBlocks == DISPLAY_MOVED_ALL);
			break;
		case ID_DISPLAY_MOVED_FOLLOW_DIFF:
			cmdUI.SetRadio(m_displayMovedBlocks == DISPLAY_MOVED_FOLLOW_DIFF);
			break;
		}
	}

	CString strItem;
	CString strNum;
	int nLine = -1;
	int bar = IsInsideBar(rc, pt);

	// If cursor over bar, format string with linenumber, else disable item
	if (bar != BAR_NONE)
	{
		// If outside bar area use left bar
		if (bar == BAR_YAREA)
			bar = BAR_LEFT;
		nLine = GetLineFromYPos(pt.y, bar);
		strNum.Format(_T("%d"), nLine + 1); // Show linenumber not lineindex
	}
	else
		pPopup->EnableMenuItem(ID_LOCBAR_GOTODIFF, MF_GRAYED);
	LangFormatString1(strItem, ID_LOCBAR_GOTOLINE_FMT, strNum);
	pPopup->SetMenuText(ID_LOCBAR_GOTODIFF, strItem, MF_BYCOMMAND);

	// invoke context menu
	// we don't want to use the main application handlers, so we use flags TPM_NONOTIFY | TPM_RETURNCMD
	// and handle the command after TrackPopupMenu
	int command = pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_NONOTIFY  | TPM_RETURNCMD, point.x, point.y, AfxGetMainWnd());

	CMergeDoc* pDoc = GetDocument();
	switch (command)
	{
	case ID_LOCBAR_GOTODIFF:
		m_view[MERGE_VIEW_LEFT]->GotoLine(nLine, true, bar);
	if (bar == BAR_LEFT || bar == BAR_RIGHT)
		m_view[bar]->SetFocus();
		break;
	case ID_EDIT_WMGOTO:
		m_view[MERGE_VIEW_LEFT]->WMGoto();
		break;
	case ID_DISPLAY_MOVED_NONE:
		SetConnectMovedBlocks(DISPLAY_MOVED_NONE);
		pDoc->SetDetectMovedBlocks(FALSE);
		break;
	case ID_DISPLAY_MOVED_ALL:
		SetConnectMovedBlocks(DISPLAY_MOVED_ALL);
		pDoc->SetDetectMovedBlocks(TRUE);
		break;
	case ID_DISPLAY_MOVED_FOLLOW_DIFF:
		SetConnectMovedBlocks(DISPLAY_MOVED_FOLLOW_DIFF);
		pDoc->SetDetectMovedBlocks(TRUE);
		break;
	}
}