예제 #1
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();
}
예제 #2
0
void NewGUI_RemoveInvalidSeparators(BCMenu *pMenu, BOOL bIsTopLevel)
{
	ASSERT(pMenu != NULL); if(pMenu == NULL) return;

	int nSub = 0;
	while(true)
	{
		BCMenu *pSub = NewGUI_GetBCMenu(pMenu->GetSubMenu(nSub));
		if(pSub == NULL) break;

		NewGUI_RemoveInvalidSeparators(pSub, FALSE);
		++nSub;
	}

	BOOL bSepAllowed = FALSE;
	UINT uCount = pMenu->GetMenuItemCount();
	for(UINT uItem = 0; uItem < uCount; ++uItem)
	{
		if(uItem == (uCount - 1)) bSepAllowed = FALSE;

		const UINT uState = pMenu->GetMenuState(uItem, MF_BYPOSITION);
		if((bIsTopLevel == FALSE) && ((uState & MF_SEPARATOR) != 0) &&
			((uState & MF_POPUP) == 0))
		{
			if(bSepAllowed == FALSE)
			{
				pMenu->DeleteMenu(uItem, MF_BYPOSITION);
				--uCount;
				--uItem;

				if((uItem == (uCount - 1)) && (uItem >= 1)) --uItem;
			}

			bSepAllowed = FALSE;
		}
		else bSepAllowed = TRUE;
	}
}